diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-05-05 15:40:42 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-05-05 15:40:42 +0400 |
commit | bb1f8d9586220446c4df6339554b6cb0af02f030 (patch) | |
tree | 8b0778b7f5e8eb18b7ce817e150efc949adcab22 /source | |
parent | 19e27ce15b213bc7c888e4a57ad97faa5dbb4220 (diff) | |
parent | f1e3c31d4ffa86b695fddd45d9ccc6ce9ac62ea7 (diff) |
Merged changes in the trunk up to revision 46309.
Conflicts resolved:
source/blender/blenloader/intern/readfile.c
source/blender/editors/interface/resources.c
source/blender/editors/mesh/editmesh_tools.c
Diffstat (limited to 'source')
679 files changed, 28512 insertions, 22338 deletions
diff --git a/source/blender/avi/AVI_avi.h b/source/blender/avi/AVI_avi.h index a579bf7dfec..76e11ebad08 100644 --- a/source/blender/avi/AVI_avi.h +++ b/source/blender/avi/AVI_avi.h @@ -57,124 +57,124 @@ #include <stdio.h> /* for FILE */ typedef struct _AviChunk { - int fcc; - int size; + int fcc; + int size; } AviChunk; typedef struct _AviList { - int fcc; - int size; - int ids; + int fcc; + int size; + int ids; } AviList; typedef struct _AviMainHeader { - int fcc; - int size; - int MicroSecPerFrame; /* MicroSecPerFrame - timing between frames */ - int MaxBytesPerSec; /* MaxBytesPerSec - approx bps system must handle */ - int PaddingGranularity; - int Flags; + int fcc; + int size; + int MicroSecPerFrame; /* MicroSecPerFrame - timing between frames */ + int MaxBytesPerSec; /* MaxBytesPerSec - approx bps system must handle */ + int PaddingGranularity; + int Flags; #define AVIF_HASINDEX 0x00000010 /* had idx1 chunk */ #define AVIF_MUSTUSEINDEX 0x00000020 /* must use idx1 chunk to determine order */ #define AVIF_ISINTERLEAVED 0x00000100 /* AVI file is interleaved */ #define AVIF_TRUSTCKTYPE 0x00000800 #define AVIF_WASCAPTUREFILE 0x00010000 /* specially allocated used for capturing real time video */ #define AVIF_COPYRIGHTED 0x00020000 /* contains copyrighted data */ - - int TotalFrames; - int InitialFrames; /* InitialFrames - initial frame before interleaving */ - int Streams; - int SuggestedBufferSize; - int Width; - int Height; - int Reserved[4]; + + int TotalFrames; + int InitialFrames; /* InitialFrames - initial frame before interleaving */ + int Streams; + int SuggestedBufferSize; + int Width; + int Height; + int Reserved[4]; } AviMainHeader; typedef struct _AviStreamHeader { - int fcc; - int size; - int Type; + int fcc; + int size; + int Type; #define AVIST_VIDEO FCC("vids") #define AVIST_AUDIO FCC("auds") #define AVIST_MIDI FCC("mids") #define AVIST_TEXT FCC("txts") - - int Handler; - int Flags; + + int Handler; + int Flags; #define AVISF_DISABLED 0x00000001 #define AVISF_VIDEO_PALCHANGES 0x00010000 - - short Priority; - short Language; - int InitialFrames; - int Scale; - int Rate; - int Start; - int Length; - int SuggestedBufferSize; - int Quality; - int SampleSize; - short left; - short top; - short right; - short bottom; + + short Priority; + short Language; + int InitialFrames; + int Scale; + int Rate; + int Start; + int Length; + int SuggestedBufferSize; + int Quality; + int SampleSize; + short left; + short top; + short right; + short bottom; } AviStreamHeader; typedef struct _AviBitmapInfoHeader { - int fcc; - int size; - int Size; - int Width; - int Height; - short Planes; - short BitCount; - int Compression; - int SizeImage; - int XPelsPerMeter; - int YPelsPerMeter; - int ClrUsed; - int ClrImportant; + int fcc; + int size; + int Size; + int Width; + int Height; + short Planes; + short BitCount; + int Compression; + int SizeImage; + int XPelsPerMeter; + int YPelsPerMeter; + int ClrUsed; + int ClrImportant; } AviBitmapInfoHeader; typedef struct _AviMJPEGUnknown { - int a; - int b; - int c; - int d; - int e; - int f; - int g; + int a; + int b; + int c; + int d; + int e; + int f; + int g; } AviMJPEGUnknown; typedef struct _AviIndexEntry { - int ChunkId; - int Flags; + int ChunkId; + int Flags; #define AVIIF_LIST 0x00000001 #define AVIIF_KEYFRAME 0x00000010 #define AVIIF_NO_TIME 0x00000100 #define AVIIF_COMPRESSOR 0x0FFF0000 - int Offset; - int Size; + int Offset; + int Size; } AviIndexEntry; typedef struct _AviIndex { - int fcc; - int size; - AviIndexEntry *entrys; + int fcc; + int size; + AviIndexEntry *entrys; } AviIndex; typedef enum { - AVI_FORMAT_RGB24, /* The most basic of forms, 3 bytes per pixel, 1 per r, g, b */ - AVI_FORMAT_RGB32, /* The second most basic of forms, 4 bytes per pixel, 1 per r, g, b, alpha */ - AVI_FORMAT_AVI_RGB, /* Same as above, but is in the weird AVI order (bottom to top, left to right) */ - AVI_FORMAT_MJPEG /* Motion-JPEG */ + AVI_FORMAT_RGB24, /* The most basic of forms, 3 bytes per pixel, 1 per r, g, b */ + AVI_FORMAT_RGB32, /* The second most basic of forms, 4 bytes per pixel, 1 per r, g, b, alpha */ + AVI_FORMAT_AVI_RGB, /* Same as above, but is in the weird AVI order (bottom to top, left to right) */ + AVI_FORMAT_MJPEG /* Motion-JPEG */ } AviFormat; typedef struct _AviStreamRec { - AviStreamHeader sh; - void *sf; - int sf_size; - AviFormat format; + AviStreamHeader sh; + void *sf; + int sf_size; + AviFormat format; } AviStreamRec; typedef struct _AviMovie { @@ -201,23 +201,23 @@ typedef struct _AviMovie { } AviMovie; typedef enum { - AVI_ERROR_NONE=0, - AVI_ERROR_COMPRESSION, - AVI_ERROR_OPEN, - AVI_ERROR_READING, - AVI_ERROR_WRITING, - AVI_ERROR_FORMAT, - AVI_ERROR_ALLOC, - AVI_ERROR_FOUND, - AVI_ERROR_OPTION + AVI_ERROR_NONE=0, + AVI_ERROR_COMPRESSION, + AVI_ERROR_OPEN, + AVI_ERROR_READING, + AVI_ERROR_WRITING, + AVI_ERROR_FORMAT, + AVI_ERROR_ALLOC, + AVI_ERROR_FOUND, + AVI_ERROR_OPTION } AviError; /* belongs to the option-setting function. */ typedef enum { - AVI_OPTION_WIDTH=0, - AVI_OPTION_HEIGHT, - AVI_OPTION_QUALITY, - AVI_OPTION_FRAMERATE + AVI_OPTION_WIDTH=0, + AVI_OPTION_HEIGHT, + AVI_OPTION_QUALITY, + AVI_OPTION_FRAMERATE } AviOption; /* The offsets that will always stay the same in AVI files we @@ -235,28 +235,28 @@ typedef enum { /** * Test whether this is an avi-format. */ -int AVI_is_avi (const char *name); +int AVI_is_avi(const char *name); /** * Open a compressed file, decompress it into memory. */ -AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...); +AviError AVI_open_compress(char *name, AviMovie *movie, int streams, ...); /** * Finalize a compressed output stream. */ -AviError AVI_close_compress (AviMovie *movie); +AviError AVI_close_compress(AviMovie *movie); /** * Choose a compression option for \<movie\>. Possible options are * AVI_OPTION_TYPE_MAIN, AVI_OPTION_TYPE_STRH, AVI_OPTION_TYPE_STRF */ -AviError AVI_set_compress_option (AviMovie *movie, - int option_type, - int stream, - AviOption option, - void *opt_data); +AviError AVI_set_compress_option(AviMovie *movie, + int option_type, + int stream, + AviOption option, + void *opt_data); /* Hmmm... there should be some explanantion about what these mean */ /** * Compression option, for use in avi_set_compress_option @@ -275,35 +275,34 @@ AviError AVI_set_compress_option (AviMovie *movie, * Direct the streams \<avist_type\> to \<movie\>. Redirect \<stream_num\> * streams. */ -int AVI_get_stream (AviMovie *movie, int avist_type, int stream_num); +int AVI_get_stream(AviMovie *movie, int avist_type, int stream_num); /** * Open a movie stream from file. */ -AviError AVI_open_movie (const char *name, AviMovie *movie); +AviError AVI_open_movie(const char *name, AviMovie *movie); /** * Read a frame from a movie stream. */ -void *AVI_read_frame (AviMovie *movie, - AviFormat format, - int frame, - int stream); +void *AVI_read_frame(AviMovie *movie, + AviFormat format, + int frame, + int stream); /** * Close an open movie stream. */ -AviError AVI_close (AviMovie *movie); +AviError AVI_close(AviMovie *movie); /** * Write frames to a movie stream. */ -AviError AVI_write_frame (AviMovie *movie, int frame_num, ...); +AviError AVI_write_frame(AviMovie *movie, int frame_num, ...); /** * Unused but still external */ -AviError AVI_print_error (AviError error); -void AVI_set_debug (int mode); +AviError AVI_print_error(AviError error); +void AVI_set_debug(int mode); #endif /* __AVI_AVI_H__ */ - diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c index 637d4be30fd..17c29e2a834 100644 --- a/source/blender/avi/intern/avi.c +++ b/source/blender/avi/intern/avi.c @@ -1,7 +1,4 @@ /* - * - * This is external code. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -31,6 +28,8 @@ /** \file blender/avi/intern/avi.c * \ingroup avi + * + * This is external code. */ @@ -58,8 +57,8 @@ static char DEBUG_FCC[4]; #define DEBUG_PRINT(x) if (AVI_DEBUG) { printf("AVI DEBUG: " x); } (void)0 /* local functions */ -char *fcc_to_char (unsigned int fcc); -char *tcc_to_char (unsigned int tcc); +char *fcc_to_char(unsigned int fcc); +char *tcc_to_char(unsigned int tcc); @@ -89,7 +88,7 @@ unsigned int GET_TCC (FILE *fp) return FCC (tmp); } -char *fcc_to_char (unsigned int fcc) +char *fcc_to_char(unsigned int fcc) { DEBUG_FCC[0]= (fcc)&127; DEBUG_FCC[1]= (fcc>>8)&127; @@ -99,7 +98,7 @@ char *fcc_to_char (unsigned int fcc) return DEBUG_FCC; } -char *tcc_to_char (unsigned int tcc) +char *tcc_to_char(unsigned int tcc) { DEBUG_FCC[0]= (tcc)&127; DEBUG_FCC[1]= (tcc>>8)&127; @@ -109,7 +108,7 @@ char *tcc_to_char (unsigned int tcc) return DEBUG_FCC; } -int AVI_get_stream (AviMovie *movie, int avist_type, int stream_num) +int AVI_get_stream(AviMovie *movie, int avist_type, int stream_num) { int cur_stream; @@ -157,7 +156,7 @@ static int fcc_is_data (int fcc) return 1; } -AviError AVI_print_error (AviError in_error) +AviError AVI_print_error(AviError in_error) { int error; @@ -200,12 +199,12 @@ AviError AVI_print_error (AviError in_error) return in_error; } #if 0 -void AVI_set_debug (int mode) +void AVI_set_debug(int mode) { AVI_DEBUG= mode; } -int AVI_is_avi (char *name) +int AVI_is_avi(char *name) { FILE *fp; int ret; @@ -228,7 +227,7 @@ int AVI_is_avi (char *name) } #endif -int AVI_is_avi (const char *name) +int AVI_is_avi(const char *name) { int temp, fcca, j; AviMovie movie= {NULL}; @@ -425,7 +424,7 @@ int AVI_is_avi (const char *name) } -AviError AVI_open_movie (const char *name, AviMovie *movie) +AviError AVI_open_movie(const char *name, AviMovie *movie) { int temp, fcca, size, j; @@ -638,7 +637,7 @@ AviError AVI_open_movie (const char *name, AviMovie *movie) return AVI_ERROR_FORMAT; } - movie->entries = (AviIndexEntry *) MEM_mallocN (movie->index_entries * sizeof(AviIndexEntry),"movieentries"); + movie->entries = (AviIndexEntry *) MEM_mallocN (movie->index_entries * sizeof(AviIndexEntry), "movieentries"); for (temp=0; temp < movie->index_entries; temp++) { movie->entries[temp].ChunkId = GET_FCC (movie->fp); @@ -701,7 +700,7 @@ void *AVI_read_frame (AviMovie *movie, AviFormat format, int frame, int stream) fseek (movie->fp, movie->read_offset + movie->entries[i-1].Offset, SEEK_SET); temp = GET_FCC(movie->fp); - buffer = MEM_mallocN (temp,"readbuffer"); + buffer = MEM_mallocN (temp, "readbuffer"); if (fread (buffer, 1, temp, movie->fp) != temp) { MEM_freeN(buffer); @@ -714,7 +713,7 @@ void *AVI_read_frame (AviMovie *movie, AviFormat format, int frame, int stream) return buffer; } -AviError AVI_close (AviMovie *movie) +AviError AVI_close(AviMovie *movie) { int i; @@ -737,7 +736,7 @@ AviError AVI_close (AviMovie *movie) return AVI_ERROR_NONE; } -AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...) +AviError AVI_open_compress(char *name, AviMovie *movie, int streams, ...) { va_list ap; AviList list; @@ -755,14 +754,14 @@ AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...) if (movie->fp == NULL) return AVI_ERROR_OPEN; - movie->offset_table = (int64_t *) MEM_mallocN ((1+streams*2) * sizeof (int64_t),"offsettable"); + movie->offset_table = (int64_t *) MEM_mallocN ((1+streams*2) * sizeof (int64_t), "offsettable"); for (i=0; i < 1 + streams*2; i++) movie->offset_table[i] = -1L; movie->entries = NULL; - movie->header = (AviMainHeader *) MEM_mallocN (sizeof(AviMainHeader),"movieheader"); + movie->header = (AviMainHeader *) MEM_mallocN (sizeof(AviMainHeader), "movieheader"); movie->header->fcc = FCC("avih"); movie->header->size = 56; @@ -781,7 +780,7 @@ AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...) movie->header->Reserved[2] = 0; movie->header->Reserved[3] = 0; - movie->streams = (AviStreamRec *) MEM_mallocN (sizeof(AviStreamRec) * movie->header->Streams,"moviestreams"); + movie->streams = (AviStreamRec *) MEM_mallocN (sizeof(AviStreamRec) * movie->header->Streams, "moviestreams"); va_start (ap, streams); @@ -818,7 +817,7 @@ AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...) #if 0 if (movie->streams[i].format == AVI_FORMAT_MJPEG) { movie->streams[i].sf = MEM_mallocN (sizeof(AviBitmapInfoHeader) - + sizeof(AviMJPEGUnknown),"moviestreamformatL"); + + sizeof(AviMJPEGUnknown), "moviestreamformatL"); movie->streams[i].sf_size = sizeof(AviBitmapInfoHeader) + sizeof(AviMJPEGUnknown); } else { @@ -933,7 +932,7 @@ AviError AVI_open_compress (char *name, AviMovie *movie, int streams, ...) return AVI_ERROR_NONE; } -AviError AVI_write_frame (AviMovie *movie, int frame_num, ...) +AviError AVI_write_frame(AviMovie *movie, int frame_num, ...) { AviList list; AviChunk chunk; @@ -952,7 +951,7 @@ AviError AVI_write_frame (AviMovie *movie, int frame_num, ...) if (frame_num+1 > movie->index_entries) { temp = (AviIndexEntry *) MEM_mallocN ((frame_num+1) * - (movie->header->Streams+1) * sizeof(AviIndexEntry),"newidxentry"); + (movie->header->Streams+1) * sizeof(AviIndexEntry), "newidxentry"); if (movie->entries != NULL) { memcpy (temp, movie->entries, movie->index_entries * (movie->header->Streams+1) * sizeof(AviIndexEntry)); @@ -1041,7 +1040,7 @@ AviError AVI_write_frame (AviMovie *movie, int frame_num, ...) return AVI_ERROR_NONE; } -AviError AVI_close_compress (AviMovie *movie) +AviError AVI_close_compress(AviMovie *movie) { int temp, movi_size, i; @@ -1062,7 +1061,7 @@ AviError AVI_close_compress (AviMovie *movie) fseek (movie->fp, movie->movi_offset, SEEK_SET); - PUT_FCCN((movi_size-(movie->movi_offset+4L)),movie->fp); + PUT_FCCN((movi_size-(movie->movi_offset+4L)), movie->fp); fclose (movie->fp); diff --git a/source/blender/avi/intern/avirgb.c b/source/blender/avi/intern/avirgb.c index 8e5806c09cf..36e862708f4 100644 --- a/source/blender/avi/intern/avirgb.c +++ b/source/blender/avi/intern/avirgb.c @@ -1,7 +1,4 @@ /* - * - * This is external code. Converts rgb-type avi-s. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -31,6 +28,8 @@ /** \file blender/avi/intern/avirgb.c * \ingroup avi + * + * This is external code. Converts rgb-type avi-s. */ @@ -45,7 +44,7 @@ void *avi_converter_from_avi_rgb (AviMovie *movie, int stream, unsigned char *buffer, int *size) { - int x, y,i, rowstride; + int x, y, i, rowstride; unsigned char *buf; AviBitmapInfoHeader *bi; short bits= 32; @@ -127,7 +126,7 @@ void *avi_converter_to_avi_rgb (AviMovie *movie, int stream, unsigned char *buff *size= movie->header->Height * movie->header->Width * 3; if (movie->header->Width%2) *size+= movie->header->Height; - buf = MEM_mallocN (*size,"toavirgbbuf"); + buf = MEM_mallocN (*size, "toavirgbbuf"); rowstride = movie->header->Width*3; if (movie->header->Width%2) rowstride++; diff --git a/source/blender/avi/intern/codecs.c b/source/blender/avi/intern/codecs.c index 2c244177655..c99938e7b9e 100644 --- a/source/blender/avi/intern/codecs.c +++ b/source/blender/avi/intern/codecs.c @@ -1,7 +1,4 @@ /* - * - * This is external code. Identify and convert different avi-files. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,6 +27,8 @@ /** \file blender/avi/intern/codecs.c * \ingroup avi + * + * This is external code. Identify and convert different avi-files. */ @@ -85,21 +84,21 @@ void *avi_format_convert (AviMovie *movie, int stream, void *buffer, AviFormat f return buffer; } -int avi_get_data_id (AviFormat format, int stream) +int avi_get_data_id(AviFormat format, int stream) { char fcc[5]; if (avi_get_format_type (format) == FCC("vids")) - sprintf (fcc,"%2.2ddc",stream); + sprintf (fcc, "%2.2ddc", stream); else if (avi_get_format_type (format) == FCC("auds")) - sprintf (fcc,"%2.2ddc",stream); + sprintf (fcc, "%2.2ddc", stream); else return 0; return FCC(fcc); } -int avi_get_format_type (AviFormat format) +int avi_get_format_type(AviFormat format) { switch (format) { case AVI_FORMAT_RGB24: @@ -114,7 +113,7 @@ int avi_get_format_type (AviFormat format) } } -int avi_get_format_fcc (AviFormat format) +int avi_get_format_fcc(AviFormat format) { switch (format) { case AVI_FORMAT_RGB24: @@ -131,7 +130,7 @@ int avi_get_format_fcc (AviFormat format) } } -int avi_get_format_compression (AviFormat format) +int avi_get_format_compression(AviFormat format) { switch (format) { case AVI_FORMAT_RGB24: diff --git a/source/blender/avi/intern/endian.c b/source/blender/avi/intern/endian.c index adcc7e8750a..fd8cc56f551 100644 --- a/source/blender/avi/intern/endian.c +++ b/source/blender/avi/intern/endian.c @@ -1,8 +1,4 @@ /* - * - * This is external code. Streams bytes to output depending on the - * endianness of the system. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -32,6 +28,9 @@ /** \file blender/avi/intern/endian.c * \ingroup avi + * + * This is external code. Streams bytes to output depending on the + * endianness of the system. */ @@ -49,7 +48,7 @@ #ifdef __BIG_ENDIAN__ static void invert (int *num) { - int new=0,i,j; + int new=0, i, j; for (j=0; j < 4; j++) { for (i=0; i<8; i++) { @@ -63,7 +62,7 @@ static void invert (int *num) static void sinvert (short int *num) { short int new=0; - int i,j; + int i, j; for (j=0; j < 2; j++) { for (i=0; i<8; i++) { @@ -169,7 +168,7 @@ static void Iindexe (AviIndexEntry *indexe) } #endif /* __BIG_ENDIAN__ */ -void awrite (AviMovie *movie, void *datain, int block, int size, FILE *fp, int type) +void awrite(AviMovie *movie, void *datain, int block, int size, FILE *fp, int type) { #ifdef __BIG_ENDIAN__ void *data; diff --git a/source/blender/avi/intern/endian.h b/source/blender/avi/intern/endian.h index 3229f32cbbd..7ef49cb1699 100644 --- a/source/blender/avi/intern/endian.h +++ b/source/blender/avi/intern/endian.h @@ -1,7 +1,4 @@ /* - * - * This is external code. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -26,14 +23,14 @@ * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** - * */ /** \file blender/avi/intern/endian.h * \ingroup avi + * + * This is external code. */ - #ifndef __ENDIAN_H__ #define __ENDIAN_H__ @@ -49,7 +46,7 @@ #define AVI_INDEXE 6 #define AVI_MJPEGU 7 -void awrite (AviMovie *movie, void *datain, int block, int size, FILE *fp, int type); +void awrite(AviMovie *movie, void *datain, int block, int size, FILE *fp, int type); #endif diff --git a/source/blender/avi/intern/mjpeg.c b/source/blender/avi/intern/mjpeg.c index f6ebcab2aeb..29356f8ef28 100644 --- a/source/blender/avi/intern/mjpeg.c +++ b/source/blender/avi/intern/mjpeg.c @@ -1,7 +1,4 @@ /* - * - * This is external code. Converts between avi and mpeg/jpeg. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -31,6 +28,8 @@ /** \file blender/avi/intern/mjpeg.c * \ingroup avi + * + * This is external code. Converts between avi and mpeg/jpeg. */ diff --git a/source/blender/avi/intern/options.c b/source/blender/avi/intern/options.c index a2fd756ddaa..db9719c171d 100644 --- a/source/blender/avi/intern/options.c +++ b/source/blender/avi/intern/options.c @@ -1,8 +1,4 @@ /* - * - * This is external code. Sets some compression related options - * (width, height quality, framerate). - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -32,6 +28,9 @@ /** \file blender/avi/intern/options.c * \ingroup avi + * + * This is external code. Sets some compression related options + * (width, height quality, framerate). */ #include "AVI_avi.h" @@ -44,7 +43,7 @@ /* avi_set_compress_options gets its own file... now don't WE feel important? */ -AviError AVI_set_compress_option (AviMovie *movie, int option_type, int stream, AviOption option, void *opt_data) +AviError AVI_set_compress_option(AviMovie *movie, int option_type, int stream, AviOption option, void *opt_data) { int i; int useconds; diff --git a/source/blender/avi/intern/rgb32.c b/source/blender/avi/intern/rgb32.c index c6830d9666a..7b4958ca026 100644 --- a/source/blender/avi/intern/rgb32.c +++ b/source/blender/avi/intern/rgb32.c @@ -1,7 +1,4 @@ /* - * - * This is external code. Converts between rgb32 and avi. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -31,6 +28,8 @@ /** \file blender/avi/intern/rgb32.c * \ingroup avi + * + * This is external code. Converts between rgb32 and avi. */ diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 033efbfc1fc..9309cf15667 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -341,7 +341,7 @@ static void blf_texture5_draw(const float shadow_col[4], float uv[2][2], float x static void blf_texture3_draw(const float shadow_col[4], float uv[2][2], float x1, float y1, float x2, float y2) { float soft[9] = {1/16.0f, 2/16.0f, 1/16.0f, - 2/16.0f,4/16.0f, 2/16.0f, + 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f}; float color[4], *fp = soft; diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index cbe7975fdd6..bf9b9858348 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -180,7 +180,7 @@ typedef struct FontBLF { /* max texture size. */ int max_tex_size; - /* current opengl texture bind, avoids calling glGet */ + /* cache current OpenGL texture to save calls into the API */ int tex_bind_state; /* font options. */ diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c index 435ca8776bc..96d3a231ba5 100644 --- a/source/blender/blenfont/intern/blf_lang.c +++ b/source/blender/blenfont/intern/blf_lang.c @@ -106,6 +106,7 @@ static const char *locales[] = { "serbian (latin)", "sr_RS@latin", "kyrgyz", "ky_KG", "turkish", "tr_TR", + "hungarian", "hu_HU", }; void BLF_lang_init(void) @@ -182,9 +183,9 @@ void BLF_lang_set(const char *str) char *envStr; if (U.language == 0)/* use system setting */ - envStr = BLI_sprintfN( "LANG=%s", getenv("LANG") ); + envStr = BLI_sprintfN("LANG=%s", getenv("LANG")); else - envStr = BLI_sprintfN( "LANG=%s", short_locale ); + envStr = BLI_sprintfN("LANG=%s", short_locale); gettext_putenv(envStr); MEM_freeN(envStr); diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 3a28af97166..a15192f156a 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -664,22 +664,22 @@ void DM_update_weight_mcol(struct Object *ob, struct DerivedMesh *dm, int const typedef struct DMVertexAttribs { struct { struct MTFace *array; - int emOffset, glIndex, glTexco; + int em_offset, gl_index, gl_texco; } tface[MAX_MTFACE]; struct { struct MCol *array; - int emOffset, glIndex; + int em_offset, gl_index; } mcol[MAX_MCOL]; struct { float (*array)[4]; - int emOffset, glIndex; + int em_offset, gl_index; } tang; struct { float (*array)[3]; - int emOffset, glIndex, glTexco; + int em_offset, gl_index, gl_texco; } orco; int tottface, totmcol, tottang, totorco; diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 14f5c27c3df..62f1dbc5867 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -42,7 +42,7 @@ extern "C" { * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 263 -#define BLENDER_SUBVERSION 0 +#define BLENDER_SUBVERSION 4 #define BLENDER_MINVERSION 250 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h index 1ff9bc46638..b5edc8f3e50 100644 --- a/source/blender/blenkernel/BKE_brush.h +++ b/source/blender/blenkernel/BKE_brush.h @@ -41,34 +41,34 @@ struct wmOperator; // enum CurveMappingPreset; /* datablock functions */ -struct Brush *add_brush(const char *name); -struct Brush *copy_brush(struct Brush *brush); -void make_local_brush(struct Brush *brush); -void free_brush(struct Brush *brush); +struct Brush *BKE_brush_add(const char *name); +struct Brush *BKE_brush_copy(struct Brush *brush); +void BKE_brush_make_local(struct Brush *brush); +void BKE_brush_free(struct Brush *brush); -void brush_reset_sculpt(struct Brush *brush); +void BKE_brush_sculpt_reset(struct Brush *brush); /* image icon function */ struct ImBuf *get_brush_icon(struct Brush *brush); /* brush library operations used by different paint panels */ -int brush_texture_set_nr(struct Brush *brush, int nr); -int brush_texture_delete(struct Brush *brush); -int brush_clone_image_set_nr(struct Brush *brush, int nr); -int brush_clone_image_delete(struct Brush *brush); +int BKE_brush_texture_set_nr(struct Brush *brush, int nr); +int BKE_brush_texture_delete(struct Brush *brush); +int BKE_brush_clone_image_set_nr(struct Brush *brush, int nr); +int BKE_brush_clone_image_delete(struct Brush *brush); /* jitter */ -void brush_jitter_pos(const struct Scene *scene, struct Brush *brush, +void BKE_brush_jitter_pos(const struct Scene *scene, struct Brush *brush, const float pos[2], float jitterpos[2]); /* brush curve */ -void brush_curve_preset(struct Brush *b, /*enum CurveMappingPreset*/int preset); -float brush_curve_strength_clamp(struct Brush *br, float p, const float len); -float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */ +void BKE_brush_curve_preset(struct Brush *b, /*enum CurveMappingPreset*/int preset); +float BKE_brush_curve_strength_clamp(struct Brush *br, float p, const float len); +float BKE_brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */ /* sampling */ -void brush_sample_tex(const struct Scene *scene, struct Brush *brush, const float xy[2], float rgba[4], const int thread); -void brush_imbuf_new(const struct Scene *scene, struct Brush *brush, short flt, short texfalloff, int size, +void BKE_brush_sample_tex(const struct Scene *scene, struct Brush *brush, const float xy[2], float rgba[4], const int thread); +void BKE_brush_imbuf_new(const struct Scene *scene, struct Brush *brush, short flt, short texfalloff, int size, struct ImBuf **imbuf, int use_color_correction); /* painting */ @@ -76,46 +76,48 @@ struct BrushPainter; typedef struct BrushPainter BrushPainter; typedef int (*BrushFunc)(void *user, struct ImBuf *ibuf, const float lastpos[2], const float pos[2]); -BrushPainter *brush_painter_new(struct Scene *scene, struct Brush *brush); -void brush_painter_require_imbuf(BrushPainter *painter, short flt, +BrushPainter *BKE_brush_painter_new(struct Scene *scene, struct Brush *brush); +void BKE_brush_painter_require_imbuf(BrushPainter *painter, short flt, short texonly, int size); -int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2], +int BKE_brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2], double time, float pressure, void *user, int use_color_correction); -void brush_painter_break_stroke(BrushPainter *painter); -void brush_painter_free(BrushPainter *painter); +void BKE_brush_painter_break_stroke(BrushPainter *painter); +void BKE_brush_painter_free(BrushPainter *painter); /* texture */ -unsigned int *brush_gen_texture_cache(struct Brush *br, int half_side); +unsigned int *BKE_brush_gen_texture_cache(struct Brush *br, int half_side); /* radial control */ -struct ImBuf *brush_gen_radial_control_imbuf(struct Brush *br); +struct ImBuf *BKE_brush_gen_radial_control_imbuf(struct Brush *br); /* unified strength and size */ -int brush_size(const struct Scene *scene, struct Brush *brush); -void brush_set_size(struct Scene *scene, struct Brush *brush, int value); +int BKE_brush_size_get(const struct Scene *scene, struct Brush *brush); +void BKE_brush_size_set(struct Scene *scene, struct Brush *brush, int value); -float brush_unprojected_radius(const struct Scene *scene, struct Brush *brush); -void brush_set_unprojected_radius(struct Scene *scene, struct Brush *brush, float value); +float BKE_brush_unprojected_radius_get(const struct Scene *scene, struct Brush *brush); +void BKE_brush_unprojected_radius_set(struct Scene *scene, struct Brush *brush, float value); -float brush_alpha(const struct Scene *scene, struct Brush *brush); +float BKE_brush_alpha_get(const struct Scene *scene, struct Brush *brush); +float BKE_brush_weight_get(const Scene *scene, struct Brush *brush); +void BKE_brush_weight_set(const Scene *scene, struct Brush *brush, float value); -int brush_use_locked_size(const struct Scene *scene, struct Brush *brush); -int brush_use_alpha_pressure(const struct Scene *scene, struct Brush *brush); -int brush_use_size_pressure(const struct Scene *scene, struct Brush *brush); +int BKE_brush_use_locked_size(const struct Scene *scene, struct Brush *brush); +int BKE_brush_use_alpha_pressure(const struct Scene *scene, struct Brush *brush); +int BKE_brush_use_size_pressure(const struct Scene *scene, struct Brush *brush); /* scale unprojected radius to reflect a change in the brush's 2D size */ -void brush_scale_unprojected_radius(float *unprojected_radius, +void BKE_brush_scale_unprojected_radius(float *unprojected_radius, int new_brush_size, int old_brush_size); /* scale brush size to reflect a change in the brush's unprojected radius */ -void brush_scale_size(int *brush_size, +void BKE_brush_scale_size(int *BKE_brush_size_get, float new_unprojected_radius, float old_unprojected_radius); /* debugging only */ -void brush_debug_print_state(struct Brush *br); +void BKE_brush_debug_print_state(struct Brush *br); #endif diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h index 6d10219e74c..8f68d7abcac 100644 --- a/source/blender/blenkernel/BKE_camera.h +++ b/source/blender/blenkernel/BKE_camera.h @@ -48,18 +48,18 @@ struct View3D; /* Camera Datablock */ -void *add_camera(const char *name); -struct Camera *copy_camera(struct Camera *cam); -void make_local_camera(struct Camera *cam); -void free_camera(struct Camera *ca); +void *BKE_camera_add(const char *name); +struct Camera *BKE_camera_copy(struct Camera *cam); +void BKE_camera_make_local(struct Camera *cam); +void BKE_camera_free(struct Camera *ca); /* Camera Usage */ -float object_camera_dof_distance(struct Object *ob); -void object_camera_mode(struct RenderData *rd, struct Object *ob); +float BKE_camera_object_dof_distance(struct Object *ob); +void BKE_camera_object_mode(struct RenderData *rd, struct Object *ob); -int camera_sensor_fit(int sensor_fit, float sizex, float sizey); -float camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y); +int BKE_camera_sensor_fit(int sensor_fit, float sizex, float sizey); +float BKE_camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y); /* Camera Parameters: * @@ -102,21 +102,21 @@ typedef struct CameraParams { float winmat[4][4]; } CameraParams; -void camera_params_init(CameraParams *params); -void camera_params_from_object(CameraParams *params, struct Object *camera); -void camera_params_from_view3d(CameraParams *params, struct View3D *v3d, struct RegionView3D *rv3d); +void BKE_camera_params_init(CameraParams *params); +void BKE_camera_params_from_object(CameraParams *params, struct Object *camera); +void BKE_camera_params_from_view3d(CameraParams *params, struct View3D *v3d, struct RegionView3D *rv3d); -void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy); -void camera_params_compute_matrix(CameraParams *params); +void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy); +void BKE_camera_params_compute_matrix(CameraParams *params); /* Camera View Frame */ -void camera_view_frame_ex(struct Scene *scene, struct Camera *camera, float drawsize, const short do_clip, const float scale[3], +void BKE_camera_view_frame_ex(struct Scene *scene, struct Camera *camera, float drawsize, const short do_clip, const float scale[3], float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]); -void camera_view_frame(struct Scene *scene, struct Camera *camera, float r_vec[4][3]); +void BKE_camera_view_frame(struct Scene *scene, struct Camera *camera, float r_vec[4][3]); -int camera_view_frame_fit_to_scene( +int BKE_camera_view_frame_fit_to_scene( struct Scene *scene, struct View3D *v3d, struct Object *camera_ob, float r_co[3]); diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h index 623dbd9c7ac..378cc72beb1 100644 --- a/source/blender/blenkernel/BKE_cloth.h +++ b/source/blender/blenkernel/BKE_cloth.h @@ -169,10 +169,10 @@ typedef enum /* Spring types as defined in the paper.*/ typedef enum { - CLOTH_SPRING_TYPE_STRUCTURAL = ( 1 << 1 ), - CLOTH_SPRING_TYPE_SHEAR = ( 1 << 2 ) , - CLOTH_SPRING_TYPE_BENDING = ( 1 << 3 ), - CLOTH_SPRING_TYPE_GOAL = ( 1 << 4 ), + CLOTH_SPRING_TYPE_STRUCTURAL = (1 << 1), + CLOTH_SPRING_TYPE_SHEAR = (1 << 2), + CLOTH_SPRING_TYPE_BENDING = (1 << 3), + CLOTH_SPRING_TYPE_GOAL = (1 << 4) } CLOTH_SPRING_TYPES; /* SPRING FLAGS */ diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 6a3625e2133..4b52189d8b7 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -305,6 +305,7 @@ int CustomData_sizeof(int type); /* get the name of a layer type */ const char *CustomData_layertype_name(int type); +int CustomData_layertype_is_singleton(int type); /* make sure the name of layer at index is unique */ void CustomData_set_layer_unique_name(struct CustomData *data, int index); diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h index 17275b6ea7d..559dd4571f5 100644 --- a/source/blender/blenkernel/BKE_deform.h +++ b/source/blender/blenkernel/BKE_deform.h @@ -69,9 +69,13 @@ void defvert_flip_merged(struct MDeformVert *dvert, const int *flip_map, const i void defvert_normalize(struct MDeformVert *dvert); void defvert_normalize_lock(struct MDeformVert *dvert, const int def_nr_lock); -/* utility function, note that 32 chars is the maximum string length since its only +/* utility function, note that MAX_VGROUP_NAME chars is the maximum string length since its only * used with defgroups currently */ -void flip_side_name(char name[64], const char from_name[64], int strip_number); + +void BKE_deform_split_suffix(const char string[MAX_VGROUP_NAME], char base[MAX_VGROUP_NAME], char ext[MAX_VGROUP_NAME]); +void BKE_deform_split_prefix(const char string[MAX_VGROUP_NAME], char base[MAX_VGROUP_NAME], char ext[MAX_VGROUP_NAME]); + +void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_NAME], int strip_number); #endif diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h index 5a36add2834..c5684e83903 100644 --- a/source/blender/blenkernel/BKE_displist.h +++ b/source/blender/blenkernel/BKE_displist.h @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -24,8 +23,7 @@ * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** - -*/ + */ #ifndef __BKE_DISPLIST_H__ #define __BKE_DISPLIST_H__ diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index a71522773fe..59f8864bb21 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -1,4 +1,4 @@ -/** +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -6,6 +6,15 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * * Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** @@ -14,6 +23,10 @@ #ifndef __BKE_DYNAMICPAINT_H__ #define __BKE_DYNAMICPAINT_H__ +/** \file BKE_dynamicpaint.h + * \ingroup bke + */ + struct bContext; struct wmOperator; diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h index e94787cfd3c..16e98f25e0c 100644 --- a/source/blender/blenkernel/BKE_font.h +++ b/source/blender/blenkernel/BKE_font.h @@ -49,7 +49,7 @@ struct Main; struct chartrans { float xof, yof; float rot; - short linenr,charnr; + short linenr, charnr; char dobreak; }; diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index b18d25094dc..be21996428a 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -85,7 +85,7 @@ struct ID *find_id(const char *type, const char *name); void clear_id_newpoins(void); void IDnames_to_pupstring(const char **str, const char *title, const char *extraops, - struct ListBase *lb,struct ID* link, short *nr); + struct ListBase *lb, struct ID* link, short *nr); void IMAnames_to_pupstring(const char **str, const char *title, const char *extraops, struct ListBase *lb, struct ID *link, short *nr); diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 742e6ef0b89..14cb5d19ddf 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -146,7 +146,7 @@ void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); void mesh_delete_material_index(struct Mesh *me, short index); void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth); void BKE_mesh_convert_mfaces_to_mpolys(struct Mesh *mesh); -void mesh_calc_normals_tessface(struct MVert *mverts, int numVerts,struct MFace *mfaces, int numFaces, float (*faceNors_r)[3]); +void mesh_calc_normals_tessface(struct MVert *mverts, int numVerts, struct MFace *mfaces, int numFaces, float (*faceNors_r)[3]); /* used for unit testing; compares two meshes, checking only * differences we care about. should be usable with leaf's diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index cb161b26ee5..e7e1577c6b4 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -123,7 +123,7 @@ typedef struct bNodeTemplate { * implementing the node behavior. */ typedef struct bNodeType { - void *next,*prev; + void *next, *prev; short needs_free; /* set for allocated types that need to be freed */ int type; @@ -145,6 +145,9 @@ typedef struct bNodeType { void (*uifunc)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr); /// Additional parameters in the side panel. void (*uifuncbut)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr); + /// Draw a node socket. Default draws the input value button. + NodeSocketButtonFunction drawinputfunc; + NodeSocketButtonFunction drawoutputfunc; /// Optional custom label function for the node header. const char *(*labelfunc)(struct bNode *); /// Optional custom resize handle polling. diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 971320765e9..2e334c4abc9 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -80,6 +80,7 @@ int exist_object(struct Object *obtest); struct Object *add_only_object(int type, const char *name); struct Object *add_object(struct Scene *scene, int type); +void *add_obdata_from_type(int type); struct Object *copy_object(struct Object *ob); void make_local_object(struct Object *ob); @@ -152,6 +153,7 @@ int object_insert_ptcache(struct Object *ob); struct KeyBlock *object_insert_shape_key(struct Scene *scene, struct Object *ob, const char *name, int from_mix); int object_is_modified(struct Scene *scene, struct Object *ob); +int object_is_deform_modified(struct Scene *scene, struct Object *ob); void object_relink(struct Object *ob); diff --git a/source/blender/blenkernel/BKE_ocean.h b/source/blender/blenkernel/BKE_ocean.h index 7c0d99b35ea..1c659b61d7d 100644 --- a/source/blender/blenkernel/BKE_ocean.h +++ b/source/blender/blenkernel/BKE_ocean.h @@ -32,17 +32,16 @@ extern "C" { typedef struct OceanResult { float disp[3]; - float normal[3]; + float normal[3]; float foam; /* raw eigenvalues/vectors */ float Jminus; - float Jplus; + float Jplus; float Eminus[3]; - float Eplus[3]; + float Eplus[3]; } OceanResult; - - + typedef struct OceanCache { struct ImBuf **ibufs_disp; struct ImBuf **ibufs_foam; @@ -74,13 +73,12 @@ typedef struct OceanCache { #define OCEAN_CACHING 1 #define OCEAN_CACHED 2 - struct Ocean *BKE_add_ocean(void); void BKE_free_ocean_data(struct Ocean *oc); void BKE_free_ocean(struct Ocean *oc); -void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, float l, float A, float w, float damp, - float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed); +void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp, + float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed); void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount); /* sampling the ocean surface */ diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index acf39d83370..bd31a62abf9 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -103,6 +103,10 @@ typedef struct SculptSession { struct SculptStroke *stroke; struct StrokeCache *cache; + + /* last paint/sculpt stroke location */ + int last_stroke_valid; + float last_stroke[3]; } SculptSession; void free_sculptsession(struct Object *ob); diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h index 6714225f513..547fd9e4393 100644 --- a/source/blender/blenkernel/BKE_softbody.h +++ b/source/blender/blenkernel/BKE_softbody.h @@ -39,9 +39,9 @@ typedef struct BodyPoint { float origS[3], origE[3], origT[3], pos[3], vec[3], force[3]; float goal; float prevpos[3], prevvec[3], prevdx[3], prevdv[3]; /* used for Heun integration */ - float impdv[3],impdx[3]; + float impdv[3], impdx[3]; int nofsprings; int *springs; - float choke,choke2,frozen; + float choke, choke2, frozen; float colball; short loc_flag; //reserved by locale module specific states //char octantflag; @@ -68,7 +68,7 @@ extern void sbObjectToSoftbody(struct Object *ob); /* pass NULL to unlink again */ extern void sbSetInterruptCallBack(int (*f)(void)); -extern void SB_estimate_transform(Object *ob,float lloc[3],float lrot[3][3],float lscale[3][3]); +extern void SB_estimate_transform(Object *ob, float lloc[3], float lrot[3][3], float lscale[3][3]); #endif diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h index 0a94d89a121..115c00d9e73 100644 --- a/source/blender/blenkernel/BKE_text.h +++ b/source/blender/blenkernel/BKE_text.h @@ -96,6 +96,8 @@ void txt_unindent (struct Text *text); void txt_comment (struct Text *text); void txt_indent (struct Text *text); void txt_uncomment (struct Text *text); +void txt_move_lines (struct Text *text, const int direction); +void txt_duplicate_line (struct Text *text); int setcurr_tab_spaces (struct Text *text, int space); void txt_add_marker (struct Text *text, struct TextLine *line, int start, int end, const unsigned char color[4], int group, int flags); @@ -113,6 +115,11 @@ int text_check_digit(const char ch); int text_check_identifier(const char ch); int text_check_whitespace(const char ch); +enum { + TXT_MOVE_LINE_UP = -1, + TXT_MOVE_LINE_DOWN = 1 +}; + /* Undo opcodes */ @@ -169,6 +176,11 @@ int text_check_whitespace(const char ch); #define UNDO_COMMENT 034 #define UNDO_UNCOMMENT 035 +#define UNDO_MOVE_LINES_UP 036 +#define UNDO_MOVE_LINES_DOWN 037 + +#define UNDO_DUPLICATE 040 + /* Marker flags */ #define TMARK_TEMP 0x01 /* Remove on non-editing events, don't save */ #define TMARK_EDITALL 0x02 /* Edit all markers of the same group as one */ diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 2bb8fc691f0..817cb477aba 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -164,6 +164,10 @@ struct MovieTrackingObject *BKE_tracking_named_object(struct MovieTracking *trac void BKE_tracking_select_track(struct ListBase *tracksbase, struct MovieTrackingTrack *track, int area, int extend); void BKE_tracking_deselect_track(struct MovieTrackingTrack *track, int area); +/* Dopesheet */ +void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking); +void BKE_tracking_dopesheet_update(struct MovieTracking *tracking, int sort_method, int inverse); + #define TRACK_SELECTED(track) ((track)->flag&SELECT || (track)->pat_flag&SELECT || (track)->search_flag&SELECT) #define TRACK_AREA_SELECTED(track, area) ((area)==TRACK_AREA_POINT ? (track)->flag&SELECT : \ @@ -175,7 +179,7 @@ void BKE_tracking_deselect_track(struct MovieTrackingTrack *track, int area); (((sc)->flag & SC_SHOW_MARKER_PATTERN) && TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) || \ (((sc)->flag & SC_SHOW_MARKER_SEARCH) && TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)))) -#define MARKER_VISIBLE(sc, marker) (((marker)->flag & MARKER_DISABLED)==0 || ((sc)->flag & SC_HIDE_DISABLED)==0) +#define MARKER_VISIBLE(sc, track, marker) (((marker)->flag & MARKER_DISABLED)==0 || ((sc)->flag & SC_HIDE_DISABLED)==0 || (sc->clip->tracking.act_track == track)) #define TRACK_CLEAR_UPTO 0 #define TRACK_CLEAR_REMAINED 1 @@ -194,4 +198,9 @@ void BKE_tracking_deselect_track(struct MovieTrackingTrack *track, int area); #define TRACK_AREA_ALL (TRACK_AREA_POINT|TRACK_AREA_PAT|TRACK_AREA_SEARCH) +#define TRACK_SORT_NONE -1 +#define TRACK_SORT_NAME 0 +#define TRACK_SORT_LONGEST 1 +#define TRACK_SORT_TOTAL 2 + #endif diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index 39458cb3a13..591be9e81c4 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenkernel/depsgraph_private.h b/source/blender/blenkernel/depsgraph_private.h index f27ee2f1a41..c5e2f0900f0 100644 --- a/source/blender/blenkernel/depsgraph_private.h +++ b/source/blender/blenkernel/depsgraph_private.h @@ -117,10 +117,10 @@ DagNode * get_top_node_queue(DagNodeQueue *queue); DagForest *getMainDag(void); void setMainDag(DagForest *dag); DagForest * dag_init(void); -DagNode * dag_find_node (DagForest *forest,void * fob); -DagNode * dag_add_node (DagForest *forest,void * fob); -DagNode * dag_get_node (DagForest *forest,void * fob); -DagNode * dag_get_sub_node (DagForest *forest,void * fob); +DagNode * dag_find_node (DagForest *forest, void * fob); +DagNode * dag_add_node (DagForest *forest, void * fob); +DagNode * dag_get_node (DagForest *forest, void * fob); +DagNode * dag_get_sub_node (DagForest *forest, void * fob); void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name); void graph_bfs(void); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 0fd030be39c..f648a9e297c 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -322,7 +322,7 @@ int DM_release(DerivedMesh *dm) { if (dm->needsFree) { bvhcache_free(&dm->bvhCache); - GPU_drawobject_free( dm ); + GPU_drawobject_free(dm); CustomData_free(&dm->vertData, dm->numVertData); CustomData_free(&dm->edgeData, dm->numEdgeData); CustomData_free(&dm->faceData, dm->numTessFaceData); @@ -371,7 +371,7 @@ void DM_ensure_tessface(DerivedMesh *dm) const int numTessFaces = dm->getNumTessFaces(dm); const int numPolys = dm->getNumPolys(dm); - if ( (numTessFaces == 0) && (numPolys != 0)) { + if ((numTessFaces == 0) && (numPolys != 0)) { dm->recalcTessellation(dm); if (dm->getNumTessFaces(dm) != 0) { @@ -2413,7 +2413,7 @@ static void GetTextureCoordinate(const SMikkTSpaceContext * pContext, float fUV[ } else { const float *orco= pMesh->orco[(&pMesh->mface[face_num].v1)[vert_index]]; - map_to_sphere( &fUV[0], &fUV[1], orco[0], orco[1], orco[2]); + map_to_sphere(&fUV[0], &fUV[1], orco[0], orco[1], orco[2]); } } @@ -2536,11 +2536,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) if (mf->v4) { v4= &mvert[mf->v4]; - normal_quad_v3( fno,v4->co, v3->co, v2->co, v1->co); + normal_quad_v3(fno, v4->co, v3->co, v2->co, v1->co); } else { v4= NULL; - normal_tri_v3( fno,v3->co, v2->co, v1->co); + normal_tri_v3(fno, v3->co, v2->co, v1->co); } if (mtface) { @@ -2551,11 +2551,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) } else { uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3]; - map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); - map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); - map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); + map_to_sphere(&uv[0][0], &uv[0][1], orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); + map_to_sphere(&uv[1][0], &uv[1][1], orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); + map_to_sphere(&uv[2][0], &uv[2][1], orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); if (v4) - map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); + map_to_sphere(&uv[3][0], &uv[3][1], orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); } tangent_from_uv(uv1, uv2, uv3, v1->co, v2->co, v3->co, fno, tang); @@ -2578,11 +2578,11 @@ void DM_add_tangent_layer(DerivedMesh *dm) len= (mf->v4)? 4 : 3; if (mtface == NULL) { - map_to_sphere( &uv[0][0], &uv[0][1],orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); - map_to_sphere( &uv[1][0], &uv[1][1],orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); - map_to_sphere( &uv[2][0], &uv[2][1],orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); + map_to_sphere(&uv[0][0], &uv[0][1], orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]); + map_to_sphere(&uv[1][0], &uv[1][1], orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]); + map_to_sphere(&uv[2][0], &uv[2][1], orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]); if (len==4) - map_to_sphere( &uv[3][0], &uv[3][1],orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); + map_to_sphere(&uv[3][0], &uv[3][1], orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]); } mf_vi[0]= mf->v1; @@ -2616,7 +2616,7 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm) int nr_accumulated = 0; int f; - for ( f=0; f < totface; f++ ) { + for (f=0; f < totface; f++ ) { { float * verts[4], * tex_coords[4]; const int nr_verts = mface[f].v4!=0 ? 4 : 3; @@ -2632,7 +2632,7 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm) // discard degenerate faces is_degenerate = 0; if ( equals_v3v3(verts[0], verts[1]) || equals_v3v3(verts[0], verts[2]) || equals_v3v3(verts[1], verts[2]) || - equals_v2v2(tex_coords[0], tex_coords[1]) || equals_v2v2(tex_coords[0], tex_coords[2]) || equals_v2v2(tex_coords[1], tex_coords[2]) ) + equals_v2v2(tex_coords[0], tex_coords[1]) || equals_v2v2(tex_coords[0], tex_coords[2]) || equals_v2v2(tex_coords[1], tex_coords[2])) { is_degenerate = 1; } @@ -2640,7 +2640,7 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm) // verify last vertex as well if this is a quad if (is_degenerate == 0 && nr_verts == 4) { if (equals_v3v3(verts[3], verts[0]) || equals_v3v3(verts[3], verts[1]) || equals_v3v3(verts[3], verts[2]) || - equals_v2v2(tex_coords[3], tex_coords[0]) || equals_v2v2(tex_coords[3], tex_coords[1]) || equals_v2v2(tex_coords[3], tex_coords[2]) ) + equals_v2v2(tex_coords[3], tex_coords[0]) || equals_v2v2(tex_coords[3], tex_coords[1]) || equals_v2v2(tex_coords[3], tex_coords[2])) { is_degenerate = 1; } @@ -2705,7 +2705,7 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm) if (nr_tris_to_pile==1 || nr_tris_to_pile==2) { const int indices[] = {offs+0, offs+1, offs+2, offs+0, offs+2, (offs+3)&0x3 }; int t; - for ( t=0; t<nr_tris_to_pile; t++ ) { + for (t=0; t<nr_tris_to_pile; t++ ) { float f2x_area_uv; float * p0 = verts[indices[t*3+0]]; float * p1 = verts[indices[t*3+1]]; @@ -2786,9 +2786,9 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, a = attribs->tottface++; attribs->tface[a].array = tfdata->layers[layer].data; - attribs->tface[a].emOffset = tfdata->layers[layer].offset; - attribs->tface[a].glIndex = gattribs->layer[b].glindex; - attribs->tface[a].glTexco = gattribs->layer[b].gltexco; + attribs->tface[a].em_offset = tfdata->layers[layer].offset; + attribs->tface[a].gl_index = gattribs->layer[b].glindex; + attribs->tface[a].gl_texco = gattribs->layer[b].gltexco; } } else { @@ -2802,9 +2802,9 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, a = attribs->tottface++; attribs->tface[a].array = tfdata->layers[layer].data; - attribs->tface[a].emOffset = tfdata->layers[layer].offset; - attribs->tface[a].glIndex = gattribs->layer[b].glindex; - attribs->tface[a].glTexco = gattribs->layer[b].gltexco; + attribs->tface[a].em_offset = tfdata->layers[layer].offset; + attribs->tface[a].gl_index = gattribs->layer[b].glindex; + attribs->tface[a].gl_texco = gattribs->layer[b].gltexco; } } } @@ -2823,8 +2823,8 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, a = attribs->totmcol++; attribs->mcol[a].array = tfdata->layers[layer].data; - attribs->mcol[a].emOffset = tfdata->layers[layer].offset; - attribs->mcol[a].glIndex = gattribs->layer[b].glindex; + attribs->mcol[a].em_offset = tfdata->layers[layer].offset; + attribs->mcol[a].gl_index = gattribs->layer[b].glindex; } } else { @@ -2839,8 +2839,8 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, a = attribs->totmcol++; attribs->mcol[a].array = tfdata->layers[layer].data; - attribs->mcol[a].emOffset = tfdata->layers[layer].offset; - attribs->mcol[a].glIndex = gattribs->layer[b].glindex; + attribs->mcol[a].em_offset = tfdata->layers[layer].offset; + attribs->mcol[a].gl_index = gattribs->layer[b].glindex; } } } @@ -2852,8 +2852,8 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, attribs->tottang = 1; attribs->tang.array = fdata->layers[layer].data; - attribs->tang.emOffset = fdata->layers[layer].offset; - attribs->tang.glIndex = gattribs->layer[b].glindex; + attribs->tang.em_offset = fdata->layers[layer].offset; + attribs->tang.gl_index = gattribs->layer[b].glindex; } } else if (gattribs->layer[b].type == CD_ORCO) { @@ -2864,9 +2864,9 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, attribs->totorco = 1; attribs->orco.array = vdata->layers[layer].data; - attribs->orco.emOffset = vdata->layers[layer].offset; - attribs->orco.glIndex = gattribs->layer[b].glindex; - attribs->orco.glTexco = gattribs->layer[b].gltexco; + attribs->orco.em_offset = vdata->layers[layer].offset; + attribs->orco.gl_index = gattribs->layer[b].glindex; + attribs->orco.gl_texco = gattribs->layer[b].gltexco; } } } @@ -2936,7 +2936,7 @@ static void navmesh_drawColored(DerivedMesh *dm) glDisable(GL_LIGHTING); /* if (GPU_buffer_legacy(dm) ) */ { /* TODO - VBO draw code, not high priority - campbell */ - DEBUG_VBO( "Using legacy code. drawNavMeshColored\n" ); + DEBUG_VBO("Using legacy code. drawNavMeshColored\n"); //glShadeModel(GL_SMOOTH); glBegin(glmode = GL_QUADS); for (a = 0; a < dm->numTessFaceData; a++, mface++) { @@ -3117,7 +3117,7 @@ static void dm_debug_info_layers(DynStr *dynstr, DerivedMesh *dm, void *(*getEle CustomData_file_write_info(type, &structname, &structnum); BLI_dynstr_appendf(dynstr, " dict(name='%s', struct='%s', type=%d, ptr='%p', elem=%d, length=%d),\n", - name, structname, type, (void *)pt, size, (int)(MEM_allocN_len(pt) / size)); + name, structname, type, (void *)pt, size, (int)(MEM_allocN_len(pt) / size)); } } } diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 93401a528ab..5a2407ca56b 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -157,7 +157,7 @@ void make_local_action(bAction *act) /* .................................. */ -void free_action (bAction *act) +void free_action(bAction *act) { /* sanity check */ if (act == NULL) @@ -235,7 +235,7 @@ bActionGroup *get_active_actiongroup (bAction *act) } /* Make the given Action-Group the active one */ -void set_active_action_group (bAction *act, bActionGroup *agrp, short select) +void set_active_action_group(bAction *act, bActionGroup *agrp, short select) { bActionGroup *grp; @@ -280,7 +280,7 @@ bActionGroup *action_groups_add_new (bAction *act, const char name[]) * - assumes that channel is not linked to anything anymore * - always adds at the end of the group */ -void action_groups_add_channel (bAction *act, bActionGroup *agrp, FCurve *fcurve) +void action_groups_add_channel(bAction *act, bActionGroup *agrp, FCurve *fcurve) { /* sanity checks */ if (ELEM3(NULL, act, agrp, fcurve)) @@ -346,7 +346,7 @@ void action_groups_add_channel (bAction *act, bActionGroup *agrp, FCurve *fcurve } /* Remove the given channel from all groups */ -void action_groups_remove_channel (bAction *act, FCurve *fcu) +void action_groups_remove_channel(bAction *act, FCurve *fcu) { /* sanity checks */ if (ELEM(NULL, act, fcu)) @@ -394,7 +394,7 @@ bActionGroup *action_groups_find_named (bAction *act, const char name[]) } /* Clear all 'temp' flags on all groups */ -void action_groups_clear_tempflags (bAction *act) +void action_groups_clear_tempflags(bAction *act) { bActionGroup *agrp; @@ -491,7 +491,7 @@ const char *get_ikparam_name(bPose *pose) return NULL; } /* dst should be freed already, makes entire duplicate */ -void copy_pose (bPose **dst, bPose *src, int copycon) +void copy_pose(bPose **dst, bPose *src, int copycon) { bPose *outPose; bPoseChannel *pchan; @@ -792,7 +792,7 @@ void framechange_poses_clear_unkeyed(void) /* ************************** Bone Groups ************************** */ /* Adds a new bone-group */ -void pose_add_group (Object *ob) +void pose_add_group(Object *ob) { bPose *pose= (ob) ? ob->pose : NULL; bActionGroup *grp; @@ -809,7 +809,7 @@ void pose_add_group (Object *ob) } /* Remove the active bone-group */ -void pose_remove_group (Object *ob) +void pose_remove_group(Object *ob) { bPose *pose= (ob) ? ob->pose : NULL; bActionGroup *grp = NULL; @@ -946,7 +946,7 @@ void calc_action_range(const bAction *act, float *start, float *end, short incl_ /* Return flags indicating which transforms the given object/posechannel has * - if 'curves' is provided, a list of links to these curves are also returned */ -short action_get_item_transforms (bAction *act, Object *ob, bPoseChannel *pchan, ListBase *curves) +short action_get_item_transforms(bAction *act, Object *ob, bPoseChannel *pchan, ListBase *curves) { PointerRNA ptr; FCurve *fcu; @@ -1134,7 +1134,7 @@ void copy_pose_result(bPose *to, bPose *from) /* For the calculation of the effects of an Action at the given frame on an object * This is currently only used for the Action Constraint */ -void what_does_obaction (Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe) +void what_does_obaction(Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe) { bActionGroup *agrp= action_groups_find_named(act, groupname); diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 38c73ba72b9..afa4723bc6d 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -144,9 +144,11 @@ void animviz_free_motionpath(bMotionPath *mpath) /* ------------------- */ /* Setup motion paths for the given data - * - scene: current scene (for frame ranges, etc.) - * - ob: object to add paths for (must be provided) - * - pchan: posechannel to add paths for (optional; if not provided, object-paths are assumed) + * - Only used when explicitly calculating paths on bones which may/may not be consider already + * + * < scene: current scene (for frame ranges, etc.) + * < ob: object to add paths for (must be provided) + * < pchan: posechannel to add paths for (optional; if not provided, object-paths are assumed) */ bMotionPath *animviz_verify_motionpaths(ReportList *reports, Scene *scene, Object *ob, bPoseChannel *pchan) { @@ -180,14 +182,25 @@ bMotionPath *animviz_verify_motionpaths(ReportList *reports, Scene *scene, Objec } /* if there is already a motionpath, just return that, - * but provided it's settings are ok + * provided it's settings are ok (saves extra free+alloc) */ if (*dst != NULL) { + int expected_length = avs->path_ef - avs->path_sf; + mpath= *dst; - /* if range is not invalid, and/or length is set ok, just return */ - if ((mpath->start_frame != mpath->end_frame) && (mpath->length > 0)) - return mpath; + /* path is "valid" if length is valid, but must also be of the same length as is being requested */ + if ((mpath->start_frame != mpath->end_frame) && (mpath->length > 0)) { + /* outer check ensures that we have some curve data for this path */ + if (mpath->length == expected_length) { + /* return/use this as it is already valid length */ + return mpath; + } + else { + /* clear the existing path (as the range has changed), and reallocate below */ + animviz_free_motionpath_cache(mpath); + } + } } else { /* create a new motionpath, and assign it */ @@ -863,9 +876,9 @@ static void vertex_dupli__mapFunc(void *userData, int index, const float co[3], vec[0]= -no_s[0]; vec[1]= -no_s[1]; vec[2]= -no_s[2]; } - vec_to_quat( q2,vec, vdd->ob->trackflag, vdd->ob->upflag); + vec_to_quat(q2, vec, vdd->ob->trackflag, vdd->ob->upflag); - quat_to_mat3( mat,q2); + quat_to_mat3(mat, q2); copy_m4_m4(tmat, obmat); mul_m4_m4m3(obmat, tmat, mat); } @@ -1142,8 +1155,8 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa copy_v3_v3(obmat[3], cent); /* rotation */ - tri_to_quat( quat,v1, v2, v3); - quat_to_mat3( mat,quat); + tri_to_quat(quat, v1, v2, v3); + quat_to_mat3(mat, quat); /* scale */ if (par->transflag & OB_DUPLIFACES_SCALE) { @@ -1329,7 +1342,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p else a = totpart; - for (pa=psys->particles,counter=0; a<totpart+totchild; a++,pa++,counter++) { + for (pa=psys->particles, counter=0; a<totpart+totchild; a++, pa++, counter++) { if (a<totpart) { /* handle parent particle */ if (pa->flag & no_draw_flag) @@ -1505,7 +1518,7 @@ static Object *find_family_object(Object **obar, char *family, char ch) ob= G.main->object.first; while (ob) { - if ( ob->id.name[flen+2]==ch ) { + if (ob->id.name[flen + 2] == ch) { if ( strncmp(ob->id.name+2, family, flen)==0 ) break; } ob= ob->id.next; diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 06913910829..73f1ce1526a 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -71,7 +71,7 @@ /* Getter/Setter -------------------------------------------- */ /* Check if ID can have AnimData */ -short id_type_can_have_animdata (ID *id) +short id_type_can_have_animdata(ID *id) { /* sanity check */ if (id == NULL) @@ -153,7 +153,7 @@ AnimData *BKE_id_add_animdata (ID *id) /* Action Setter --------------------------------------- */ /* Called when user tries to change the active action of an AnimData block (via RNA, Outliner, etc.) */ -short BKE_animdata_set_action (ReportList *reports, ID *id, bAction *act) +short BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act) { AnimData *adt = BKE_animdata_from_id(id); short ok = 0; @@ -206,7 +206,7 @@ short BKE_animdata_set_action (ReportList *reports, ID *id, bAction *act) /* Freeing -------------------------------------------- */ /* Free AnimData used by the nominated ID-block, and clear ID-block's AnimData pointer */ -void BKE_free_animdata (ID *id) +void BKE_free_animdata(ID *id) { /* Only some ID-blocks have this info for now, so we cast the * types that do to be of type IdAdtTemplate @@ -275,7 +275,7 @@ AnimData *BKE_copy_animdata (AnimData *adt, const short do_action) return dadt; } -int BKE_copy_animdata_id (ID *id_to, ID *id_from, const short do_action) +int BKE_copy_animdata_id(ID *id_to, ID *id_from, const short do_action) { AnimData *adt; @@ -345,7 +345,7 @@ void BKE_animdata_make_local(AnimData *adt) /* When duplicating data (i.e. objects), drivers referring to the original data will * get updated to point to the duplicated data (if drivers belong to the new data) */ -void BKE_relink_animdata (AnimData *adt) +void BKE_relink_animdata(AnimData *adt) { /* sanity check */ if (adt == NULL) @@ -394,7 +394,7 @@ static short animpath_matches_basepath (const char path[], const char basepath[] * - This is used when data moves from one datablock to another, causing the * F-Curves to need to be moved over too */ -void action_move_fcurves_by_basepath (bAction *srcAct, bAction *dstAct, const char basepath[]) +void action_move_fcurves_by_basepath(bAction *srcAct, bAction *dstAct, const char basepath[]) { FCurve *fcu, *fcn=NULL; @@ -474,7 +474,7 @@ void action_move_fcurves_by_basepath (bAction *srcAct, bAction *dstAct, const ch * animation data is based off "basepath", creating new AnimData and * associated data as necessary */ -void BKE_animdata_separate_by_basepath (ID *srcID, ID *dstID, ListBase *basepaths) +void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths) { AnimData *srcAdt=NULL, *dstAdt=NULL; LinkData *ld; @@ -736,7 +736,7 @@ void BKE_animdata_fix_paths_rename(ID *owner_id, AnimData *adt, ID *ref_id, cons /* Whole Database Ops -------------------------------------------- */ /* apply the given callback function on all data in main database */ -void BKE_animdata_main_cb (Main *mainptr, ID_AnimData_Edit_Callback func, void *user_data) +void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *user_data) { ID *id; @@ -1035,7 +1035,7 @@ KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[], } /* Free the given Keying Set path */ -void BKE_keyingset_free_path (KeyingSet *ks, KS_Path *ksp) +void BKE_keyingset_free_path(KeyingSet *ks, KS_Path *ksp) { /* sanity check */ if (ELEM(NULL, ks, ksp)) @@ -1050,7 +1050,7 @@ void BKE_keyingset_free_path (KeyingSet *ks, KS_Path *ksp) } /* Copy all KeyingSets in the given list */ -void BKE_keyingsets_copy (ListBase *newlist, ListBase *list) +void BKE_keyingsets_copy(ListBase *newlist, ListBase *list) { KeyingSet *ksn; KS_Path *kspn; @@ -1068,7 +1068,7 @@ void BKE_keyingsets_copy (ListBase *newlist, ListBase *list) /* Freeing Tools --------------------------- */ /* Free data for KeyingSet but not set itself */ -void BKE_keyingset_free (KeyingSet *ks) +void BKE_keyingset_free(KeyingSet *ks) { KS_Path *ksp, *kspn; @@ -1084,7 +1084,7 @@ void BKE_keyingset_free (KeyingSet *ks) } /* Free all the KeyingSets in the given list */ -void BKE_keyingsets_free (ListBase *list) +void BKE_keyingsets_free(ListBase *list) { KeyingSet *ks, *ksn; @@ -1341,7 +1341,7 @@ static void action_idcode_patch_check (ID *id, bAction *act) /* ----------------------------------------- */ /* Evaluate Action Group */ -void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup *agrp, AnimMapper *remap, float ctime) +void animsys_evaluate_action_group(PointerRNA *ptr, bAction *act, bActionGroup *agrp, AnimMapper *remap, float ctime) { FCurve *fcu; @@ -1366,7 +1366,7 @@ void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup } /* Evaluate Action (F-Curve Bag) */ -void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime) +void animsys_evaluate_action(PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime) { /* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */ if (act == NULL) return; @@ -1923,7 +1923,7 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBas } /* evaluates the given evaluation strip */ -void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) +void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { NlaStrip *strip= nes->strip; @@ -1956,7 +1956,7 @@ void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, ListBase *modifiers } /* write the accumulated settings to */ -void nladata_flush_channels (ListBase *channels) +void nladata_flush_channels(ListBase *channels) { NlaEvalChannel *nec; @@ -2042,8 +2042,10 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData /* add 'active' Action (may be tweaking track) as last strip to evaluate in NLA stack * - only do this if we're not exclusively evaluating the 'solo' NLA-track + * - however, if the 'solo' track houses the current 'tweaking' strip, + * then we should allow this to play, otherwise nothing happens */ - if ((adt->action) && !(adt->flag & ADT_NLA_SOLO_TRACK)) { + if ((adt->action) && ((adt->flag & ADT_NLA_SOLO_TRACK)==0 || (adt->flag & ADT_NLA_EDIT_ON))) { /* if there are strips, evaluate action as per NLA rules */ if ((has_strips) || (adt->actstrip)) { /* make dummy NLA strip, and add that to the stack */ @@ -2183,7 +2185,7 @@ static void animsys_evaluate_overrides (PointerRNA *ptr, AnimData *adt) * and that the flags for which parts of the anim-data settings need to be recalculated * have been set already by the depsgraph. Now, we use the recalc */ -void BKE_animsys_evaluate_animdata (Scene *scene, ID *id, AnimData *adt, float ctime, short recalc) +void BKE_animsys_evaluate_animdata(Scene *scene, ID *id, AnimData *adt, float ctime, short recalc) { PointerRNA id_ptr; @@ -2253,7 +2255,7 @@ void BKE_animsys_evaluate_animdata (Scene *scene, ID *id, AnimData *adt, float c * 'local' (i.e. belonging in the nearest ID-block that setting is related to, not a * standard 'root') block are overridden by a larger 'user' */ -void BKE_animsys_evaluate_all_animation (Main *main, Scene *scene, float ctime) +void BKE_animsys_evaluate_all_animation(Main *main, Scene *scene, float ctime) { ID *id; diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index d1d6833e903..b0d0ace2a7e 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -471,7 +471,7 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) next = pchan->child; /* find the handle points, since this is inside bone space, the - * first point = (0,0,0) + * first point = (0, 0, 0) * last point = (0, length, 0) */ if (rest) { invert_m4_m4(imat, pchan->bone->arm_mat); @@ -1028,13 +1028,13 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, float if (armature_weight != 1.0f) { copy_v3_v3(dco, co); - mul_v3m3_dq( dco, (defMats) ? summat : NULL,dq); + mul_v3m3_dq(dco, (defMats) ? summat : NULL, dq); sub_v3_v3(dco, co); mul_v3_fl(dco, armature_weight); add_v3_v3(co, dco); } else - mul_v3m3_dq( co, (defMats) ? summat : NULL,dq); + mul_v3m3_dq(co, (defMats) ? summat : NULL, dq); smat = summat; } @@ -1208,9 +1208,8 @@ void pchan_to_pose_mat(bPoseChannel *pchan, float rotscale_mat[][4], float loc_m else mult_m4_m4m4(rotscale_mat, parchan->pose_mat, offs_bone); -# if 1 /* Compose the loc matrix for this bone. */ - /* NOTE: That version deos not modify bone's loc when HINGE/NO_SCALE options are set. */ + /* NOTE: That version does not modify bone's loc when HINGE/NO_SCALE options are set. */ /* In this case, use the object's space *orientation*. */ if (bone->flag & BONE_NO_LOCAL_LOCATION) { @@ -1236,58 +1235,6 @@ void pchan_to_pose_mat(bPoseChannel *pchan, float rotscale_mat[][4], float loc_m /* Else (i.e. default, usual case), just use the same matrix for rotation/scaling, and location. */ else copy_m4_m4(loc_mat, rotscale_mat); -# endif -# if 0 - /* Compose the loc matrix for this bone. */ - /* NOTE: That version modifies bone's loc when HINGE/NO_SCALE options are set. */ - - /* In these cases we need to compute location separately */ - if (bone->flag & (BONE_HINGE|BONE_NO_SCALE|BONE_NO_LOCAL_LOCATION)) { - float bone_loc[4][4], bone_rotscale[3][3], tmat4[4][4], tmat3[3][3]; - unit_m4(bone_loc); - unit_m4(loc_mat); - unit_m4(tmat4); - - mul_v3_m4v3(bone_loc[3], parchan->pose_mat, offs_bone[3]); - - /* "No local location" is not transformed by bone matrix. */ - /* This only affects orientations (rotations), as scale is always 1.0 here. */ - if (bone->flag & BONE_NO_LOCAL_LOCATION) - unit_m3(bone_rotscale); - else - /* We could also use bone->bone_mat directly, here... */ - copy_m3_m4(bone_rotscale, offs_bone); - - if (bone->flag & BONE_HINGE) { - copy_m3_m4(tmat3, parbone->arm_mat); - /* for hinge-only, we use armature *rotation*, but pose mat *scale*! */ - if (!(bone->flag & BONE_NO_SCALE)) { - float size[3], tsmat[3][3]; - mat4_to_size(size, parchan->pose_mat); - size_to_mat3(tsmat, size); - mul_m3_m3m3(tmat3, tsmat, tmat3); - } - mul_m3_m3m3(bone_rotscale, tmat3, bone_rotscale); - } - else if (bone->flag & BONE_NO_SCALE) { - /* For no-scale only, normalized parent pose mat is enough! */ - copy_m3_m4(tmat3, parchan->pose_mat); - normalize_m3(tmat3); - mul_m3_m3m3(bone_rotscale, tmat3, bone_rotscale); - } - /* NO_LOCAL_LOCATION only. */ - else { - copy_m3_m4(tmat3, parchan->pose_mat); - mul_m3_m3m3(bone_rotscale, tmat3, bone_rotscale); - } - - copy_m4_m3(tmat4, bone_rotscale); - mult_m4_m4m4(loc_mat, bone_loc, tmat4); - } - /* Else, just use the same matrix for rotation/scaling, and location. */ - else - copy_m4_m4(loc_mat, rotscale_mat); -# endif } /* Root bones. */ else { @@ -1413,18 +1360,18 @@ void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float /* Called from RNA when rotation mode changes * - the result should be that the rotations given in the provided pointers have had conversions * applied (as appropriate), such that the rotation of the element hasn't 'visually' changed */ -void BKE_rotMode_change_values (float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode) +void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode) { /* check if any change - if so, need to convert data */ if (newMode > 0) { /* to euler */ if (oldMode == ROT_MODE_AXISANGLE) { /* axis-angle to euler */ - axis_angle_to_eulO( eul, newMode,axis, *angle); + axis_angle_to_eulO(eul, newMode, axis, *angle); } else if (oldMode == ROT_MODE_QUAT) { /* quat to euler */ normalize_qt(quat); - quat_to_eulO(eul, newMode,quat); + quat_to_eulO(eul, newMode, quat); } /* else { no conversion needed } */ } @@ -1517,7 +1464,7 @@ void vec_roll_to_mat3(const float vec[3], const float roll, float mat[][3]) * was 0.000001, causes bug [#30438] (which is same as [#27675, imho). * Reseting it to org value seems to cause no more [#23954]... */ - if (dot_v3v3(axis,axis) > 1.0e-13f) { + if (dot_v3v3(axis, axis) > 1.0e-13f) { /* if nor is *not* a multiple of target ... */ normalize_v3(axis); @@ -1531,7 +1478,7 @@ void vec_roll_to_mat3(const float vec[3], const float roll, float mat[][3]) float updown; /* point same direction, or opposite? */ - updown = (dot_v3v3(target,nor) > 0) ? 1.0f : -1.0f; + updown = (dot_v3v3(target, nor) > 0) ? 1.0f : -1.0f; /* I think this should work... */ bMatrix[0][0] = updown; bMatrix[0][1] = 0.0; bMatrix[0][2] = 0.0; @@ -2362,8 +2309,8 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha /* make a copy of starting conditions */ copy_v3_v3(loc, pchan->pose_mat[3]); - mat4_to_eul( eul,pchan->pose_mat); - mat4_to_size( size,pchan->pose_mat); + mat4_to_eul(eul, pchan->pose_mat); + mat4_to_size(size, pchan->pose_mat); copy_v3_v3(eulo, eul); copy_v3_v3(sizeo, size); @@ -2438,16 +2385,6 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti /* Construct the posemat based on PoseChannels, that we do before applying constraints. */ /* pose_mat(b) = pose_mat(b-1) * yoffs(b-1) * d_root(b) * bone_mat(b) * chan_mat(b) */ armature_mat_bone_to_pose(pchan, pchan->chan_mat, pchan->pose_mat); -#if 0 /* XXX Old code, will remove this later. */ - { - float rotscale_mat[4][4], loc_mat[4][4]; - pchan_to_pose_mat(pchan, rotscale_mat, loc_mat); - /* Rotation and scale. */ - mult_m4_m4m4(pchan->pose_mat, rotscale_mat, pchan->chan_mat); - /* Location. */ - mul_v3_m4v3(pchan->pose_mat[3], loc_mat, pchan->chan_mat[3]); - } -#endif /* Only rootbones get the cyclic offset (unless user doesn't want that). */ /* XXX That could be a problem for snapping and other "reverse transform" features... */ @@ -2498,7 +2435,7 @@ void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float cti /* This only reads anim data from channels, and writes to channels */ /* This is the only function adding poses */ -void where_is_pose (Scene *scene, Object *ob) +void where_is_pose(Scene *scene, Object *ob) { bArmature *arm; Bone *bone; diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 9c9b207970c..b0bfd2ee98d 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -110,7 +110,7 @@ void free_blender(void) IMB_exit(); - BLI_cb_finalize(); + BLI_callback_global_finalize(); seq_stripelem_cache_destruct(); IMB_moviecache_destruct(); @@ -129,9 +129,9 @@ void initglobals(void) strcpy(G.ima, "//"); if (BLENDER_SUBVERSION) - BLI_snprintf(versionstr, sizeof(versionstr), "blender.org %d.%d", BLENDER_VERSION, BLENDER_SUBVERSION); + BLI_snprintf(versionstr, sizeof(versionstr), "v%d.%02d.%d", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION); else - BLI_snprintf(versionstr, sizeof(versionstr), "blender.org %d", BLENDER_VERSION); + BLI_snprintf(versionstr, sizeof(versionstr), "v%d.%02d", BLENDER_VERSION/100, BLENDER_VERSION%100); #ifdef _WIN32 // FULLSCREEN G.windowstate = G_WINDOWSTATE_USERDEF; @@ -173,7 +173,7 @@ static void clean_paths(Main *main) { Scene *scene; - bpath_traverse_main(main, clean_paths_visit_cb, BPATH_TRAVERSE_SKIP_MULTIFILE, NULL); + BLI_bpath_traverse_main(main, clean_paths_visit_cb, BLI_BPATH_TRAVERSE_SKIP_MULTIFILE, NULL); for (scene= main->scene.first; scene; scene= scene->id.next) { BLI_clean(scene->r.pic); @@ -431,7 +431,7 @@ int BKE_read_file_from_memfile(bContext *C, MemFile *memfile, ReportList *report /* ***************** testing for break ************* */ -static void (*blender_test_break_cb)(void)= NULL; +static void (*blender_test_break_cb)(void) = NULL; void set_blender_test_break_cb(void (*func)(void) ) { @@ -722,7 +722,7 @@ void BKE_undo_save_quit(void) BLI_make_file_string("/", str, BLI_temporary_dir(), "quit.blend"); - file = BLI_open(str,O_BINARY+O_WRONLY+O_CREAT+O_TRUNC, 0666); + file = BLI_open(str, O_BINARY + O_WRONLY + O_CREAT + O_TRUNC, 0666); if (file == -1) { //XXX error("Unable to save %s, check you have permissions", str); return; diff --git a/source/blender/blenkernel/intern/bmfont.c b/source/blender/blenkernel/intern/bmfont.c index 04ac6cbfb4c..e1f4e45e9c3 100644 --- a/source/blender/blenkernel/intern/bmfont.c +++ b/source/blender/blenkernel/intern/bmfont.c @@ -65,8 +65,8 @@ void printfGlyph(bmGlyph * glyph) printf(" advan: %3d reser: %3d\n", glyph->advance, glyph->reserved); } -#define MAX2(x,y) ( (x)>(y) ? (x) : (y) ) -#define MAX3(x,y,z) MAX2( MAX2((x),(y)) , (z) ) +#define MAX2(x,y) ((x) > (y) ? (x) : (y)) +#define MAX3(x,y,z) MAX2(MAX2((x), (y)), (z)) void calcAlpha(ImBuf * ibuf) { diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index fbcabccd2b9..014b3f5e40b 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -230,8 +230,8 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * /* avoid head-on collision */ if (dot_v3v3(col.pce.nor, pa->prev_state.ave) < -0.99f) { - /* don't know why, but uneven range [0.0,1.0] */ - /* works much better than even [-1.0,1.0] */ + /* don't know why, but uneven range [0.0, 1.0] */ + /* works much better than even [-1.0, 1.0] */ bbd->wanted_co[0] = BLI_frand(); bbd->wanted_co[1] = BLI_frand(); bbd->wanted_co[2] = BLI_frand(); @@ -262,7 +262,7 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * sub_v3_v3v3(vec, vel1, vel2); - inp = dot_v3v3(vec,vec); + inp = dot_v3v3(vec, vec); /* velocities not parallel */ if (inp != 0.0f) { @@ -308,7 +308,7 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * sub_v3_v3v3(vec, vel1, vel2); - inp = dot_v3v3(vec,vec); + inp = dot_v3v3(vec, vec); /* velocities not parallel */ if (inp != 0.0f) { @@ -583,7 +583,7 @@ static int rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *va copy_v3_v3(bbd->wanted_co, pa->prev_state.ave); /* may happen at birth */ - if (dot_v2v2(bbd->wanted_co,bbd->wanted_co)==0.0f) { + if (dot_v2v2(bbd->wanted_co, bbd->wanted_co)==0.0f) { bbd->wanted_co[0] = 2.0f*(0.5f - BLI_frand()); bbd->wanted_co[1] = 2.0f*(0.5f - BLI_frand()); bbd->wanted_co[2] = 2.0f*(0.5f - BLI_frand()); @@ -610,7 +610,7 @@ static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti ParticleData *enemy_pa = NULL; BoidParticle *bpa; /* friends & enemies */ - float closest_enemy[3] = {0.0f,0.0f,0.0f}; + float closest_enemy[3] = {0.0f, 0.0f, 0.0f}; float closest_dist = fbr->distance + 1.0f; float f_strength = 0.0f, e_strength = 0.0f; float health = 0.0f; @@ -748,7 +748,7 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float grou SurfaceModifierData *surmd = NULL; float x[3], v[3]; - surmd = (SurfaceModifierData *)modifiers_findByType ( bpa->ground, eModifierType_Surface ); + surmd = (SurfaceModifierData *)modifiers_findByType(bpa->ground, eModifierType_Surface ); /* take surface velocity into account */ closest_point_on_surface(surmd, pa->state.co, x, NULL, v); @@ -1096,7 +1096,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) set_boid_values(&val, boids, pa); /* make sure there's something in new velocity, location & rotation */ - copy_particle_key(&pa->state,&pa->prev_state,0); + copy_particle_key(&pa->state, &pa->prev_state, 0); if (bbd->part->flag & PART_SIZEMASS) pa_mass*=pa->size; @@ -1170,13 +1170,13 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) angle = MIN2(angle, val.max_ave); cross_v3_v3v3(nor, old_dir, wanted_dir); - axis_angle_to_quat( q,nor, angle); + axis_angle_to_quat(q, nor, angle); copy_v3_v3(new_dir, old_dir); mul_qt_v3(q, new_dir); normalize_v3(new_dir); /* save direction in case resulting velocity too small */ - axis_angle_to_quat( q,nor, angle*dtime); + axis_angle_to_quat(q, nor, angle*dtime); copy_v3_v3(pa->state.ave, old_dir); mul_qt_v3(q, pa->state.ave); normalize_v3(pa->state.ave); @@ -1196,7 +1196,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) /* maintain minimum flying velocity if not landing */ if (level >= landing_level) { - float len2 = dot_v2v2(new_vel,new_vel); + float len2 = dot_v2v2(new_vel, new_vel); float root; len2 = MAX2(len2, val.min_speed*val.min_speed); @@ -1427,7 +1427,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) cross_v3_v3v3(mat[1], mat[2], mat[0]); /* apply rotation */ - mat3_to_quat_is_ok( q,mat); + mat3_to_quat_is_ok(q, mat); copy_qt_qt(pa->state.rot, q); } diff --git a/source/blender/blenkernel/intern/booleanops_mesh.c b/source/blender/blenkernel/intern/booleanops_mesh.c index 31c90d54d14..7c225eb0fad 100644 --- a/source/blender/blenkernel/intern/booleanops_mesh.c +++ b/source/blender/blenkernel/intern/booleanops_mesh.c @@ -1,7 +1,5 @@ #if 0 - /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 3df6de2fd24..51258b13f68 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -67,7 +67,7 @@ #include "RE_render_ext.h" /* externtex */ #include "RE_shader_ext.h" -static void brush_set_defaults(Brush *brush) +static void brush_defaults(Brush *brush) { brush->blend = 0; brush->flag = 0; @@ -75,6 +75,7 @@ static void brush_set_defaults(Brush *brush) brush->ob_mode = OB_MODE_ALL_PAINT; /* BRUSH SCULPT TOOL SETTINGS */ + brush->weight= 1.0f; /* weight of brush 0 - 1.0 */ brush->size= 35; /* radius of the brush in pixels */ brush->alpha= 0.5f; /* brush strength/intensity probably variable should be renamed? */ brush->autosmooth_factor= 0.0f; @@ -121,7 +122,7 @@ static void brush_set_defaults(Brush *brush) /* Datablock add/copy/free/make_local */ -Brush *add_brush(const char *name) +Brush *BKE_brush_add(const char *name) { Brush *brush; @@ -130,17 +131,17 @@ Brush *add_brush(const char *name) /* enable fake user by default */ brush->id.flag |= LIB_FAKEUSER; - brush_set_defaults(brush); + brush_defaults(brush); brush->sculpt_tool = SCULPT_TOOL_DRAW; /* sculpting defaults to the draw tool for new brushes */ /* the default alpha falloff curve */ - brush_curve_preset(brush, CURVE_PRESET_SMOOTH); + BKE_brush_curve_preset(brush, CURVE_PRESET_SMOOTH); return brush; } -Brush *copy_brush(Brush *brush) +Brush *BKE_brush_copy(Brush *brush) { Brush *brushn; @@ -166,7 +167,7 @@ Brush *copy_brush(Brush *brush) } /* not brush itself */ -void free_brush(Brush *brush) +void BKE_brush_free(Brush *brush) { if (brush->mtex.tex) brush->mtex.tex->id.us--; @@ -185,7 +186,7 @@ static void extern_local_brush(Brush *brush) id_lib_extern((ID *)brush->clone.image); } -void make_local_brush(Brush *brush) +void BKE_brush_make_local(Brush *brush) { /* - only lib users: do nothing @@ -224,7 +225,7 @@ void make_local_brush(Brush *brush) } } else if (is_local && is_lib) { - Brush *brush_new= copy_brush(brush); + Brush *brush_new= BKE_brush_copy(brush); brush_new->id.us= 1; /* only keep fake user */ brush_new->id.flag |= LIB_FAKEUSER; @@ -241,11 +242,11 @@ void make_local_brush(Brush *brush) } } -void brush_debug_print_state(Brush *br) +void BKE_brush_debug_print_state(Brush *br) { /* create a fake brush and set it to the defaults */ Brush def= {{NULL}}; - brush_set_defaults(&def); + brush_defaults(&def); #define BR_TEST(field, t) \ if (br->field != def.field) \ @@ -328,14 +329,14 @@ void brush_debug_print_state(Brush *br) #undef BR_TEST_FLAG } -void brush_reset_sculpt(Brush *br) +void BKE_brush_sculpt_reset(Brush *br) { /* enable this to see any non-default * settings used by a brush: */ - // brush_debug_print_state(br); + // BKE_brush_debug_print_state(br); - brush_set_defaults(br); - brush_curve_preset(br, CURVE_PRESET_SMOOTH); + brush_defaults(br); + BKE_brush_curve_preset(br, CURVE_PRESET_SMOOTH); switch (br->sculpt_tool) { case SCULPT_TOOL_CLAY: @@ -408,7 +409,7 @@ void brush_reset_sculpt(Brush *br) } /* Library Operations */ -void brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset) +void BKE_brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset) { CurveMap *cm = NULL; @@ -423,7 +424,7 @@ void brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset) curvemapping_changed(b->curve, 0); } -int brush_texture_set_nr(Brush *brush, int nr) +int BKE_brush_texture_set_nr(Brush *brush, int nr) { ID *idtest, *id=NULL; @@ -436,7 +437,7 @@ int brush_texture_set_nr(Brush *brush, int nr) idtest->us--; } if (idtest!=id) { - brush_texture_delete(brush); + BKE_brush_texture_delete(brush); brush->mtex.tex= (Tex*)idtest; id_us_plus(idtest); @@ -447,7 +448,7 @@ int brush_texture_set_nr(Brush *brush, int nr) return 0; } -int brush_texture_delete(Brush *brush) +int BKE_brush_texture_delete(Brush *brush) { if (brush->mtex.tex) brush->mtex.tex->id.us--; @@ -455,13 +456,13 @@ int brush_texture_delete(Brush *brush) return 1; } -int brush_clone_image_set_nr(Brush *brush, int nr) +int BKE_brush_clone_image_set_nr(Brush *brush, int nr) { if (brush && nr > 0) { Image *ima= (Image*)BLI_findlink(&G.main->image, nr-1); if (ima) { - brush_clone_image_delete(brush); + BKE_brush_clone_image_delete(brush); brush->clone.image= ima; id_us_plus(&ima->id); brush->clone.offset[0]= brush->clone.offset[1]= 0.0f; @@ -473,7 +474,7 @@ int brush_clone_image_set_nr(Brush *brush, int nr) return 0; } -int brush_clone_image_delete(Brush *brush) +int BKE_brush_clone_image_delete(Brush *brush) { if (brush && brush->clone.image) { brush->clone.image->id.us--; @@ -485,14 +486,14 @@ int brush_clone_image_delete(Brush *brush) } /* Brush Sampling */ -void brush_sample_tex(const Scene *scene, Brush *brush, const float xy[2], float rgba[4], const int thread) +void BKE_brush_sample_tex(const Scene *scene, Brush *brush, const float xy[2], float rgba[4], const int thread) { MTex *mtex= &brush->mtex; if (mtex && mtex->tex) { float co[3], tin, tr, tg, tb, ta; int hasrgb; - const int radius= brush_size(scene, brush); + const int radius= BKE_brush_size_get(scene, brush); co[0]= xy[0]/radius; co[1]= xy[1]/radius; @@ -519,14 +520,14 @@ void brush_sample_tex(const Scene *scene, Brush *brush, const float xy[2], float } /* TODO, use define for 'texfall' arg */ -void brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, int bufsize, ImBuf **outbuf, int use_color_correction) +void BKE_brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, int bufsize, ImBuf **outbuf, int use_color_correction) { ImBuf *ibuf; float xy[2], rgba[4], *dstf; int x, y, rowbytes, xoff, yoff, imbflag; - const int radius= brush_size(scene, brush); + const int radius= BKE_brush_size_get(scene, brush); unsigned char *dst, crgb[3]; - const float alpha= brush_alpha(scene, brush); + const float alpha= BKE_brush_alpha_get(scene, brush); float brush_rgb[3]; imbflag= (flt)? IB_rectfloat: IB_rect; @@ -554,15 +555,15 @@ void brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, if (texfall == 0) { copy_v3_v3(dstf, brush_rgb); - dstf[3]= alpha*brush_curve_strength_clamp(brush, len_v2(xy), radius); + dstf[3]= alpha*BKE_brush_curve_strength_clamp(brush, len_v2(xy), radius); } else if (texfall == 1) { - brush_sample_tex(scene, brush, xy, dstf, 0); + BKE_brush_sample_tex(scene, brush, xy, dstf, 0); } else { - brush_sample_tex(scene, brush, xy, rgba, 0); + BKE_brush_sample_tex(scene, brush, xy, rgba, 0); mul_v3_v3v3(dstf, rgba, brush_rgb); - dstf[3] = rgba[3]*alpha*brush_curve_strength_clamp(brush, len_v2(xy), radius); + dstf[3] = rgba[3]*alpha*BKE_brush_curve_strength_clamp(brush, len_v2(xy), radius); } } } @@ -579,7 +580,7 @@ void brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, xy[1] = y + yoff; if (texfall == 0) { - alpha_f = alpha * brush_curve_strength(brush, len_v2(xy), radius); + alpha_f = alpha * BKE_brush_curve_strength(brush, len_v2(xy), radius); dst[0] = crgb[0]; dst[1] = crgb[1]; @@ -587,21 +588,21 @@ void brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, dst[3] = FTOCHAR(alpha_f); } else if (texfall == 1) { - brush_sample_tex(scene, brush, xy, rgba, 0); + BKE_brush_sample_tex(scene, brush, xy, rgba, 0); rgba_float_to_uchar(dst, rgba); } else if (texfall == 2) { - brush_sample_tex(scene, brush, xy, rgba, 0); + BKE_brush_sample_tex(scene, brush, xy, rgba, 0); mul_v3_v3(rgba, brush->rgb); - alpha_f = rgba[3] * alpha * brush_curve_strength_clamp(brush, len_v2(xy), radius); + alpha_f = rgba[3] * alpha * BKE_brush_curve_strength_clamp(brush, len_v2(xy), radius); rgb_float_to_uchar(dst, rgba); dst[3] = FTOCHAR(alpha_f); } else { - brush_sample_tex(scene, brush, xy, rgba, 0); - alpha_f = rgba[3] * alpha * brush_curve_strength_clamp(brush, len_v2(xy), radius); + BKE_brush_sample_tex(scene, brush, xy, rgba, 0); + alpha_f = rgba[3] * alpha * BKE_brush_curve_strength_clamp(brush, len_v2(xy), radius); dst[0] = crgb[0]; dst[1] = crgb[1]; @@ -630,7 +631,7 @@ void brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texfall, // In anycase, a better solution is needed to prevent // inconsistency. -void brush_set_size(Scene *scene, Brush *brush, int size) +void BKE_brush_size_set(Scene *scene, Brush *brush, int size) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; @@ -640,14 +641,14 @@ void brush_set_size(Scene *scene, Brush *brush, int size) brush->size= size; } -int brush_size(const Scene *scene, Brush *brush) +int BKE_brush_size_get(const Scene *scene, Brush *brush) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; return (ups->flag & UNIFIED_PAINT_SIZE) ? ups->size : brush->size; } -int brush_use_locked_size(const Scene *scene, Brush *brush) +int BKE_brush_use_locked_size(const Scene *scene, Brush *brush) { const short us_flag = scene->toolsettings->unified_paint_settings.flag; @@ -656,7 +657,7 @@ int brush_use_locked_size(const Scene *scene, Brush *brush) (brush->flag & BRUSH_LOCK_SIZE); } -int brush_use_size_pressure(const Scene *scene, Brush *brush) +int BKE_brush_use_size_pressure(const Scene *scene, Brush *brush) { const short us_flag = scene->toolsettings->unified_paint_settings.flag; @@ -665,7 +666,7 @@ int brush_use_size_pressure(const Scene *scene, Brush *brush) (brush->flag & BRUSH_SIZE_PRESSURE); } -int brush_use_alpha_pressure(const Scene *scene, Brush *brush) +int BKE_brush_use_alpha_pressure(const Scene *scene, Brush *brush) { const short us_flag = scene->toolsettings->unified_paint_settings.flag; @@ -674,7 +675,7 @@ int brush_use_alpha_pressure(const Scene *scene, Brush *brush) (brush->flag & BRUSH_ALPHA_PRESSURE); } -void brush_set_unprojected_radius(Scene *scene, Brush *brush, float unprojected_radius) +void BKE_brush_unprojected_radius_set(Scene *scene, Brush *brush, float unprojected_radius) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; @@ -684,7 +685,7 @@ void brush_set_unprojected_radius(Scene *scene, Brush *brush, float unprojected_ brush->unprojected_radius= unprojected_radius; } -float brush_unprojected_radius(const Scene *scene, Brush *brush) +float BKE_brush_unprojected_radius_get(const Scene *scene, Brush *brush) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; @@ -693,7 +694,7 @@ float brush_unprojected_radius(const Scene *scene, Brush *brush) brush->unprojected_radius; } -static void brush_set_alpha(Scene *scene, Brush *brush, float alpha) +static void brush_alpha_set(Scene *scene, Brush *brush, float alpha) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; @@ -703,17 +704,34 @@ static void brush_set_alpha(Scene *scene, Brush *brush, float alpha) brush->alpha= alpha; } -float brush_alpha(const Scene *scene, Brush *brush) +float BKE_brush_alpha_get(const Scene *scene, Brush *brush) { UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; return (ups->flag & UNIFIED_PAINT_ALPHA) ? ups->alpha : brush->alpha; } +float BKE_brush_weight_get(const Scene *scene, Brush *brush) +{ + UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; + + return (ups->flag & UNIFIED_PAINT_WEIGHT) ? ups->weight : brush->weight; +} + +void BKE_brush_weight_set(const Scene *scene, Brush *brush, float value) +{ + UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings; + + if(ups->flag & UNIFIED_PAINT_WEIGHT) + ups->weight = value; + else + brush->weight = value; +} + /* scale unprojected radius to reflect a change in the brush's 2D size */ -void brush_scale_unprojected_radius(float *unprojected_radius, - int new_brush_size, - int old_brush_size) +void BKE_brush_scale_unprojected_radius(float *unprojected_radius, + int new_brush_size, + int old_brush_size) { float scale = new_brush_size; /* avoid division by zero */ @@ -723,15 +741,15 @@ void brush_scale_unprojected_radius(float *unprojected_radius, } /* scale brush size to reflect a change in the brush's unprojected radius */ -void brush_scale_size(int *brush_size, - float new_unprojected_radius, - float old_unprojected_radius) +void BKE_brush_scale_size(int *BKE_brush_size_get, + float new_unprojected_radius, + float old_unprojected_radius) { float scale = new_unprojected_radius; /* avoid division by zero */ if (old_unprojected_radius != 0) scale /= new_unprojected_radius; - (*brush_size)= (int)((float)(*brush_size) * scale); + (*BKE_brush_size_get)= (int)((float)(*BKE_brush_size_get) * scale); } /* Brush Painting */ @@ -739,7 +757,7 @@ void brush_scale_size(int *brush_size, typedef struct BrushPainterCache { short enabled; - int size; /* size override, if 0 uses 2*brush_size(brush) */ + int size; /* size override, if 0 uses 2*BKE_brush_size_get(brush) */ short flt; /* need float imbuf? */ short texonly; /* no alpha, color or fallof, only texture in imbuf */ @@ -777,7 +795,7 @@ struct BrushPainter { BrushPainterCache cache; }; -BrushPainter *brush_painter_new(Scene *scene, Brush *brush) +BrushPainter *BKE_brush_painter_new(Scene *scene, Brush *brush) { BrushPainter *painter= MEM_callocN(sizeof(BrushPainter), "BrushPainter"); @@ -786,15 +804,15 @@ BrushPainter *brush_painter_new(Scene *scene, Brush *brush) painter->firsttouch= 1; painter->cache.lastsize= -1; /* force ibuf create in refresh */ - painter->startsize = brush_size(scene, brush); - painter->startalpha = brush_alpha(scene, brush); + painter->startsize = BKE_brush_size_get(scene, brush); + painter->startalpha = BKE_brush_alpha_get(scene, brush); painter->startjitter = brush->jitter; painter->startspacing = brush->spacing; return painter; } -void brush_painter_require_imbuf(BrushPainter *painter, short flt, short texonly, int size) +void BKE_brush_painter_require_imbuf(BrushPainter *painter, short flt, short texonly, int size) { if ((painter->cache.flt != flt) || (painter->cache.size != size) || ((painter->cache.texonly != texonly) && texonly)) { @@ -816,12 +834,12 @@ void brush_painter_require_imbuf(BrushPainter *painter, short flt, short texonly painter->cache.enabled= 1; } -void brush_painter_free(BrushPainter *painter) +void BKE_brush_painter_free(BrushPainter *painter) { Brush *brush = painter->brush; - brush_set_size(painter->scene, brush, painter->startsize); - brush_set_alpha(painter->scene, brush, painter->startalpha); + BKE_brush_size_set(painter->scene, brush, painter->startsize); + brush_alpha_set(painter->scene, brush, painter->startalpha); brush->jitter = painter->startjitter; brush->spacing = painter->startspacing; @@ -841,7 +859,7 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, float *bf, *mf, *tf, *otf=NULL, xoff, yoff, xy[2], rgba[4]; unsigned char *b, *m, *t, *ot= NULL; int dotexold, origx= x, origy= y; - const int radius= brush_size(painter->scene, brush); + const int radius= BKE_brush_size_get(painter->scene, brush); xoff = -radius + 0.5f; yoff = -radius + 0.5f; @@ -879,7 +897,7 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, xy[0] = x + xoff; xy[1] = y + yoff; - brush_sample_tex(scene, brush, xy, tf, 0); + BKE_brush_sample_tex(scene, brush, xy, tf, 0); } bf[0] = tf[0]*mf[0]; @@ -910,7 +928,7 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, xy[0] = x + xoff; xy[1] = y + yoff; - brush_sample_tex(scene, brush, xy, rgba, 0); + BKE_brush_sample_tex(scene, brush, xy, rgba, 0); rgba_float_to_uchar(t, rgba); } @@ -930,7 +948,7 @@ static void brush_painter_fixed_tex_partial_update(BrushPainter *painter, const BrushPainterCache *cache= &painter->cache; ImBuf *oldtexibuf, *ibuf; int imbflag, destx, desty, srcx, srcy, w, h, x1, y1, x2, y2; - const int diameter= 2*brush_size(scene, brush); + const int diameter= 2*BKE_brush_size_get(scene, brush); imbflag= (cache->flt)? IB_rectfloat: IB_rect; if (!cache->ibuf) @@ -986,8 +1004,8 @@ static void brush_painter_refresh_cache(BrushPainter *painter, const float pos[2 MTex *mtex= &brush->mtex; int size; short flt; - const int diameter= 2*brush_size(scene, brush); - const float alpha= brush_alpha(scene, brush); + const int diameter= 2*BKE_brush_size_get(scene, brush); + const float alpha= BKE_brush_alpha_get(scene, brush); if (diameter != cache->lastsize || alpha != cache->lastalpha || @@ -1006,11 +1024,11 @@ static void brush_painter_refresh_cache(BrushPainter *painter, const float pos[2 size= (cache->size)? cache->size: diameter; if (brush->flag & BRUSH_FIXED_TEX) { - brush_imbuf_new(scene, brush, flt, 3, size, &cache->maskibuf, use_color_correction); + BKE_brush_imbuf_new(scene, brush, flt, 3, size, &cache->maskibuf, use_color_correction); brush_painter_fixed_tex_partial_update(painter, pos); } else - brush_imbuf_new(scene, brush, flt, 2, size, &cache->ibuf, use_color_correction); + BKE_brush_imbuf_new(scene, brush, flt, 2, size, &cache->ibuf, use_color_correction); cache->lastsize= diameter; cache->lastalpha= alpha; @@ -1025,24 +1043,24 @@ static void brush_painter_refresh_cache(BrushPainter *painter, const float pos[2 } } -void brush_painter_break_stroke(BrushPainter *painter) +void BKE_brush_painter_break_stroke(BrushPainter *painter) { painter->firsttouch= 1; } -static void brush_apply_pressure(BrushPainter *painter, Brush *brush, float pressure) +static void brush_pressure_apply(BrushPainter *painter, Brush *brush, float pressure) { - if (brush_use_alpha_pressure(painter->scene, brush)) - brush_set_alpha(painter->scene, brush, MAX2(0.0f, painter->startalpha*pressure)); - if (brush_use_size_pressure(painter->scene, brush)) - brush_set_size(painter->scene, brush, MAX2(1.0f, painter->startsize*pressure)); + if (BKE_brush_use_alpha_pressure(painter->scene, brush)) + brush_alpha_set(painter->scene, brush, MAX2(0.0f, painter->startalpha*pressure)); + if (BKE_brush_use_size_pressure(painter->scene, brush)) + BKE_brush_size_set(painter->scene, brush, MAX2(1.0f, painter->startsize*pressure)); if (brush->flag & BRUSH_JITTER_PRESSURE) brush->jitter = MAX2(0.0f, painter->startjitter*pressure); if (brush->flag & BRUSH_SPACING_PRESSURE) brush->spacing = MAX2(1.0f, painter->startspacing*(1.5f-pressure)); } -void brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2], float jitterpos[2]) +void BKE_brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2], float jitterpos[2]) { int use_jitter= brush->jitter != 0; @@ -1052,7 +1070,7 @@ void brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2], floa if (use_jitter) { float rand_pos[2]; - const int radius= brush_size(scene, brush); + const int radius= BKE_brush_size_get(scene, brush); const int diameter= 2*radius; // find random position within a circle of diameter 1 @@ -1069,8 +1087,8 @@ void brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2], floa } } -int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2], double time, float pressure, - void *user, int use_color_correction) +int BKE_brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2], double time, float pressure, + void *user, int use_color_correction) { Scene *scene= painter->scene; Brush *brush= painter->brush; @@ -1087,7 +1105,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 painter->startpaintpos[0]= pos[0]; painter->startpaintpos[1]= pos[1]; - brush_apply_pressure(painter, brush, pressure); + brush_pressure_apply(painter, brush, pressure); if (painter->cache.enabled) brush_painter_refresh_cache(painter, pos, use_color_correction); totpaintops += func(user, painter->cache.ibuf, pos, pos); @@ -1134,11 +1152,11 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 else { float startdistance, spacing, step, paintpos[2], dmousepos[2], finalpos[2]; float t, len, press; - const int radius= brush_size(scene, brush); + const int radius= BKE_brush_size_get(scene, brush); /* compute brush spacing adapted to brush radius, spacing may depend * on pressure, so update it */ - brush_apply_pressure(painter, brush, painter->lastpressure); + brush_pressure_apply(painter, brush, painter->lastpressure); spacing= MAX2(1.0f, radius)*brush->spacing*0.01f; /* setup starting distance, direction vector and accumulated distance */ @@ -1156,10 +1174,10 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 t = step/len; press= (1.0f-t)*painter->lastpressure + t*pressure; - brush_apply_pressure(painter, brush, press); + brush_pressure_apply(painter, brush, press); spacing= MAX2(1.0f, radius)*brush->spacing*0.01f; - brush_jitter_pos(scene, brush, paintpos, finalpos); + BKE_brush_jitter_pos(scene, brush, paintpos, finalpos); if (painter->cache.enabled) brush_painter_refresh_cache(painter, finalpos, use_color_correction); @@ -1174,7 +1192,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 } } else { - brush_jitter_pos(scene, brush, pos, finalpos); + BKE_brush_jitter_pos(scene, brush, pos, finalpos); if (painter->cache.enabled) brush_painter_refresh_cache(painter, finalpos, use_color_correction); @@ -1200,9 +1218,9 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 painter->accumtime -= painttime; while (painter->accumtime >= (double)brush->rate) { - brush_apply_pressure(painter, brush, pressure); + brush_pressure_apply(painter, brush, pressure); - brush_jitter_pos(scene, brush, pos, finalpos); + BKE_brush_jitter_pos(scene, brush, pos, finalpos); if (painter->cache.enabled) brush_painter_refresh_cache(painter, finalpos, use_color_correction); @@ -1220,8 +1238,8 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 painter->lastmousepos[1]= pos[1]; painter->lastpressure= pressure; - brush_set_alpha(scene, brush, painter->startalpha); - brush_set_size(scene, brush, painter->startsize); + brush_alpha_set(scene, brush, painter->startalpha); + BKE_brush_size_set(scene, brush, painter->startsize); brush->jitter = painter->startjitter; brush->spacing = painter->startspacing; @@ -1229,7 +1247,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2 } /* Uses the brush curve control to find a strength value between 0 and 1 */ -float brush_curve_strength_clamp(Brush *br, float p, const float len) +float BKE_brush_curve_strength_clamp(Brush *br, float p, const float len) { if (p >= len) return 0; else p= p/len; @@ -1241,7 +1259,7 @@ float brush_curve_strength_clamp(Brush *br, float p, const float len) } /* same as above but can return negative values if the curve enables * used for sculpt only */ -float brush_curve_strength(Brush *br, float p, const float len) +float BKE_brush_curve_strength(Brush *br, float p, const float len) { if (p >= len) p= 1.0f; @@ -1252,7 +1270,7 @@ float brush_curve_strength(Brush *br, float p, const float len) } /* TODO: should probably be unified with BrushPainter stuff? */ -unsigned int *brush_gen_texture_cache(Brush *br, int half_side) +unsigned int *BKE_brush_gen_texture_cache(Brush *br, int half_side) { unsigned int *texcache = NULL; MTex *mtex = &br->mtex; @@ -1298,7 +1316,7 @@ unsigned int *brush_gen_texture_cache(Brush *br, int half_side) } /**** Radial Control ****/ -struct ImBuf *brush_gen_radial_control_imbuf(Brush *br) +struct ImBuf *BKE_brush_gen_radial_control_imbuf(Brush *br) { ImBuf *im = MEM_callocN(sizeof(ImBuf), "radial control texture"); unsigned int *texcache; @@ -1306,14 +1324,14 @@ struct ImBuf *brush_gen_radial_control_imbuf(Brush *br) int half = side / 2; int i, j; - texcache = brush_gen_texture_cache(br, half); + texcache = BKE_brush_gen_texture_cache(br, half); im->rect_float = MEM_callocN(sizeof(float) * side * side, "radial control rect"); im->x = im->y = side; for (i=0; i<side; ++i) { for (j=0; j<side; ++j) { float magn= sqrt(pow(i - half, 2) + pow(j - half, 2)); - im->rect_float[i*side + j]= brush_curve_strength_clamp(br, magn, half); + im->rect_float[i*side + j]= BKE_brush_curve_strength_clamp(br, magn, half); } } diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index df80ce6e87c..f0bc2dddbad 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -106,7 +106,7 @@ float nearest_point_in_tri_surface(const float v0[3], const float v1[3], const f B0 = dot_v3v3(diff, e0 ); B1 = dot_v3v3(diff, e1 ); C = dot_v3v3(diff, diff ); - Det = fabs( A00 * A11 - A01 * A01 ); + Det = fabs(A00 * A11 - A01 * A01); S = A01 * B1 - A11 * B0; T = A01 * B0 - A00 * B1; @@ -383,7 +383,7 @@ static void mesh_faces_nearest_point(void *userdata, int index, const float co[3 nearest->index = index; nearest->dist = dist; copy_v3_v3(nearest->co, nearest_tmp); - normal_tri_v3( nearest->no,t0, t1, t2); + normal_tri_v3(nearest->no, t0, t1, t2); } t1 = t2; @@ -402,10 +402,10 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r MFace *face = data->face + index; float *t0, *t1, *t2, *t3; - t0 = vert[ face->v1 ].co; - t1 = vert[ face->v2 ].co; - t2 = vert[ face->v3 ].co; - t3 = face->v4 ? vert[ face->v4].co : NULL; + t0 = vert[face->v1].co; + t1 = vert[face->v2].co; + t2 = vert[face->v3].co; + t3 = face->v4 ? vert[face->v4].co : NULL; do @@ -421,7 +421,7 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r hit->dist = dist; madd_v3_v3v3fl(hit->co, ray->origin, ray->direction, dist); - normal_tri_v3( hit->no,t0, t1, t2); + normal_tri_v3(hit->no, t0, t1, t2); } t1 = t2; @@ -706,7 +706,7 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data) if (!data->cached) BLI_bvhtree_free(data->tree); - memset( data, 0, sizeof(*data) ); + memset(data, 0, sizeof(*data)); } } @@ -743,11 +743,11 @@ void bvhcache_insert(BVHCache *cache, BVHTree *tree, int type) { BVHCacheItem *item = NULL; - assert( tree != NULL ); - assert( bvhcache_find(cache, type) == NULL ); + assert(tree != NULL); + assert(bvhcache_find(cache, type) == NULL); item = MEM_mallocN(sizeof(BVHCacheItem), "BVHCacheItem"); - assert( item != NULL ); + assert(item != NULL); item->type = type; item->tree = tree; diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index 12801228950..11c628e7848 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -50,7 +50,7 @@ /****************************** Camera Datablock *****************************/ -void *add_camera(const char *name) +void *BKE_camera_add(const char *name) { Camera *cam; @@ -69,7 +69,7 @@ void *add_camera(const char *name) return cam; } -Camera *copy_camera(Camera *cam) +Camera *BKE_camera_copy(Camera *cam) { Camera *camn; @@ -80,7 +80,7 @@ Camera *copy_camera(Camera *cam) return camn; } -void make_local_camera(Camera *cam) +void BKE_camera_make_local(Camera *cam) { Main *bmain= G.main; Object *ob; @@ -108,7 +108,7 @@ void make_local_camera(Camera *cam) id_clear_lib_data(bmain, &cam->id); } else if (is_local && is_lib) { - Camera *cam_new= copy_camera(cam); + Camera *cam_new= BKE_camera_copy(cam); cam_new->id.us= 0; @@ -127,26 +127,26 @@ void make_local_camera(Camera *cam) } } -void free_camera(Camera *ca) +void BKE_camera_free(Camera *ca) { BKE_free_animdata((ID *)ca); } /******************************** Camera Usage *******************************/ -void object_camera_mode(RenderData *rd, Object *cam_ob) +void BKE_camera_object_mode(RenderData *rd, Object *cam_ob) { rd->mode &= ~(R_ORTHO|R_PANORAMA); if (cam_ob && cam_ob->type==OB_CAMERA) { Camera *cam= cam_ob->data; if (cam->type == CAM_ORTHO) rd->mode |= R_ORTHO; - if (cam->flag & CAM_PANORAMA) rd->mode |= R_PANORAMA; + if (cam->type == CAM_PANO) rd->mode |= R_PANORAMA; } } /* get the camera's dof value, takes the dof object into account */ -float object_camera_dof_distance(Object *ob) +float BKE_camera_object_dof_distance(Object *ob) { Camera *cam = (Camera *)ob->data; if (ob->type != OB_CAMERA) @@ -165,7 +165,7 @@ float object_camera_dof_distance(Object *ob) return cam->YF_dofdist; } -float camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y) +float BKE_camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y) { /* sensor size used to fit to. for auto, sensor_x is both x and y. */ if (sensor_fit == CAMERA_SENSOR_FIT_VERT) @@ -174,7 +174,7 @@ float camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y) return sensor_x; } -int camera_sensor_fit(int sensor_fit, float sizex, float sizey) +int BKE_camera_sensor_fit(int sensor_fit, float sizex, float sizey) { if (sensor_fit == CAMERA_SENSOR_FIT_AUTO) { if (sizex >= sizey) @@ -188,7 +188,7 @@ int camera_sensor_fit(int sensor_fit, float sizex, float sizey) /******************************** Camera Params *******************************/ -void camera_params_init(CameraParams *params) +void BKE_camera_params_init(CameraParams *params) { memset(params, 0, sizeof(CameraParams)); @@ -200,7 +200,7 @@ void camera_params_init(CameraParams *params) params->zoom= 1.0f; } -void camera_params_from_object(CameraParams *params, Object *ob) +void BKE_camera_params_from_object(CameraParams *params, Object *ob) { if (!ob) return; @@ -239,7 +239,7 @@ void camera_params_from_object(CameraParams *params, Object *ob) } } -void camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D *rv3d) +void BKE_camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D *rv3d) { /* common */ params->lens= v3d->lens; @@ -248,7 +248,7 @@ void camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D * if (rv3d->persp==RV3D_CAMOB) { /* camera view */ - camera_params_from_object(params, v3d->camera); + BKE_camera_params_from_object(params, v3d->camera); params->zoom= BKE_screen_view3d_zoom_to_fac((float)rv3d->camzoom); @@ -275,7 +275,7 @@ void camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D * } } -void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float xasp, float yasp) +void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float xasp, float yasp) { rctf viewplane; float pixsize, viewfac, sensor_size, dx, dy; @@ -293,12 +293,12 @@ void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, f } else { /* perspective camera */ - sensor_size= camera_sensor_size(params->sensor_fit, params->sensor_x, params->sensor_y); + sensor_size= BKE_camera_sensor_size(params->sensor_fit, params->sensor_x, params->sensor_y); pixsize= (sensor_size * params->clipsta)/params->lens; } /* determine sensor fit */ - sensor_fit = camera_sensor_fit(params->sensor_fit, xasp*winx, yasp*winy); + sensor_fit = BKE_camera_sensor_fit(params->sensor_fit, xasp*winx, yasp*winy); if (sensor_fit==CAMERA_SENSOR_FIT_HOR) viewfac= winx; @@ -351,23 +351,23 @@ void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, f } /* viewplane is assumed to be already computed */ -void camera_params_compute_matrix(CameraParams *params) +void BKE_camera_params_compute_matrix(CameraParams *params) { - rctf viewplane= params->viewplane; + rctf viewplane = params->viewplane; /* compute projection matrix */ if (params->is_ortho) orthographic_m4(params->winmat, viewplane.xmin, viewplane.xmax, - viewplane.ymin, viewplane.ymax, params->clipsta, params->clipend); + viewplane.ymin, viewplane.ymax, params->clipsta, params->clipend); else perspective_m4(params->winmat, viewplane.xmin, viewplane.xmax, - viewplane.ymin, viewplane.ymax, params->clipsta, params->clipend); + viewplane.ymin, viewplane.ymax, params->clipsta, params->clipend); } /***************************** Camera View Frame *****************************/ -void camera_view_frame_ex(Scene *scene, Camera *camera, float drawsize, const short do_clip, const float scale[3], - float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]) +void BKE_camera_view_frame_ex(Scene *scene, Camera *camera, float drawsize, const short do_clip, const float scale[3], + float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]) { float facx, facy; float depth; @@ -376,7 +376,7 @@ void camera_view_frame_ex(Scene *scene, Camera *camera, float drawsize, const sh if (scene) { float aspx= (float) scene->r.xsch*scene->r.xasp; float aspy= (float) scene->r.ysch*scene->r.yasp; - int sensor_fit= camera_sensor_fit(camera->sensor_fit, aspx, aspy); + int sensor_fit= BKE_camera_sensor_fit(camera->sensor_fit, aspx, aspy); if (sensor_fit==CAMERA_SENSOR_FIT_HOR) { r_asp[0]= 1.0; @@ -431,14 +431,14 @@ void camera_view_frame_ex(Scene *scene, Camera *camera, float drawsize, const sh r_vec[3][0]= r_shift[0] - facx; r_vec[3][1]= r_shift[1] + facy; r_vec[3][2]= depth; } -void camera_view_frame(Scene *scene, Camera *camera, float r_vec[4][3]) +void BKE_camera_view_frame(Scene *scene, Camera *camera, float r_vec[4][3]) { float dummy_asp[2]; float dummy_shift[2]; float dummy_drawsize; const float dummy_scale[3]= {1.0f, 1.0f, 1.0f}; - camera_view_frame_ex(scene, camera, FALSE, 1.0, dummy_scale, + BKE_camera_view_frame_ex(scene, camera, FALSE, 1.0, dummy_scale, dummy_asp, dummy_shift, &dummy_drawsize, r_vec); } @@ -450,7 +450,7 @@ typedef struct CameraViewFrameData { unsigned int tot; } CameraViewFrameData; -static void camera_to_frame_view_cb(const float co[3], void *user_data) +static void BKE_camera_to_frame_view_cb(const float co[3], void *user_data) { CameraViewFrameData *data= (CameraViewFrameData *)user_data; unsigned int i; @@ -467,17 +467,17 @@ static void camera_to_frame_view_cb(const float co[3], void *user_data) /* don't move the camera, just yield the fit location */ /* only valid for perspective cameras */ -int camera_view_frame_fit_to_scene(Scene *scene, struct View3D *v3d, Object *camera_ob, float r_co[3]) +int BKE_camera_view_frame_fit_to_scene(Scene *scene, struct View3D *v3d, Object *camera_ob, float r_co[3]) { float shift[2]; float plane_tx[4][3]; float rot_obmat[3][3]; - const float zero[3]= {0,0,0}; + const float zero[3]= {0, 0, 0}; CameraViewFrameData data_cb; unsigned int i; - camera_view_frame(scene, camera_ob->data, data_cb.frame_tx); + BKE_camera_view_frame(scene, camera_ob->data, data_cb.frame_tx); copy_m3_m4(rot_obmat, camera_ob->obmat); normalize_m3(rot_obmat); @@ -514,7 +514,7 @@ int camera_view_frame_fit_to_scene(Scene *scene, struct View3D *v3d, Object *cam data_cb.tot= 0; /* run callback on all visible points */ BKE_scene_foreach_display_point(scene, v3d, BA_SELECT, - camera_to_frame_view_cb, &data_cb); + BKE_camera_to_frame_view_cb, &data_cb); if (data_cb.tot <= 1) { return FALSE; diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 4de7df098c3..78a8b975b85 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -176,7 +176,7 @@ static void cdDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) int i; if (dm->numVertData) { - for (i=0; i<dm->numVertData; i++) { + for (i = 0; i < dm->numVertData; i++) { DO_MINMAX(cddm->mvert[i].co, min_r, max_r); } } @@ -226,18 +226,18 @@ static const MeshElemMap *cdDM_getPolyMap(Object *ob, DerivedMesh *dm) static int can_pbvh_draw(Object *ob, DerivedMesh *dm) { CDDerivedMesh *cddm = (CDDerivedMesh*) dm; - Mesh *me= ob->data; - int deformed= 0; + Mesh *me = ob->data; + int deformed = 0; /* active modifiers means extra deformation, which can't be handled correct * on birth of PBVH and sculpt "layer" levels, so use PBVH only for internal brush * stuff and show final DerivedMesh so user would see actual object shape */ - deformed|= ob->sculpt->modifiers_active; + deformed |= ob->sculpt->modifiers_active; /* as in case with modifiers, we can't synchronize deformation made against * PBVH and non-locked keyblock, so also use PBVH only for brushes and * final DM to give final result to user */ - deformed|= ob->sculpt->kb && (ob->shapeflag&OB_SHAPE_LOCK) == 0; + deformed |= ob->sculpt->kb && (ob->shapeflag & OB_SHAPE_LOCK) == 0; if (deformed) return 0; @@ -256,6 +256,7 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) if (!ob->sculpt) return NULL; + if (ob->sculpt->pbvh) { cddm->pbvh= ob->sculpt->pbvh; cddm->pbvh_draw = can_pbvh_draw(ob, dm); @@ -265,8 +266,10 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) * this derivedmesh is just original mesh. it's the multires subsurf dm * that this is actually for, to support a pbvh on a modified mesh */ if (!cddm->pbvh && ob->type == OB_MESH) { - SculptSession *ss= ob->sculpt; - Mesh *me= ob->data; + SculptSession *ss = ob->sculpt; + Mesh *me = ob->data; + int deformed = 0; + cddm->pbvh = BLI_pbvh_new(); cddm->pbvh_draw = can_pbvh_draw(ob, dm); @@ -275,13 +278,15 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert, me->totface, me->totvert); - if (ss->modifiers_active && ob->derivedDeform) { - DerivedMesh *deformdm= ob->derivedDeform; + deformed = ss->modifiers_active || me->key; + + if (deformed && ob->derivedDeform) { + DerivedMesh *deformdm = ob->derivedDeform; float (*vertCos)[3]; int totvert; - totvert= deformdm->getNumVerts(deformdm); - vertCos= MEM_callocN(3*totvert*sizeof(float), "cdDM_getPBVH vertCos"); + totvert = deformdm->getNumVerts(deformdm); + vertCos = MEM_callocN(3*totvert*sizeof(float), "cdDM_getPBVH vertCos"); deformdm->getVertCos(deformdm, vertCos); BLI_pbvh_apply_vertCos(cddm->pbvh, vertCos); MEM_freeN(vertCos); @@ -312,7 +317,7 @@ static void cdDM_drawVerts(DerivedMesh *dm) MVert *mv = cddm->mvert; int i; - if ( GPU_buffer_legacy(dm) ) { + if (GPU_buffer_legacy(dm)) { glBegin(GL_POINTS); for (i = 0; i < dm->numVertData; i++, mv++) glVertex3fv(mv->co); @@ -320,11 +325,11 @@ static void cdDM_drawVerts(DerivedMesh *dm) } else { /* use OpenGL VBOs or Vertex Arrays instead for better, faster rendering */ GPU_vertex_setup(dm); - if ( !GPU_buffer_legacy(dm) ) { + if (!GPU_buffer_legacy(dm)) { if (dm->drawObject->tot_triangle_point) - glDrawArrays(GL_POINTS,0, dm->drawObject->tot_triangle_point); + glDrawArrays(GL_POINTS, 0, dm->drawObject->tot_triangle_point); else - glDrawArrays(GL_POINTS,0, dm->drawObject->tot_loose_point); + glDrawArrays(GL_POINTS, 0, dm->drawObject->tot_loose_point); } GPU_buffer_unbind(); } @@ -338,7 +343,7 @@ static void cdDM_drawUVEdges(DerivedMesh *dm) int i; if (mf) { - if ( GPU_buffer_legacy(dm) ) { + if (GPU_buffer_legacy(dm)) { glBegin(GL_LINES); for (i = 0; i < dm->numTessFaceData; i++, mf++, tf++) { if (!(mf->flag&ME_HIDE)) { @@ -370,7 +375,7 @@ static void cdDM_drawUVEdges(DerivedMesh *dm) int curpos = 0; GPU_uvedge_setup(dm); - if ( !GPU_buffer_legacy(dm) ) { + if (!GPU_buffer_legacy(dm)) { for (i = 0; i < dm->numTessFaceData; i++, mf++) { if (!(mf->flag&ME_HIDE)) { draw = 1; @@ -380,7 +385,7 @@ static void cdDM_drawUVEdges(DerivedMesh *dm) } if ( prevdraw != draw ) { if ( prevdraw > 0 && (curpos-prevstart) > 0) { - glDrawArrays(GL_LINES,prevstart,curpos-prevstart); + glDrawArrays(GL_LINES, prevstart, curpos-prevstart); } prevstart = curpos; } @@ -393,7 +398,7 @@ static void cdDM_drawUVEdges(DerivedMesh *dm) prevdraw = draw; } if ( prevdraw > 0 && (curpos-prevstart) > 0 ) { - glDrawArrays(GL_LINES,prevstart,curpos-prevstart); + glDrawArrays(GL_LINES, prevstart, curpos-prevstart); } } GPU_buffer_unbind(); @@ -408,8 +413,8 @@ static void cdDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int drawAllEdges MEdge *medge = cddm->medge; int i; - if ( GPU_buffer_legacy(dm) ) { - DEBUG_VBO( "Using legacy code. cdDM_drawEdges\n" ); + if (GPU_buffer_legacy(dm)) { + DEBUG_VBO("Using legacy code. cdDM_drawEdges\n"); glBegin(GL_LINES); for (i = 0; i < dm->numEdgeData; i++, medge++) { if ((drawAllEdges || (medge->flag & ME_EDGEDRAW)) && @@ -460,8 +465,8 @@ static void cdDM_drawLooseEdges(DerivedMesh *dm) MEdge *medge = cddm->medge; int i; - if ( GPU_buffer_legacy(dm) ) { - DEBUG_VBO( "Using legacy code. cdDM_drawLooseEdges\n" ); + if (GPU_buffer_legacy(dm)) { + DEBUG_VBO("Using legacy code. cdDM_drawLooseEdges\n"); glBegin(GL_LINES); for (i = 0; i < dm->numEdgeData; i++, medge++) { if (medge->flag&ME_LOOSEEDGE) { @@ -477,7 +482,7 @@ static void cdDM_drawLooseEdges(DerivedMesh *dm) int draw = 1; GPU_edge_setup(dm); - if ( !GPU_buffer_legacy(dm) ) { + if (!GPU_buffer_legacy(dm)) { for (i = 0; i < dm->numEdgeData; i++, medge++) { if (medge->flag&ME_LOOSEEDGE) { draw = 1; @@ -530,8 +535,8 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, return; } - if ( GPU_buffer_legacy(dm) ) { - DEBUG_VBO( "Using legacy code. cdDM_drawFacesSolid\n" ); + if (GPU_buffer_legacy(dm)) { + DEBUG_VBO("Using legacy code. cdDM_drawFacesSolid\n"); glBegin(glmode = GL_QUADS); for (a = 0; a < dm->numTessFaceData; a++, mface++) { int new_glmode, new_matnr, new_shademodel; @@ -558,10 +563,10 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, /* TODO make this better (cache facenormals as layer?) */ float nor[3]; if (mface->v4) { - normal_quad_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); + normal_quad_v3(nor, mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); } else { - normal_tri_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); + normal_tri_v3(nor, mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); } glNormal3fv(nor); } @@ -580,9 +585,9 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, glEnd(); } else { /* use OpenGL VBOs or Vertex Arrays instead for better, faster rendering */ - GPU_vertex_setup( dm ); - GPU_normal_setup( dm ); - if ( !GPU_buffer_legacy(dm) ) { + GPU_vertex_setup(dm); + GPU_normal_setup(dm); + if (!GPU_buffer_legacy(dm)) { glShadeModel(GL_SMOOTH); for (a = 0; a < dm->drawObject->totmaterial; a++) { if (setMaterial(dm->drawObject->materials[a].mat_nr + 1, NULL)) { @@ -591,7 +596,7 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, } } } - GPU_buffer_unbind( ); + GPU_buffer_unbind(); } #undef PASSVERT @@ -618,8 +623,8 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, cdDM_update_normals_from_pbvh(dm); - if ( GPU_buffer_legacy(dm) ) { - DEBUG_VBO( "Using legacy code. cdDM_drawFacesTex_common\n" ); + if (GPU_buffer_legacy(dm)) { + DEBUG_VBO("Using legacy code. cdDM_drawFacesTex_common\n"); for (i = 0; i < dm->numTessFaceData; i++, mf++) { MVert *mvert; DMDrawOption draw_option; @@ -642,7 +647,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, if (draw_option != DM_DRAW_OPTION_SKIP) { if (draw_option != DM_DRAW_OPTION_NO_MCOL && mcol) - cp= (unsigned char*) &mcol[i*4]; + cp = (unsigned char*) &mcol[i*4]; if (!(mf->flag&ME_SMOOTH)) { if (nors) { @@ -651,10 +656,10 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, else { float nor[3]; if (mf->v4) { - normal_quad_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); + normal_quad_v3(nor, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); } else { - normal_tri_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); + normal_tri_v3(nor, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); } glNormal3fv(nor); } @@ -697,45 +702,45 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, if (!col) col = mcol; - GPU_vertex_setup( dm ); - GPU_normal_setup( dm ); - GPU_uv_setup( dm ); + GPU_vertex_setup(dm); + GPU_normal_setup(dm); + GPU_uv_setup(dm); if ( col != NULL ) { #if 0 - if ( realcol && dm->drawObject->colType == CD_TEXTURE_MCOL ) { + if (realcol && dm->drawObject->colType == CD_TEXTURE_MCOL) { col = 0; } - else if ( mcol && dm->drawObject->colType == CD_MCOL ) { + else if (mcol && dm->drawObject->colType == CD_MCOL) { col = 0; } - if ( col != 0 ) + if (col != 0) #endif { unsigned char *colors = MEM_mallocN(dm->getNumTessFaces(dm)*4*3*sizeof(unsigned char), "cdDM_drawFacesTex_common"); - for ( i=0; i < dm->getNumTessFaces(dm); i++ ) { - for ( j=0; j < 4; j++ ) { + for (i = 0; i < dm->getNumTessFaces(dm); i++) { + for (j = 0; j < 4; j++) { /* bgr -> rgb is intentional (and stupid), but how its stored internally */ colors[i*12+j*3] = col[i*4+j].b; colors[i*12+j*3+1] = col[i*4+j].g; colors[i*12+j*3+2] = col[i*4+j].r; } } - GPU_color3_upload(dm,colors); + GPU_color3_upload(dm, colors); MEM_freeN(colors); if (realcol) dm->drawObject->colType = CD_TEXTURE_MCOL; else if (mcol) dm->drawObject->colType = CD_MCOL; } - GPU_color_setup( dm ); + GPU_color_setup(dm); } - if ( !GPU_buffer_legacy(dm) ) { + if (!GPU_buffer_legacy(dm)) { int tottri = dm->drawObject->tot_triangle_point/3; - int next_actualFace= dm->drawObject->triangle_to_mface[0]; + int next_actualFace = dm->drawObject->triangle_to_mface[0]; - glShadeModel( GL_SMOOTH ); + glShadeModel(GL_SMOOTH); /* lastFlag = 0; */ /* UNUSED */ for (i = 0; i < tottri; i++) { int actualFace = next_actualFace; @@ -761,7 +766,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, } /* flush buffer if current triangle isn't drawable or it's last triangle */ - flush= (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1); + flush = (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1); if (!flush && compareDrawOptions) { /* also compare draw options and flush buffer if they're different @@ -770,9 +775,9 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, } if (flush) { - int first= startFace*3; + int first = startFace*3; /* Add one to the length if we're drawing at the end of the array */ - int count= (i-startFace+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3; + int count = (i-startFace+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3; if (count) { if (col) @@ -789,7 +794,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm, } GPU_buffer_unbind(); - glShadeModel( GL_FLAT ); + glShadeModel(GL_FLAT); } } @@ -825,13 +830,13 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, /* back-buffer always uses legacy since VBO's would need the * color array temporarily overwritten for drawing, then reset. */ - if ( GPU_buffer_legacy(dm) || G.f & G_BACKBUFSEL) { - DEBUG_VBO( "Using legacy code. cdDM_drawMappedFaces\n" ); + if (GPU_buffer_legacy(dm) || G.f & G_BACKBUFSEL) { + DEBUG_VBO("Using legacy code. cdDM_drawMappedFaces\n"); for (i = 0; i < dm->numTessFaceData; i++, mf++) { int drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mf->flag & ME_SMOOTH); - DMDrawOption draw_option= DM_DRAW_OPTION_NORMAL; + DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL; - orig= (index==NULL) ? i : *index++; + orig = (index==NULL) ? i : *index++; if (orig == ORIGINDEX_NONE) draw_option= setMaterial(mf->mat_nr + 1, NULL); @@ -856,10 +861,10 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, else { float nor[3]; if (mf->v4) { - normal_quad_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); + normal_quad_v3(nor, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); } else { - normal_tri_v3( nor,mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); + normal_tri_v3(nor, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); } glNormal3fv(nor); } @@ -904,7 +909,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, GPU_normal_setup(dm); if ( useColors && mc ) GPU_color_setup(dm); - if ( !GPU_buffer_legacy(dm) ) { + if (!GPU_buffer_legacy(dm)) { int tottri = dm->drawObject->tot_triangle_point/3; glShadeModel(GL_SMOOTH); @@ -917,12 +922,12 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, } else { /* we need to check if the next material changes */ - int next_actualFace= dm->drawObject->triangle_to_mface[0]; + int next_actualFace = dm->drawObject->triangle_to_mface[0]; - for ( i = 0; i < tottri; i++ ) { + for (i = 0; i < tottri; i++) { //int actualFace = dm->drawObject->triangle_to_mface[i]; int actualFace = next_actualFace; - MFace *mface= mf + actualFace; + MFace *mface = mf + actualFace; /*int drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mface->flag & ME_SMOOTH);*/ /* UNUSED */ DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL; int flush = 0; @@ -930,7 +935,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, if (i != tottri-1) next_actualFace= dm->drawObject->triangle_to_mface[i+1]; - orig= (index==NULL) ? actualFace : index[actualFace]; + orig = (index==NULL) ? actualFace : index[actualFace]; if (orig == ORIGINDEX_NONE) draw_option= setMaterial(mface->mat_nr + 1, NULL); @@ -942,19 +947,19 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, * invisible triangle or at the end of the array */ /* flush buffer if current triangle isn't drawable or it's last triangle... */ - flush= (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1); + flush = (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1); /* ... or when material setting is dissferent */ - flush|= mf[actualFace].mat_nr != mf[next_actualFace].mat_nr; + flush |= mf[actualFace].mat_nr != mf[next_actualFace].mat_nr; if (!flush && compareDrawOptions) { - flush|= compareDrawOptions(userData, actualFace, next_actualFace) == 0; + flush |= compareDrawOptions(userData, actualFace, next_actualFace) == 0; } if (flush) { - int first= prevstart*3; + int first = prevstart*3; /* Add one to the length if we're drawing at the end of the array */ - int count= (i-prevstart+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3; + int count = (i-prevstart+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3; if (count) glDrawArrays(GL_TRIANGLES, first, count); @@ -984,20 +989,20 @@ static void cddm_draw_attrib_vertex(DMVertexAttribs *attribs, MVert *mvert, int /* orco texture coordinates */ if (attribs->totorco) { - if (attribs->orco.glTexco) + if (attribs->orco.gl_texco) glTexCoord3fv(attribs->orco.array[index]); else - glVertexAttrib3fvARB(attribs->orco.glIndex, attribs->orco.array[index]); + glVertexAttrib3fvARB(attribs->orco.gl_index, attribs->orco.array[index]); } /* uv texture coordinates */ for (b = 0; b < attribs->tottface; b++) { MTFace *tf = &attribs->tface[b].array[a]; - if (attribs->tface[b].glTexco) + if (attribs->tface[b].gl_texco) glTexCoord2fv(tf->uv[vert]); else - glVertexAttrib2fvARB(attribs->tface[b].glIndex, tf->uv[vert]); + glVertexAttrib2fvARB(attribs->tface[b].gl_index, tf->uv[vert]); } /* vertex colors */ @@ -1005,13 +1010,13 @@ static void cddm_draw_attrib_vertex(DMVertexAttribs *attribs, MVert *mvert, int MCol *cp = &attribs->mcol[b].array[a*4 + vert]; GLubyte col[4]; col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; - glVertexAttrib4ubvARB(attribs->mcol[b].glIndex, col); + glVertexAttrib4ubvARB(attribs->mcol[b].gl_index, col); } /* tangent for normal mapping */ if (attribs->tottang) { float *tang = attribs->tang.array[a*4 + vert]; - glVertexAttrib4fvARB(attribs->tang.glIndex, tang); + glVertexAttrib4fvARB(attribs->tang.gl_index, tang); } /* vertex normal */ @@ -1045,7 +1050,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, glShadeModel(GL_SMOOTH); if ( GPU_buffer_legacy(dm) || setDrawOptions != NULL ) { - DEBUG_VBO( "Using legacy code. cdDM_drawMappedFacesGLSL\n" ); + DEBUG_VBO("Using legacy code. cdDM_drawMappedFacesGLSL\n"); memset(&attribs, 0, sizeof(attribs)); glBegin(GL_QUADS); @@ -1088,10 +1093,10 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, /* TODO ideally a normal layer should always be available */ float nor[3]; if (mface->v4) { - normal_quad_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); + normal_quad_v3(nor, mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); } else { - normal_tri_v3( nor,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); + normal_tri_v3(nor, mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); } glNormal3fv(nor); } @@ -1122,30 +1127,30 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, GPU_vertex_setup(dm); GPU_normal_setup(dm); - if ( !GPU_buffer_legacy(dm) ) { - for ( i = 0; i < dm->drawObject->tot_triangle_point/3; i++ ) { + if (!GPU_buffer_legacy(dm)) { + for (i = 0; i < dm->drawObject->tot_triangle_point/3; i++) { a = dm->drawObject->triangle_to_mface[i]; mface = mf + a; new_matnr = mface->mat_nr + 1; - if (new_matnr != matnr ) { + if (new_matnr != matnr) { numfaces = curface - start; - if ( numfaces > 0 ) { + if (numfaces > 0) { - if ( dodraw ) { + if (dodraw) { - if ( numdata != 0 ) { + if (numdata != 0) { GPU_buffer_unlock(buffer); - GPU_interleaved_attrib_setup(buffer,datatypes,numdata); + GPU_interleaved_attrib_setup(buffer, datatypes, numdata); } - glDrawArrays(GL_TRIANGLES,start*3,numfaces*3); + glDrawArrays(GL_TRIANGLES, start*3, numfaces*3); - if ( numdata != 0 ) { + if (numdata != 0) { GPU_buffer_free(buffer); @@ -1162,39 +1167,39 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs); if (attribs.totorco) { - datatypes[numdata].index = attribs.orco.glIndex; + datatypes[numdata].index = attribs.orco.gl_index; datatypes[numdata].size = 3; datatypes[numdata].type = GL_FLOAT; numdata++; } for (b = 0; b < attribs.tottface; b++) { - datatypes[numdata].index = attribs.tface[b].glIndex; + datatypes[numdata].index = attribs.tface[b].gl_index; datatypes[numdata].size = 2; datatypes[numdata].type = GL_FLOAT; numdata++; } for (b = 0; b < attribs.totmcol; b++) { - datatypes[numdata].index = attribs.mcol[b].glIndex; + datatypes[numdata].index = attribs.mcol[b].gl_index; datatypes[numdata].size = 4; datatypes[numdata].type = GL_UNSIGNED_BYTE; numdata++; } if (attribs.tottang) { - datatypes[numdata].index = attribs.tang.glIndex; + datatypes[numdata].index = attribs.tang.gl_index; datatypes[numdata].size = 4; datatypes[numdata].type = GL_FLOAT; numdata++; } - if ( numdata != 0 ) { - elementsize = GPU_attrib_element_size( datatypes, numdata ); - buffer = GPU_buffer_alloc( elementsize*dm->drawObject->tot_triangle_point); - if ( buffer == NULL ) { + if (numdata != 0) { + elementsize = GPU_attrib_element_size(datatypes, numdata); + buffer = GPU_buffer_alloc(elementsize * dm->drawObject->tot_triangle_point); + if (buffer == NULL) { GPU_buffer_unbind(); dm->drawObject->legacy = 1; return; } varray = GPU_buffer_lock_stream(buffer); - if ( varray == NULL ) { + if (varray == NULL) { GPU_buffer_unbind(); GPU_buffer_free(buffer); dm->drawObject->legacy = 1; @@ -1205,7 +1210,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, /* if the buffer was set, don't use it again. * prevdraw was assumed true but didnt run so set to false - [#21036] */ /* prevdraw= 0; */ /* UNUSED */ - buffer= NULL; + buffer = NULL; } } } @@ -1213,17 +1218,17 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, if (dodraw && numdata != 0 ) { offset = 0; if (attribs.totorco) { - copy_v3_v3((float *)&varray[elementsize*curface*3],(float *)attribs.orco.array[mface->v1]); - copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize],(float *)attribs.orco.array[mface->v2]); - copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize*2],(float *)attribs.orco.array[mface->v3]); + copy_v3_v3((float *)&varray[elementsize*curface*3], (float *)attribs.orco.array[mface->v1]); + copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize], (float *)attribs.orco.array[mface->v2]); + copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize*2], (float *)attribs.orco.array[mface->v3]); offset += sizeof(float)*3; } for (b = 0; b < attribs.tottface; b++) { MTFace *tf = &attribs.tface[b].array[a]; - copy_v2_v2((float *)&varray[elementsize*curface*3+offset],tf->uv[0]); - copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize],tf->uv[1]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset], tf->uv[0]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize], tf->uv[1]); - copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize*2],tf->uv[2]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize*2], tf->uv[2]); offset += sizeof(float)*2; } for (b = 0; b < attribs.totmcol; b++) { @@ -1255,16 +1260,16 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, if (dodraw && numdata != 0 ) { offset = 0; if (attribs.totorco) { - copy_v3_v3((float *)&varray[elementsize*curface*3],(float *)attribs.orco.array[mface->v3]); - copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize],(float *)attribs.orco.array[mface->v4]); - copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize*2],(float *)attribs.orco.array[mface->v1]); + copy_v3_v3((float *)&varray[elementsize*curface*3], (float *)attribs.orco.array[mface->v3]); + copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize], (float *)attribs.orco.array[mface->v4]); + copy_v3_v3((float *)&varray[elementsize*curface*3+elementsize*2], (float *)attribs.orco.array[mface->v1]); offset += sizeof(float)*3; } for (b = 0; b < attribs.tottface; b++) { MTFace *tf = &attribs.tface[b].array[a]; - copy_v2_v2((float *)&varray[elementsize*curface*3+offset],tf->uv[2]); - copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize],tf->uv[3]); - copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize*2],tf->uv[0]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset], tf->uv[2]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize], tf->uv[3]); + copy_v2_v2((float *)&varray[elementsize*curface*3+offset+elementsize*2], tf->uv[0]); offset += sizeof(float)*2; } for (b = 0; b < attribs.totmcol; b++) { @@ -1296,13 +1301,13 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, } } numfaces = curface - start; - if ( numfaces > 0 ) { - if ( dodraw ) { - if ( numdata != 0 ) { + if (numfaces > 0) { + if (dodraw) { + if (numdata != 0) { GPU_buffer_unlock(buffer); - GPU_interleaved_attrib_setup(buffer,datatypes,numdata); + GPU_interleaved_attrib_setup(buffer, datatypes, numdata); } - glDrawArrays(GL_TRIANGLES,start*3,(curface-start)*3); + glDrawArrays(GL_TRIANGLES, start*3, (curface-start)*3); } } GPU_buffer_unbind(); @@ -1374,9 +1379,9 @@ static void cdDM_drawMappedFacesMat(DerivedMesh *dm, float nor[3]; if (mf->v4) - normal_quad_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co); + normal_quad_v3(nor, mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co); else - normal_tri_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co); + normal_tri_v3(nor, mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co); glNormal3fv(nor); } @@ -1757,23 +1762,23 @@ static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata, MLoopUV *mloopuv; int i, j, hasPCol = CustomData_has_layer(&bm->ldata, CD_PREVIEW_MLOOPCOL); - for (i=0; i < numTex; i++) { + for (i = 0; i < numTex; i++) { texface = CustomData_get_n(facedata, CD_MTFACE, cdindex, i); texpoly = CustomData_bmesh_get_n(&bm->pdata, f->head.data, CD_MTEXPOLY, i); ME_MTEXFACE_CPY(texface, texpoly); - for (j=0; j<3; j++) { + for (j = 0 ; j < 3; j++) { l = l3[j]; mloopuv = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPUV, i); copy_v2_v2(texface->uv[j], mloopuv->uv); } } - for (i=0; i < numCol; i++) { + for (i = 0; i < numCol; i++) { mcol = CustomData_get_n(facedata, CD_MCOL, cdindex, i); - for (j=0; j<3; j++) { + for (j = 0; j < 3; j++) { l = l3[j]; mloopcol = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPCOL, i); MESH_MLOOPCOL_TO_MCOL(mloopcol, &mcol[j]); @@ -1783,7 +1788,7 @@ static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata, if (hasPCol) { mcol = CustomData_get(facedata, cdindex, CD_PREVIEW_MCOL); - for (j=0; j<3; j++) { + for (j = 0; j < 3; j++) { l = l3[j]; mloopcol = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_PREVIEW_MLOOPCOL); MESH_MLOOPCOL_TO_MCOL(mloopcol, &mcol[j]); @@ -1849,7 +1854,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis index = dm->getVertDataArray(dm, CD_ORIGINDEX); eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for (i=0; eve; eve=BM_iter_step(&iter), i++, index++) { + for (i = 0; eve; eve = BM_iter_step(&iter), i++, index++) { MVert *mv = &mvert[i]; copy_v3_v3(mv->co, eve->co); @@ -1871,7 +1876,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis index = dm->getEdgeDataArray(dm, CD_ORIGINDEX); eed = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; eed=BM_iter_step(&iter), i++, index++) { + for (i = 0; eed; eed = BM_iter_step(&iter), i++, index++) { MEdge *med = &medge[i]; BM_elem_index_set(eed, i); /* set_inline */ @@ -1922,7 +1927,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX); j = 0; efa = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); - for (i=0; efa; i++, efa=BM_iter_step(&iter), index++) { + for (i = 0; efa; i++, efa = BM_iter_step(&iter), index++) { BMLoop *l; MPoly *mp = &mpoly[i]; @@ -2210,7 +2215,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*fill newl with destination vertex indices*/ mv = cddm->mvert; c = 0; - for (i=0; i<dm->numVertData; i++, mv++) { + for (i = 0; i < dm->numVertData; i++, mv++) { if (vtargetmap[i] == -1) { BLI_array_append(oldv, i); newv[i] = c++; @@ -2219,7 +2224,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) } /*now link target vertices to destination indices*/ - for (i=0; i<dm->numVertData; i++) { + for (i = 0; i < dm->numVertData; i++) { if (vtargetmap[i] != -1) { newv[i] = newv[vtargetmap[i]]; } @@ -2227,7 +2232,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*find-replace merged vertices with target vertices*/ ml = cddm->mloop; - for (i=0; i<totloop; i++, ml++) { + for (i = 0; i < totloop; i++, ml++) { if (vtargetmap[ml->v] != -1) { ml->v = vtargetmap[ml->v]; } @@ -2236,7 +2241,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*now go through and fix edges and faces*/ med = cddm->medge; c = 0; - for (i=0; i<dm->numEdgeData; i++, med++) { + for (i = 0; i < dm->numEdgeData; i++, med++) { if (LIKELY(med->v1 != med->v2)) { const unsigned int v1 = (vtargetmap[med->v1] != -1) ? vtargetmap[med->v1] : med->v1; @@ -2260,13 +2265,13 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) } mp = cddm->mpoly; - for (i=0; i<totpoly; i++, mp++) { + for (i = 0; i < totpoly; i++, mp++) { MPoly *mp2; ml = cddm->mloop + mp->loopstart; c = 0; - for (j=0; j<mp->totloop; j++, ml++) { + for (j = 0; j < mp->totloop; j++, ml++) { med = cddm->medge + ml->e; if (LIKELY(med->v1 != med->v2)) { newl[j+mp->loopstart] = BLI_array_count(mloop); @@ -2292,7 +2297,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*update edge indices and copy customdata*/ med = medge; - for (i=0; i<cddm2->dm.numEdgeData; i++, med++) { + for (i = 0; i < cddm2->dm.numEdgeData; i++, med++) { if (newv[med->v1] != -1) med->v1 = newv[med->v1]; if (newv[med->v2] != -1) @@ -2303,7 +2308,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*update loop indices and copy customdata*/ ml = mloop; - for (i=0; i<cddm2->dm.numLoopData; i++, ml++) { + for (i = 0; i < cddm2->dm.numLoopData; i++, ml++) { if (newe[ml->e] != -1) ml->e = newe[ml->e]; if (newv[ml->v] != -1) @@ -2314,13 +2319,13 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap) /*copy vertex customdata*/ mv = mvert; - for (i=0; i<cddm2->dm.numVertData; i++, mv++) { + for (i = 0; i < cddm2->dm.numVertData; i++, mv++) { CustomData_copy_data(&dm->vertData, &cddm2->dm.vertData, oldv[i], i, 1); } /*copy poly customdata*/ mp = mpoly; - for (i=0; i<cddm2->dm.numPolyData; i++, mp++) { + for (i = 0; i < cddm2->dm.numPolyData; i++, mp++) { CustomData_copy_data(&dm->polyData, &cddm2->dm.polyData, oldp[i], i, 1); } @@ -2431,14 +2436,14 @@ void CDDM_calc_edges(DerivedMesh *dm) med = cddm->medge; if (med) { - for (i=0; i < numEdges; i++, med++) { + for (i = 0; i < numEdges; i++, med++) { BLI_edgehash_insert(eh, med->v1, med->v2, SET_INT_IN_POINTER(i+1)); } } - for (i=0; i < maxFaces; i++, mp++) { + for (i = 0; i < maxFaces; i++, mp++) { ml = cddm->mloop + mp->loopstart; - for (j=0; j<mp->totloop; j++, ml++) { + for (j = 0; j < mp->totloop; j++, ml++) { v1 = ml->v; v2 = ME_POLY_LOOP_NEXT(cddm->mloop, mp, j)->v; if (!BLI_edgehash_haskey(eh, v1, v2)) { @@ -2477,9 +2482,9 @@ void CDDM_calc_edges(DerivedMesh *dm) cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); mp = cddm->mpoly; - for (i=0; i < maxFaces; i++, mp++) { + for (i = 0; i < maxFaces; i++, mp++) { ml = cddm->mloop + mp->loopstart; - for (j=0; j<mp->totloop; j++, ml++) { + for (j = 0; j < mp->totloop; j++, ml++) { v1 = ml->v; v2 = ME_POLY_LOOP_NEXT(cddm->mloop, mp, j)->v; ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, v1, v2)); @@ -2601,13 +2606,13 @@ void CDDM_tessfaces_to_faces(DerivedMesh *dm) /*build edge hash*/ me = cddm->medge; - for (i=0; i<cddm->dm.numEdgeData; i++, me++) { + for (i = 0; i < cddm->dm.numEdgeData; i++, me++) { BLI_edgehash_insert(eh, me->v1, me->v2, SET_INT_IN_POINTER(i)); } mf = cddm->mface; totloop = 0; - for (i=0; i<cddm->dm.numTessFaceData; i++, mf++) { + for (i = 0; i < cddm->dm.numTessFaceData; i++, mf++) { totloop += mf->v4 ? 4 : 3; } @@ -2636,7 +2641,7 @@ void CDDM_tessfaces_to_faces(DerivedMesh *dm) mp = cddm->mpoly; ml = cddm->mloop; l = 0; - for (i=0; i<cddm->dm.numTessFaceData; i++, mf++, mp++, polyindex++) { + for (i = 0; i < cddm->dm.numTessFaceData; i++, mf++, mp++, polyindex++) { mp->flag = mf->flag; mp->loopstart = l; mp->mat_nr = mf->mat_nr; diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 97baaad430b..b521285c626 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -51,9 +51,9 @@ #include "BKE_pointcache.h" #ifdef _WIN32 -void tstart ( void ) +void tstart( void ) {} -void tend ( void ) +void tend( void ) { } double tval( void ) @@ -64,13 +64,13 @@ double tval( void ) #include <sys/time.h> static struct timeval _tstart, _tend; static struct timezone tz; -void tstart ( void ) +void tstart( void ) { - gettimeofday ( &_tstart, &tz ); + gettimeofday(&_tstart, &tz); } -void tend ( void ) +void tend(void) { - gettimeofday ( &_tend,&tz ); + gettimeofday(&_tend, &tz); } double tval(void) { @@ -111,7 +111,7 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm ); * 1. create object * 2. fill object with standard values or with the GUI settings if given */ -void cloth_init ( ClothModifierData *clmd ) +void cloth_init(ClothModifierData *clmd ) { /* Initialize our new data structure to reasonable values. */ clmd->sim_parms->gravity[0] = 0.0; @@ -605,7 +605,7 @@ void cloth_free_modifier(ClothModifierData *clmd ) } /* frees all */ -void cloth_free_modifier_extern ( ClothModifierData *clmd ) +void cloth_free_modifier_extern(ClothModifierData *clmd ) { Cloth *cloth = NULL; if (G.rt > 0) @@ -728,7 +728,7 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm ) clothObj = clmd->clothObject; - numverts = dm->getNumVerts ( dm ); + numverts = dm->getNumVerts (dm); verts = clothObj->verts; @@ -746,7 +746,7 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm ) // ABS ( clmd->sim_parms->maxgoal - clmd->sim_parms->mingoal ); */ - verts->goal = ( float ) pow ( verts->goal , 4.0f ); + verts->goal = powf(verts->goal, 4.0f); if ( verts->goal >=SOFTGOALSNAP ) { verts->flags |= CLOTH_VERT_FLAG_PINNED; } @@ -781,7 +781,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d MVert *mvert = NULL; ClothVertex *verts = NULL; float (*shapekey_rest)[3]= NULL; - float tnull[3] = {0,0,0}; + float tnull[3] = {0, 0, 0}; Cloth *cloth = NULL; float maxdist = 0; @@ -818,20 +818,20 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d if ( clmd->sim_parms->shapekey_rest ) shapekey_rest = dm->getVertDataArray ( dm, CD_CLOTH_ORCO ); - mvert = dm->getVertArray ( dm ); + mvert = dm->getVertArray (dm); verts = clmd->clothObject->verts; // set initial values for ( i = 0; i < dm->getNumVerts(dm); i++, verts++ ) { if (first) { - copy_v3_v3( verts->x, mvert[i].co ); + copy_v3_v3(verts->x, mvert[i].co); - mul_m4_v3( ob->obmat, verts->x ); + mul_m4_v3(ob->obmat, verts->x); if ( shapekey_rest ) { verts->xrest= shapekey_rest[i]; - mul_m4_v3( ob->obmat, verts->xrest ); + mul_m4_v3(ob->obmat, verts->xrest); } else verts->xrest = verts->x; @@ -851,7 +851,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d copy_v3_v3 ( verts->xconst, verts->x ); copy_v3_v3 ( verts->txold, verts->x ); copy_v3_v3 ( verts->tx, verts->x ); - mul_v3_fl( verts->v, 0.0f ); + mul_v3_fl(verts->v, 0.0f); verts->impulse_count = 0; copy_v3_v3 ( verts->impulse, tnull ); @@ -895,9 +895,9 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm ) { - unsigned int numverts = dm->getNumVerts ( dm ); - unsigned int numfaces = dm->getNumTessFaces ( dm ); - MFace *mface = dm->getTessFaceArray( dm ); + unsigned int numverts = dm->getNumVerts (dm); + unsigned int numfaces = dm->getNumTessFaces (dm); + MFace *mface = dm->getTessFaceArray(dm); unsigned int i = 0; /* Allocate our vertices. */ @@ -936,7 +936,7 @@ static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm ) // be careful: implicit solver has to be resettet when using this one! // --> only for implicit handling of this spring! -int cloth_add_spring ( ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type) +int cloth_add_spring(ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type) { Cloth *cloth = clmd->clothObject; ClothSpring *spring = NULL; @@ -984,7 +984,7 @@ static void cloth_free_errorsprings(Cloth *cloth, EdgeHash *UNUSED(edgehash), Li if (edgelist) { for ( i = 0; i < cloth->numverts; i++ ) { - BLI_linklist_free ( edgelist[i],NULL ); + BLI_linklist_free ( edgelist[i], NULL ); } MEM_freeN ( edgelist ); @@ -1000,11 +1000,11 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) ClothSpring *spring = NULL, *tspring = NULL, *tspring2 = NULL; unsigned int struct_springs = 0, shear_springs=0, bend_springs = 0; unsigned int i = 0; - unsigned int numverts = (unsigned int)dm->getNumVerts ( dm ); - unsigned int numedges = (unsigned int)dm->getNumEdges ( dm ); - unsigned int numfaces = (unsigned int)dm->getNumTessFaces ( dm ); - MEdge *medge = dm->getEdgeArray ( dm ); - MFace *mface = dm->getTessFaceArray ( dm ); + unsigned int numverts = (unsigned int)dm->getNumVerts (dm); + unsigned int numedges = (unsigned int)dm->getNumEdges (dm); + unsigned int numfaces = (unsigned int)dm->getNumTessFaces (dm); + MEdge *medge = dm->getEdgeArray (dm); + MFace *mface = dm->getTessFaceArray (dm); int index2 = 0; // our second vertex index LinkNode **edgelist = NULL; EdgeHash *edgehash = NULL; @@ -1141,7 +1141,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) spring->restlen = len_v3v3(cloth->verts[spring->kl].xrest, cloth->verts[spring->ij].xrest); spring->type = CLOTH_SPRING_TYPE_BENDING; spring->stiffness = (cloth->verts[spring->kl].bend_stiff + cloth->verts[spring->ij].bend_stiff) / 2.0f; - BLI_edgehash_insert ( edgehash, spring->ij, spring->kl, NULL ); + BLI_edgehash_insert(edgehash, spring->ij, spring->kl, NULL); bend_springs++; BLI_linklist_prepend ( &cloth->springs, spring ); @@ -1190,14 +1190,14 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) /* insert other near springs in edgehash AFTER bending springs are calculated (for selfcolls) */ for (i = 0; i < numedges; i++) { /* struct springs */ - BLI_edgehash_insert ( edgehash, MIN2(medge[i].v1, medge[i].v2), MAX2(medge[i].v2, medge[i].v1), NULL ); + BLI_edgehash_insert(edgehash, MIN2(medge[i].v1, medge[i].v2), MAX2(medge[i].v2, medge[i].v1), NULL); } for (i = 0; i < numfaces; i++) { /* edge springs */ if (mface[i].v4) { - BLI_edgehash_insert ( edgehash, MIN2(mface[i].v1, mface[i].v3), MAX2(mface[i].v3, mface[i].v1), NULL ); + BLI_edgehash_insert(edgehash, MIN2(mface[i].v1, mface[i].v3), MAX2(mface[i].v3, mface[i].v1), NULL); - BLI_edgehash_insert ( edgehash, MIN2(mface[i].v2, mface[i].v4), MAX2(mface[i].v2, mface[i].v4), NULL ); + BLI_edgehash_insert(edgehash, MIN2(mface[i].v2, mface[i].v4), MAX2(mface[i].v2, mface[i].v4), NULL); } } @@ -1206,7 +1206,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) if ( edgelist ) { for ( i = 0; i < numverts; i++ ) { - BLI_linklist_free ( edgelist[i],NULL ); + BLI_linklist_free ( edgelist[i], NULL ); } MEM_freeN ( edgelist ); @@ -1214,8 +1214,8 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) cloth->edgehash = edgehash; - if (G.rt>0) - printf("avg_len: %f\n",clmd->sim_parms->avg_spring_len); + if (G.rt > 0) + printf("avg_len: %f\n", clmd->sim_parms->avg_spring_len); return 1; diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index 264a251c317..609b2d3496c 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -81,10 +81,10 @@ void collision_move_object(CollisionModifierData *collmd, float step, float prev unsigned int i = 0; for ( i = 0; i < collmd->numverts; i++ ) { - sub_v3_v3v3 ( tv, collmd->xnew[i].co, collmd->x[i].co ); - VECADDS ( collmd->current_x[i].co, collmd->x[i].co, tv, prevstep ); - VECADDS ( collmd->current_xnew[i].co, collmd->x[i].co, tv, step ); - sub_v3_v3v3 ( collmd->current_v[i].co, collmd->current_xnew[i].co, collmd->current_x[i].co ); + sub_v3_v3v3(tv, collmd->xnew[i].co, collmd->x[i].co); + VECADDS(collmd->current_x[i].co, collmd->x[i].co, tv, prevstep); + VECADDS(collmd->current_xnew[i].co, collmd->x[i].co, tv, step); + sub_v3_v3v3(collmd->current_v[i].co, collmd->current_xnew[i].co, collmd->current_x[i].co); } bvhtree_update_from_mvert ( collmd->bvhtree, collmd->mfaces, collmd->numfaces, collmd->current_x, collmd->current_xnew, collmd->numverts, 1 ); @@ -116,7 +116,7 @@ BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert return tree; } -void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, MVert *xnew, int UNUSED(numverts), int moving ) +void bvhtree_update_from_mvert(BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, MVert *xnew, int UNUSED(numverts), int moving ) { int i; MFace *mfaces = faces; @@ -168,7 +168,7 @@ Collision modifier code end * copied from SOLVE_CUBIC.C --> GSL */ -#define mySWAP(a,b) do { double tmp = b ; b = a ; a = tmp ; } while (0) +#define mySWAP(a, b) do { double tmp = b ; b = a ; a = tmp ; } while (0) #if 0 /* UNUSED */ static int gsl_poly_solve_cubic (double a, double b, double c, @@ -445,7 +445,7 @@ static int cloth_get_collision_time ( double a[3], double b[3], double c[3], dou static void collision_compute_barycentric ( float pv[3], float p1[3], float p2[3], float p3[3], float *w1, float *w2, float *w3 ) { double tempV1[3], tempV2[3], tempV4[3]; - double a,b,c,d,e,f; + double a, b, c, d, e, f; VECSUB ( tempV1, p1, p3 ); VECSUB ( tempV2, p2, p3 ); @@ -521,10 +521,10 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM collision_interpolateOnTriangle ( v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, u1, u2, u3 ); - sub_v3_v3v3 ( relativeVelocity, v2, v1 ); + sub_v3_v3v3(relativeVelocity, v2, v1); // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal'). - magrelVel = dot_v3v3( relativeVelocity, collpair->normal ); + magrelVel = dot_v3v3(relativeVelocity, collpair->normal); // printf("magrelVel: %f\n", magrelVel); @@ -541,16 +541,16 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM // calculate tangential velocity copy_v3_v3 ( temp, collpair->normal ); - mul_v3_fl( temp, magrelVel ); - sub_v3_v3v3 ( vrel_t_pre, relativeVelocity, temp ); + mul_v3_fl(temp, magrelVel); + sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp); // Decrease in magnitude of relative tangential velocity due to coulomb friction // in original formula "magrelVel" should be the "change of relative velocity in normal direction" - magtangent = MIN2 ( clmd->coll_parms->friction * 0.01f * magrelVel, sqrtf( dot_v3v3( vrel_t_pre,vrel_t_pre ) ) ); + magtangent = MIN2(clmd->coll_parms->friction * 0.01f * magrelVel, sqrtf(dot_v3v3(vrel_t_pre, vrel_t_pre))); // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - normalize_v3( vrel_t_pre ); + normalize_v3(vrel_t_pre); impulse = magtangent / ( 1.0f + w1*w1 + w2*w2 + w3*w3 ); // 2.0 * VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse ); @@ -573,7 +573,7 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM cloth1->verts[collpair->ap3].impulse_count++; // Apply repulse impulse if distance too short - // I_r = -min(dt*kd, m(0,1d/dt - v_n)) + // I_r = -min(dt*kd, m(0, 1d/dt - v_n)) spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = clmd->coll_parms->epsilon*8.0f/9.0f + epsilon2*8.0f/9.0f - collpair->distance; @@ -839,7 +839,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli VECADDFAC(v1, cloth1->verts[collpair->ap1].tv, cloth1->verts[collpair->ap2].tv, w1); VECADDFAC(v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, w2); - sub_v3_v3v3 ( relativeVelocity, v2, v1); + sub_v3_v3v3(relativeVelocity, v2, v1); // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal'). magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); @@ -856,16 +856,16 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli // calculate tangential velocity copy_v3_v3 ( temp, collpair->normal ); - mul_v3_fl( temp, magrelVel ); - sub_v3_v3v3 ( vrel_t_pre, relativeVelocity, temp ); + mul_v3_fl(temp, magrelVel); + sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp); // Decrease in magnitude of relative tangential velocity due to coulomb friction // in original formula "magrelVel" should be the "change of relative velocity in normal direction" - magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); + magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel, sqrt ( dot_v3v3 ( vrel_t_pre, vrel_t_pre ) ) ); // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - normalize_v3( vrel_t_pre ); + normalize_v3(vrel_t_pre); impulse = magtangent; VECADDMUL ( pimpulse, vrel_t_pre, impulse); @@ -880,7 +880,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli VECADDMUL ( pimpulse, collpair->normal, impulse); // Apply repulse impulse if distance too short - // I_r = -min(dt*kd, m(0,1d/dt - v_n)) + // I_r = -min(dt*kd, m(0, 1d/dt - v_n)) spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = collpair->distance; @@ -937,7 +937,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM // Calculate relative "velocity". collision_interpolateOnTriangle ( v1, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, w1, w2, w3); - sub_v3_v3v3 ( relativeVelocity, v1, cloth1->verts[collpair->collp].tv); + sub_v3_v3v3(relativeVelocity, v1, cloth1->verts[collpair->collp].tv); // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal'). magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); @@ -952,16 +952,16 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM // calculate tangential velocity copy_v3_v3 ( temp, collpair->normal ); - mul_v3_fl( temp, magrelVel ); - sub_v3_v3v3 ( vrel_t_pre, relativeVelocity, temp ); + mul_v3_fl(temp, magrelVel); + sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp); // Decrease in magnitude of relative tangential velocity due to coulomb friction // in original formula "magrelVel" should be the "change of relative velocity in normal direction" - magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); + magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel, sqrt ( dot_v3v3 ( vrel_t_pre, vrel_t_pre ) ) ); // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - normalize_v3( vrel_t_pre ); + normalize_v3(vrel_t_pre); impulse = magtangent; // 2.0 * VECADDMUL ( cloth1->verts[collpair->collp].impulse, vrel_t_pre, impulse); @@ -976,7 +976,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM cloth1->verts[collpair->collp].impulse_count++; // Apply repulse impulse if distance too short - // I_r = -min(dt*kd, m(0,1d/dt - v_n)) + // I_r = -min(dt*kd, m(0, 1d/dt - v_n)) spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = -collpair->distance; @@ -1001,7 +1001,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM // Calculate relative "velocity". collision_interpolateOnTriangle ( v1, cloth1->verts[collpair->ap1].tv, cloth1->verts[collpair->ap2].tv, cloth1->verts[collpair->ap3].tv, w1, w2, w3 ); - sub_v3_v3v3 ( relativeVelocity, collmd->current_v[collpair->collp].co, v1); + sub_v3_v3v3(relativeVelocity, collmd->current_v[collpair->collp].co, v1); // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal'). magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); @@ -1016,16 +1016,16 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM // calculate tangential velocity copy_v3_v3 ( temp, collpair->normal ); - mul_v3_fl( temp, magrelVel ); - sub_v3_v3v3 ( vrel_t_pre, relativeVelocity, temp ); + mul_v3_fl(temp, magrelVel); + sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp); // Decrease in magnitude of relative tangential velocity due to coulomb friction // in original formula "magrelVel" should be the "change of relative velocity in normal direction" - magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); + magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel, sqrt ( dot_v3v3 ( vrel_t_pre, vrel_t_pre ) ) ); // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - normalize_v3( vrel_t_pre ); + normalize_v3(vrel_t_pre); impulse = magtangent; // 2.0 * VECADDMUL ( pimpulse, vrel_t_pre, impulse); @@ -1039,7 +1039,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM VECADDMUL ( pimpulse, collpair->normal, impulse); // Apply repulse impulse if distance too short - // I_r = -min(dt*kd, m(0,1d/dt - v_n)) + // I_r = -min(dt*kd, m(0, 1d/dt - v_n)) spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = -collpair->distance; @@ -1461,14 +1461,14 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, #ifdef USE_BULLET // calc distance + normal distance = plNearestPoints ( - verts1[collpair->ap1].txold, verts1[collpair->ap2].txold, verts1[collpair->ap3].txold, collmd->current_x[collpair->bp1].co, collmd->current_x[collpair->bp2].co, collmd->current_x[collpair->bp3].co, collpair->pa,collpair->pb,collpair->vector ); + verts1[collpair->ap1].txold, verts1[collpair->ap2].txold, verts1[collpair->ap3].txold, collmd->current_x[collpair->bp1].co, collmd->current_x[collpair->bp2].co, collmd->current_x[collpair->bp3].co, collpair->pa, collpair->pb, collpair->vector ); #else // just be sure that we don't add anything distance = 2.0 * (double)( epsilon1 + epsilon2 + ALMOST_ZERO ); #endif - if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) ) { - normalize_v3_v3( collpair->normal, collpair->vector ); + if (distance <= (epsilon1 + epsilon2 + ALMOST_ZERO)) { + normalize_v3_v3(collpair->normal, collpair->vector); collpair->distance = distance; collpair->flag = 0; @@ -1500,7 +1500,7 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, collision_interpolateOnTriangle ( v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, u1, u2, u3 ); - sub_v3_v3v3 ( relativeVelocity, v2, v1 ); + sub_v3_v3v3(relativeVelocity, v2, v1); if (sqrt(dot_v3v3(relativeVelocity, relativeVelocity)) >= distance) { @@ -1547,7 +1547,7 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo collision_interpolateOnTriangle ( v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, u1, u2, u3 ); - sub_v3_v3v3 ( relativeVelocity, v2, v1 ); + sub_v3_v3v3(relativeVelocity, v2, v1); // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal'). magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); @@ -1568,17 +1568,17 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo // calculate tangential velocity copy_v3_v3 ( temp, collpair->normal ); - mul_v3_fl( temp, magrelVel ); - sub_v3_v3v3 ( vrel_t_pre, relativeVelocity, temp ); + mul_v3_fl(temp, magrelVel); + sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp); // Decrease in magnitude of relative tangential velocity due to coulomb friction // in original formula "magrelVel" should be the "change of relative velocity in normal direction" - magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); + magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel, sqrt ( dot_v3v3 ( vrel_t_pre, vrel_t_pre ) ) ); // Apply friction impulse. if ( magtangent > ALMOST_ZERO ) { - normalize_v3( vrel_t_pre ); + normalize_v3(vrel_t_pre); impulse = 2.0 * magtangent / ( 1.0 + w1*w1 + w2*w2 + w3*w3 ); VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse ); @@ -1601,7 +1601,7 @@ static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionMo cloth1->verts[collpair->ap3].impulse_count++; // Apply repulse impulse if distance too short - // I_r = -min(dt*kd, m(0,1d/dt - v_n)) + // I_r = -min(dt*kd, m(0, 1d/dt - v_n)) /* d = clmd->coll_parms->epsilon*8.0/9.0 + epsilon2*8.0/9.0 - collpair->distance; if ( ( magrelVel < 0.1*d*clmd->sim_parms->stepsPerFrame ) && ( d > ALMOST_ZERO ) ) @@ -1635,7 +1635,7 @@ static float projectPointOntoLine(float *p, float *a, float *b) return dot_v3v3(pa, ba) / dot_v3v3(ba, ba); } -static void calculateEENormal(float *np1, float *np2, float *np3, float *np4,float *out_normal) +static void calculateEENormal(float *np1, float *np2, float *np3, float *np4, float *out_normal) { float line1[3], line2[3]; float length; @@ -1961,14 +1961,14 @@ static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModi // if ( !cloth_are_edges_adjacent ( clmd, collmd, &edgecollpair ) ) { // always put coll points in p21/p22 - sub_v3_v3v3 ( x1, verts1[edgecollpair.p12].txold, verts1[edgecollpair.p11].txold ); - sub_v3_v3v3 ( v1, verts1[edgecollpair.p12].tv, verts1[edgecollpair.p11].tv ); + sub_v3_v3v3(x1, verts1[edgecollpair.p12].txold, verts1[edgecollpair.p11].txold); + sub_v3_v3v3(v1, verts1[edgecollpair.p12].tv, verts1[edgecollpair.p11].tv); - sub_v3_v3v3 ( x2, verts2[edgecollpair.p21].co, verts1[edgecollpair.p11].txold ); - sub_v3_v3v3 ( v2, velocity2[edgecollpair.p21].co, verts1[edgecollpair.p11].tv ); + sub_v3_v3v3(x2, verts2[edgecollpair.p21].co, verts1[edgecollpair.p11].txold); + sub_v3_v3v3(v2, velocity2[edgecollpair.p21].co, verts1[edgecollpair.p11].tv); - sub_v3_v3v3 ( x3, verts2[edgecollpair.p22].co, verts1[edgecollpair.p11].txold ); - sub_v3_v3v3 ( v3, velocity2[edgecollpair.p22].co, verts1[edgecollpair.p11].tv ); + sub_v3_v3v3(x3, verts2[edgecollpair.p22].co, verts1[edgecollpair.p11].txold); + sub_v3_v3v3(v3, velocity2[edgecollpair.p22].co, verts1[edgecollpair.p11].tv); numsolutions = cloth_get_collision_time ( x1, v1, x2, v2, x3, v3, solution ); @@ -1987,7 +1987,7 @@ static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModi // printf("sol %d: %lf\n", k, solution[k]); if ( ( solution[k] >= ALMOST_ZERO ) && ( solution[k] <= 1.0 ) && ( solution[k] > ALMOST_ZERO)) { - float a,b; + float a, b; float out_normal[3]; float distance; float impulse = 0; @@ -2260,11 +2260,11 @@ static void cloth_bvh_objcollisions_nearcheck ( ClothModifierData * clmd, Collis static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, CollisionModifierData *collmd, CollPair *collisions, CollPair *collisions_index) { Cloth *cloth = clmd->clothObject; - int i=0, j = 0, /*numfaces = 0,*/ numverts = 0; + int i=0, j = 0, /*numfaces = 0, */ numverts = 0; ClothVertex *verts = NULL; int ret = 0; int result = 0; - float tnull[3] = {0,0,0}; + float tnull[3] = {0, 0, 0}; /*numfaces = clmd->clothObject->numfaces;*/ /*UNUSED*/ numverts = clmd->clothObject->numverts; @@ -2306,7 +2306,7 @@ static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, Collision } // cloth - object collisions -int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt ) +int cloth_bvh_objcollision(Object *ob, ClothModifierData * clmd, float step, float dt ) { Cloth *cloth= clmd->clothObject; BVHTree *cloth_bvh= cloth->bvhtree; @@ -2343,8 +2343,8 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl ret2 = 0; - collisions = MEM_callocN(sizeof(CollPair *) *numcollobj , "CollPair"); - collisions_index = MEM_callocN(sizeof(CollPair *) *numcollobj , "CollPair"); + collisions = MEM_callocN(sizeof(CollPair *) *numcollobj, "CollPair"); + collisions_index = MEM_callocN(sizeof(CollPair *) *numcollobj, "CollPair"); // check all collision objects for (i = 0; i < numcollobj; i++) { @@ -2444,7 +2444,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl } } - sub_v3_v3v3 ( temp, verts[i].tx, verts[j].tx ); + sub_v3_v3v3(temp, verts[i].tx, verts[j].tx); if ( ( ABS ( temp[0] ) > mindistance ) || ( ABS ( temp[1] ) > mindistance ) || ( ABS ( temp[2] ) > mindistance ) ) continue; @@ -2453,24 +2453,24 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl continue; } - length = normalize_v3( temp ); + length = normalize_v3(temp ); if ( length < mindistance ) { float correction = mindistance - length; if ( cloth->verts [i].flags & CLOTH_VERT_FLAG_PINNED ) { - mul_v3_fl( temp, -correction ); + mul_v3_fl(temp, -correction); VECADD ( verts[j].tx, verts[j].tx, temp ); } else if ( cloth->verts [j].flags & CLOTH_VERT_FLAG_PINNED ) { - mul_v3_fl( temp, correction ); + mul_v3_fl(temp, correction); VECADD ( verts[i].tx, verts[i].tx, temp ); } else { - mul_v3_fl( temp, correction * -0.5 ); + mul_v3_fl(temp, correction * -0.5); VECADD ( verts[j].tx, verts[j].tx, temp ); - sub_v3_v3v3 ( verts[i].tx, verts[i].tx, temp ); + sub_v3_v3v3(verts[i].tx, verts[i].tx, temp); } ret = 1; ret2 += ret; @@ -2493,7 +2493,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl if ( ret2 ) { for ( i = 0; i < cloth->numverts; i++ ) { if ( ! ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) ) { - sub_v3_v3v3 ( verts[i].tv, verts[i].tx, verts[i].txold ); + sub_v3_v3v3(verts[i].tv, verts[i].tx, verts[i].txold); } } } diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index 6dc1b2a4b00..2955e20c9e2 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -318,8 +318,8 @@ void curvemap_sethandle(CurveMap *cuma, int type) /* reduced copy of garbled calchandleNurb() code in curve.c */ static void calchandle_curvemap(BezTriple *bezt, BezTriple *prev, BezTriple *next, int UNUSED(mode)) { - float *p1,*p2,*p3,pt[3]; - float len,len_a, len_b; + float *p1, *p2, *p3, pt[3]; + float len, len_a, len_b; float dvec_a[2], dvec_b[2]; if (bezt->h1==0 && bezt->h2==0) { @@ -1014,7 +1014,7 @@ void scopes_update(Scopes *scopes, ImBuf *ibuf, int use_color_management) } } else { - rgb_to_ycc(rgb[0],rgb[1],rgb[2],&ycc[0],&ycc[1],&ycc[2], ycc_mode); + rgb_to_ycc(rgb[0], rgb[1], rgb[2], &ycc[0], &ycc[1], &ycc[2], ycc_mode); for (c=0; c<3; c++) { ycc[c] *=INV_255; if (ycc[c] < scopes->minmax[c][0]) scopes->minmax[c][0] = ycc[c]; diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 82a908eaf57..424ded0397e 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -104,7 +104,7 @@ /* -------------- Naming -------------- */ /* Find the first available, non-duplicate name for a given constraint */ -void unique_constraint_name (bConstraint *con, ListBase *list) +void unique_constraint_name(bConstraint *con, ListBase *list) { BLI_uniquename(list, con, "Const", '.', offsetof(bConstraint, name), sizeof(con->name)); } @@ -177,7 +177,7 @@ bConstraintOb *constraints_make_evalob (Scene *scene, Object *ob, void *subdata, } /* cleanup after constraint evaluation */ -void constraints_clear_evalob (bConstraintOb *cob) +void constraints_clear_evalob(bConstraintOb *cob) { float delta[4][4], imat[4][4]; @@ -272,7 +272,7 @@ static void constraint_pchan_diff_mat(bPoseChannel *pchan, float diff_mat[4][4]) * of a matrix from one space to another for constraint evaluation. * For now, this is only implemented for Objects and PoseChannels. */ -void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4], short from, short to) +void constraint_mat_convertspace(Object *ob, bPoseChannel *pchan, float mat[][4], short from, short to) { float diff_mat[4][4]; float imat[4][4]; @@ -1333,7 +1333,7 @@ static void followpath_evaluate (bConstraint *con, bConstraintOb *cob, ListBase if ((data->followflag & FOLLOWPATH_RADIUS)==0) { /* XXX - assume that scale correction means that radius will have some scale error in it - Campbell */ float obsize[3]; - mat4_to_size( obsize,cob->matrix); + mat4_to_size(obsize, cob->matrix); if (obsize[0]) mul_v3_fl(cob->matrix[0], size[0] / obsize[0]); if (obsize[1]) @@ -1475,8 +1475,8 @@ static void sizelimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * bSizeLimitConstraint *data = con->data; float obsize[3], size[3]; - mat4_to_size( size,cob->matrix); - mat4_to_size( obsize,cob->matrix); + mat4_to_size(size, cob->matrix); + mat4_to_size(obsize, cob->matrix); if (data->flag & LIMIT_XMIN) { if (size[0] < data->xmin) @@ -2308,7 +2308,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * bConstraintTarget *ct= targets->first; if (VALID_CONS_TARGET(ct)) { - float vec[3],vec2[3]; + float vec[3], vec2[3]; float totmat[3][3]; float tmpmat[3][3]; float invmat[3][3]; @@ -2542,9 +2542,9 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * copy_m4_m4(tmat, cob->matrix); - mdet = determinant_m3( totmat[0][0],totmat[0][1],totmat[0][2], - totmat[1][0],totmat[1][1],totmat[1][2], - totmat[2][0],totmat[2][1],totmat[2][2]); + mdet = determinant_m3(totmat[0][0], totmat[0][1], totmat[0][2], + totmat[1][0], totmat[1][1], totmat[1][2], + totmat[2][0], totmat[2][1], totmat[2][2]); if (mdet==0) { unit_m3(totmat); } @@ -3311,7 +3311,7 @@ static void transform_evaluate (bConstraint *con, bConstraintOb *cob, ListBase * /* obtain target effect */ switch (data->from) { case 2: /* scale */ - mat4_to_size( dvec,ct->matrix); + mat4_to_size(dvec, ct->matrix); break; case 1: /* rotation (convert to degrees first) */ mat4_to_eulO(dvec, cob->rotOrder, ct->matrix); @@ -3602,8 +3602,8 @@ static void damptrack_flush_tars (bConstraint *con, ListBase *list, short nocopy /* array of direction vectors for the tracking flags */ static const float track_dir_vecs[6][3] = { - {+1,0,0}, {0,+1,0}, {0,0,+1}, /* TRACK_X, TRACK_Y, TRACK_Z */ - {-1,0,0}, {0,-1,0}, {0,0,-1} /* TRACK_NX, TRACK_NY, TRACK_NZ */ + {+1, 0, 0}, {0, +1, 0}, {0, 0, +1}, /* TRACK_X, TRACK_Y, TRACK_Z */ + {-1, 0, 0}, {0, -1, 0}, {0, 0, -1} /* TRACK_NX, TRACK_NY, TRACK_NZ */ }; static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) @@ -4012,8 +4012,8 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase add_v2_v2v2(pos, marker->pos, track->offset); - camera_params_init(¶ms); - camera_params_from_object(¶ms, camob); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, camob); if (params.is_ortho) { vec[0] = params.ortho_scale * (pos[0] - 0.5f + params.shiftx); @@ -4321,7 +4321,7 @@ bConstraintTypeInfo *constraint_get_typeinfo (bConstraint *con) /* Free data of a specific constraint if it has any info. * be sure to run BIK_clear_data() when freeing an IK constraint, * unless DAG_scene_sort is called. */ -void free_constraint_data (bConstraint *con) +void free_constraint_data(bConstraint *con) { if (con->data) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); @@ -4336,7 +4336,7 @@ void free_constraint_data (bConstraint *con) } /* Free all constraints from a constraint-stack */ -void free_constraints (ListBase *list) +void free_constraints(ListBase *list) { bConstraint *con; @@ -4350,7 +4350,7 @@ void free_constraints (ListBase *list) /* Remove the specified constraint from the given constraint stack */ -int remove_constraint (ListBase *list, bConstraint *con) +int remove_constraint(ListBase *list, bConstraint *con) { if (con) { free_constraint_data(con); @@ -4362,7 +4362,7 @@ int remove_constraint (ListBase *list, bConstraint *con) } /* Remove all the constraints of the specified type from the given constraint stack */ -void remove_constraints_type (ListBase *list, short type, short last_only) +void remove_constraints_type(ListBase *list, short type, short last_only) { bConstraint *con, *conp; @@ -4488,7 +4488,7 @@ bConstraint *add_ob_constraint(Object *ob, const char *name, short type) /* ......... */ /* Reassign links that constraints have to other data (called during file loading?) */ -void relink_constraints (ListBase *conlist) +void relink_constraints(ListBase *conlist) { bConstraint *con; bConstraintTarget *ct; @@ -4518,7 +4518,7 @@ void relink_constraints (ListBase *conlist) } /* Run the given callback on all ID-blocks in list of constraints */ -void id_loop_constraints (ListBase *conlist, ConstraintIDFunc func, void *userdata) +void id_loop_constraints(ListBase *conlist, ConstraintIDFunc func, void *userdata) { bConstraint *con; @@ -4542,7 +4542,7 @@ static void con_extern_cb(bConstraint *UNUSED(con), ID **idpoin, void *UNUSED(us } /* duplicate all of the constraints in a constraint stack */ -void copy_constraints (ListBase *dst, const ListBase *src, int do_extern) +void copy_constraints(ListBase *dst, const ListBase *src, int do_extern) { bConstraint *con, *srccon; @@ -4596,7 +4596,7 @@ bConstraint *constraints_get_active (ListBase *list) } /* Set the given constraint as the active one (clearing all the others) */ -void constraints_set_active (ListBase *list, bConstraint *con) +void constraints_set_active(ListBase *list, bConstraint *con) { bConstraint *c; @@ -4613,7 +4613,7 @@ void constraints_set_active (ListBase *list, bConstraint *con) /* -------- Constraints and Proxies ------- */ /* Rescue all constraints tagged as being CONSTRAINT_PROXY_LOCAL (i.e. added to bone that's proxy-synced in this file) */ -void extract_proxylocal_constraints (ListBase *dst, ListBase *src) +void extract_proxylocal_constraints(ListBase *dst, ListBase *src) { bConstraint *con, *next; @@ -4630,7 +4630,7 @@ void extract_proxylocal_constraints (ListBase *dst, ListBase *src) } /* Returns if the owner of the constraint is proxy-protected */ -short proxylocked_constraints_owner (Object *ob, bPoseChannel *pchan) +short proxylocked_constraints_owner(Object *ob, bPoseChannel *pchan) { /* Currently, constraints can only be on object or bone level */ if (ob && ob->proxy) { @@ -4659,7 +4659,7 @@ short proxylocked_constraints_owner (Object *ob, bPoseChannel *pchan) * None of the actual calculations of the matrices should be done here! Also, this function is * not to be used by any new constraints, particularly any that have multiple targets. */ -void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, short ownertype, void *ownerdata, float mat[][4], float ctime) +void get_constraint_target_matrix(struct Scene *scene, bConstraint *con, int n, short ownertype, void *ownerdata, float mat[][4], float ctime) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; @@ -4728,7 +4728,7 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n, } /* Get the list of targets required for solving a constraint */ -void get_constraint_targets_for_solving (bConstraint *con, bConstraintOb *cob, ListBase *targets, float ctime) +void get_constraint_targets_for_solving(bConstraint *con, bConstraintOb *cob, ListBase *targets, float ctime) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); @@ -4763,7 +4763,7 @@ void get_constraint_targets_for_solving (bConstraint *con, bConstraintOb *cob, L * constraints_make_evalob and constraints_clear_evalob should be called before and * after running this function, to sort out cob */ -void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime) +void solve_constraints(ListBase *conlist, bConstraintOb *cob, float ctime) { bConstraint *con; float oldmat[4][4]; diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 7a5b4ef9b24..bd47e7cbd37 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -202,6 +202,7 @@ void CTX_store_free_list(ListBase *contexts) } /* is python initialied? */ + int CTX_py_init_get(bContext *C) { return C->data.py_init; @@ -220,237 +221,6 @@ void CTX_py_dict_set(bContext *C, void *value) C->data.py_context= value; } -/* window manager context */ - -wmWindowManager *CTX_wm_manager(const bContext *C) -{ - return C->wm.manager; -} - -wmWindow *CTX_wm_window(const bContext *C) -{ - return C->wm.window; -} - -bScreen *CTX_wm_screen(const bContext *C) -{ - return C->wm.screen; -} - -ScrArea *CTX_wm_area(const bContext *C) -{ - return C->wm.area; -} - -SpaceLink *CTX_wm_space_data(const bContext *C) -{ - return (C->wm.area)? C->wm.area->spacedata.first: NULL; -} - -ARegion *CTX_wm_region(const bContext *C) -{ - return C->wm.region; -} - -void *CTX_wm_region_data(const bContext *C) -{ - return (C->wm.region)? C->wm.region->regiondata: NULL; -} - -struct ARegion *CTX_wm_menu(const bContext *C) -{ - return C->wm.menu; -} - -struct ReportList *CTX_wm_reports(const bContext *C) -{ - if (C->wm.manager) - return &(C->wm.manager->reports); - - return NULL; -} - -View3D *CTX_wm_view3d(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D) - return C->wm.area->spacedata.first; - return NULL; -} - -RegionView3D *CTX_wm_region_view3d(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D) - if (C->wm.region) - return C->wm.region->regiondata; - return NULL; -} - -struct SpaceText *CTX_wm_space_text(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_TEXT) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceConsole *CTX_wm_space_console(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_CONSOLE) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceImage *CTX_wm_space_image(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_IMAGE) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceButs *CTX_wm_space_buts(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_BUTS) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceFile *CTX_wm_space_file(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_FILE) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceSeq *CTX_wm_space_seq(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_SEQ) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceOops *CTX_wm_space_outliner(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_OUTLINER) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceNla *CTX_wm_space_nla(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_NLA) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceTime *CTX_wm_space_time(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_TIME) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceNode *CTX_wm_space_node(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_NODE) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceLogic *CTX_wm_space_logic(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_LOGIC) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceIpo *CTX_wm_space_graph(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_IPO) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceAction *CTX_wm_space_action(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_ACTION) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceInfo *CTX_wm_space_info(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_INFO) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceUserPref *CTX_wm_space_userpref(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_USERPREF) - return C->wm.area->spacedata.first; - return NULL; -} - -struct SpaceClip *CTX_wm_space_clip(const bContext *C) -{ - if (C->wm.area && C->wm.area->spacetype==SPACE_CLIP) - return C->wm.area->spacedata.first; - return NULL; -} - -void CTX_wm_manager_set(bContext *C, wmWindowManager *wm) -{ - C->wm.manager= wm; - C->wm.window= NULL; - C->wm.screen= NULL; - C->wm.area= NULL; - C->wm.region= NULL; -} - -void CTX_wm_window_set(bContext *C, wmWindow *win) -{ - C->wm.window= win; - C->wm.screen= (win)? win->screen: NULL; - if (C->wm.screen) - C->data.scene= C->wm.screen->scene; - C->wm.area= NULL; - C->wm.region= NULL; -} - -void CTX_wm_screen_set(bContext *C, bScreen *screen) -{ - C->wm.screen= screen; - if (C->wm.screen) - C->data.scene= C->wm.screen->scene; - C->wm.area= NULL; - C->wm.region= NULL; -} - -void CTX_wm_area_set(bContext *C, ScrArea *area) -{ - C->wm.area= area; - C->wm.region= NULL; -} - -void CTX_wm_region_set(bContext *C, ARegion *region) -{ - C->wm.region= region; -} - -void CTX_wm_menu_set(bContext *C, ARegion *menu) -{ - C->wm.menu= menu; -} - -void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg) -{ - C->wm.operator_poll_msg= msg; -} - -const char *CTX_wm_operator_poll_msg_get(bContext *C) -{ - return C->wm.operator_poll_msg; -} - /* data context utility functions */ struct bContextDataResult { @@ -460,8 +230,27 @@ struct bContextDataResult { short type; /* 0: normal, 1: seq */ }; +static void *ctx_wm_python_context_get(const bContext *C, const char *member, void *fall_through) +{ +#ifdef WITH_PYTHON + bContextDataResult result; + + if (C && CTX_py_dict_get(C)) { + memset(&result, 0, sizeof(bContextDataResult)); + BPY_context_member_get((bContext*)C, member, &result); + if(result.ptr.data) + return result.ptr.data; + } +#endif + + return fall_through; +} + static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result) { + bScreen *sc; + ScrArea *sa; + ARegion *ar; int done= 0, recursion= C->data.recursion; int ret= 0; @@ -493,23 +282,23 @@ static int ctx_data_get(bContext *C, const char *member, bContextDataResult *res done= 1; } } - if (done!=1 && recursion < 2 && C->wm.region) { + if (done!=1 && recursion < 2 && (ar=CTX_wm_region(C))) { C->data.recursion= 2; - if (C->wm.region->type && C->wm.region->type->context) { - ret = C->wm.region->type->context(C, member, result); + if (ar->type && ar->type->context) { + ret = ar->type->context(C, member, result); if (ret) done= -(-ret | -done); } } - if (done!=1 && recursion < 3 && C->wm.area) { + if (done!=1 && recursion < 3 && (sa=CTX_wm_area(C))) { C->data.recursion= 3; - if (C->wm.area->type && C->wm.area->type->context) { - ret = C->wm.area->type->context(C, member, result); + if (sa->type && sa->type->context) { + ret = sa->type->context(C, member, result); if (ret) done= -(-ret | -done); } } - if (done!=1 && recursion < 4 && C->wm.screen) { - bContextDataCallback cb= C->wm.screen->context; + if (done!=1 && recursion < 4 && (sc=CTX_wm_screen(C))) { + bContextDataCallback cb= sc->context; C->data.recursion= 4; if (cb) { ret = cb(C, member, result); @@ -638,6 +427,9 @@ ListBase CTX_data_dir_get(const bContext *C) { bContextDataResult result; ListBase lb; + bScreen *sc; + ScrArea *sa; + ARegion *ar; int a; memset(&lb, 0, sizeof(lb)); @@ -648,24 +440,24 @@ ListBase CTX_data_dir_get(const bContext *C) for (entry=C->wm.store->entries.first; entry; entry=entry->next) data_dir_add(&lb, entry->name); } - if (C->wm.region && C->wm.region->type && C->wm.region->type->context) { + if ((ar=CTX_wm_region(C)) && ar->type && ar->type->context) { memset(&result, 0, sizeof(result)); - C->wm.region->type->context(C, "", &result); + ar->type->context(C, "", &result); if (result.dir) for (a=0; result.dir[a]; a++) data_dir_add(&lb, result.dir[a]); } - if (C->wm.area && C->wm.area->type && C->wm.area->type->context) { + if ((sa=CTX_wm_area(C)) && sa->type && sa->type->context) { memset(&result, 0, sizeof(result)); - C->wm.area->type->context(C, "", &result); + sa->type->context(C, "", &result); if (result.dir) for (a=0; result.dir[a]; a++) data_dir_add(&lb, result.dir[a]); } - if (C->wm.screen && C->wm.screen->context) { - bContextDataCallback cb= C->wm.screen->context; + if ((sc=CTX_wm_screen(C)) && sc->context) { + bContextDataCallback cb= sc->context; memset(&result, 0, sizeof(result)); cb(C, "", &result); @@ -745,6 +537,261 @@ short CTX_data_type_get(bContextDataResult *result) return result->type; } + + +/* window manager context */ + +wmWindowManager *CTX_wm_manager(const bContext *C) +{ + return C->wm.manager; +} + +wmWindow *CTX_wm_window(const bContext *C) +{ + return ctx_wm_python_context_get(C, "window", C->wm.window); +} + +bScreen *CTX_wm_screen(const bContext *C) +{ + return ctx_wm_python_context_get(C, "screen", C->wm.screen); +} + +ScrArea *CTX_wm_area(const bContext *C) +{ + return ctx_wm_python_context_get(C, "area", C->wm.area); +} + +SpaceLink *CTX_wm_space_data(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + return (sa)? sa->spacedata.first: NULL; +} + +ARegion *CTX_wm_region(const bContext *C) +{ + return ctx_wm_python_context_get(C, "region", C->wm.region); +} + +void *CTX_wm_region_data(const bContext *C) +{ + ARegion *ar = CTX_wm_region(C); + return (ar)? ar->regiondata: NULL; +} + +struct ARegion *CTX_wm_menu(const bContext *C) +{ + return C->wm.menu; +} + +struct ReportList *CTX_wm_reports(const bContext *C) +{ + if (C->wm.manager) + return &(C->wm.manager->reports); + + return NULL; +} + +View3D *CTX_wm_view3d(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_VIEW3D) + return sa->spacedata.first; + return NULL; +} + +RegionView3D *CTX_wm_region_view3d(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + ARegion *ar = CTX_wm_region(C); + + if (sa && sa->spacetype==SPACE_VIEW3D) + if (ar) + return ar->regiondata; + return NULL; +} + +struct SpaceText *CTX_wm_space_text(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_TEXT) + return sa->spacedata.first; + return NULL; +} + +struct SpaceConsole *CTX_wm_space_console(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_CONSOLE) + return sa->spacedata.first; + return NULL; +} + +struct SpaceImage *CTX_wm_space_image(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_IMAGE) + return sa->spacedata.first; + return NULL; +} + +struct SpaceButs *CTX_wm_space_buts(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_BUTS) + return sa->spacedata.first; + return NULL; +} + +struct SpaceFile *CTX_wm_space_file(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_FILE) + return sa->spacedata.first; + return NULL; +} + +struct SpaceSeq *CTX_wm_space_seq(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_SEQ) + return sa->spacedata.first; + return NULL; +} + +struct SpaceOops *CTX_wm_space_outliner(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_OUTLINER) + return sa->spacedata.first; + return NULL; +} + +struct SpaceNla *CTX_wm_space_nla(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_NLA) + return sa->spacedata.first; + return NULL; +} + +struct SpaceTime *CTX_wm_space_time(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_TIME) + return sa->spacedata.first; + return NULL; +} + +struct SpaceNode *CTX_wm_space_node(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_NODE) + return sa->spacedata.first; + return NULL; +} + +struct SpaceLogic *CTX_wm_space_logic(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_LOGIC) + return sa->spacedata.first; + return NULL; +} + +struct SpaceIpo *CTX_wm_space_graph(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_IPO) + return sa->spacedata.first; + return NULL; +} + +struct SpaceAction *CTX_wm_space_action(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_ACTION) + return sa->spacedata.first; + return NULL; +} + +struct SpaceInfo *CTX_wm_space_info(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_INFO) + return sa->spacedata.first; + return NULL; +} + +struct SpaceUserPref *CTX_wm_space_userpref(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_USERPREF) + return sa->spacedata.first; + return NULL; +} + +struct SpaceClip *CTX_wm_space_clip(const bContext *C) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacetype==SPACE_CLIP) + return sa->spacedata.first; + return NULL; +} + +void CTX_wm_manager_set(bContext *C, wmWindowManager *wm) +{ + C->wm.manager= wm; + C->wm.window= NULL; + C->wm.screen= NULL; + C->wm.area= NULL; + C->wm.region= NULL; +} + +void CTX_wm_window_set(bContext *C, wmWindow *win) +{ + C->wm.window= win; + C->wm.screen= (win)? win->screen: NULL; + if (C->wm.screen) + C->data.scene= C->wm.screen->scene; + C->wm.area= NULL; + C->wm.region= NULL; +} + +void CTX_wm_screen_set(bContext *C, bScreen *screen) +{ + C->wm.screen= screen; + if (C->wm.screen) + C->data.scene= C->wm.screen->scene; + C->wm.area= NULL; + C->wm.region= NULL; +} + +void CTX_wm_area_set(bContext *C, ScrArea *area) +{ + C->wm.area= area; + C->wm.region= NULL; +} + +void CTX_wm_region_set(bContext *C, ARegion *region) +{ + C->wm.region= region; +} + +void CTX_wm_menu_set(bContext *C, ARegion *menu) +{ + C->wm.menu= menu; +} + +void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg) +{ + C->wm.operator_poll_msg= msg; +} + +const char *CTX_wm_operator_poll_msg_get(bContext *C) +{ + return C->wm.operator_poll_msg; +} + /* data context */ Main *CTX_data_main(const bContext *C) diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index e0cadac586b..85e3d85dfc4 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -121,7 +121,7 @@ void BKE_curve_editNurb_keyIndex_free(EditNurb *editnurb) editnurb->keyindex= NULL; } -void BKE_curve_editNurb_free (Curve *cu) +void BKE_curve_editNurb_free(Curve *cu) { if (cu->editnurb) { BKE_nurbList_free(&cu->editnurb->nurbs); @@ -169,6 +169,8 @@ Curve *BKE_curve_add(const char *name, int type) cu->smallcaps_scale= 0.75f; cu->twist_mode= CU_TWIST_MINIMUM; // XXX: this one seems to be the best one in most cases, at least for curve deform... cu->type= type; + cu->bevfac1= 0.0f; + cu->bevfac2= 1.0f; cu->bb= unit_boundbox(); @@ -194,7 +196,7 @@ Curve *BKE_curve_copy(Curve *cu) cun= copy_libblock(&cu->id); cun->nurb.first= cun->nurb.last= NULL; - BKE_nurbList_duplicate( &(cun->nurb), &(cu->nurb)); + BKE_nurbList_duplicate(&(cun->nurb), &(cu->nurb)); cun->mat= MEM_dupallocN(cu->mat); for (a=0; a<cun->totcol; a++) { @@ -480,19 +482,19 @@ Nurb *BKE_nurb_duplicate(Nurb *nu) Nurb *newnu; int len; - newnu= (Nurb*)MEM_mallocN(sizeof(Nurb),"duplicateNurb"); + newnu= (Nurb*)MEM_mallocN(sizeof(Nurb), "duplicateNurb"); if (newnu==NULL) return NULL; memcpy(newnu, nu, sizeof(Nurb)); if (nu->bezt) { newnu->bezt= - (BezTriple*)MEM_mallocN((nu->pntsu)* sizeof(BezTriple),"duplicateNurb2"); + (BezTriple*)MEM_mallocN((nu->pntsu)* sizeof(BezTriple), "duplicateNurb2"); memcpy(newnu->bezt, nu->bezt, nu->pntsu*sizeof(BezTriple)); } else { len= nu->pntsu*nu->pntsv; newnu->bp= - (BPoint*)MEM_mallocN((len)* sizeof(BPoint),"duplicateNurb3"); + (BPoint*)MEM_mallocN((len)* sizeof(BPoint), "duplicateNurb3"); memcpy(newnu->bp, nu->bp, len*sizeof(BPoint)); newnu->knotsu= newnu->knotsv= NULL; @@ -749,7 +751,7 @@ void BKE_nurb_knot_calc_v(Nurb *nu) static void basisNurb(float t, short order, short pnts, float *knots, float *basis, int *start, int *end) { float d, e; - int i, i1 = 0, i2 = 0 ,j, orderpluspnts, opp2, o2; + int i, i1 = 0, i2 = 0, j, orderpluspnts, opp2, o2; orderpluspnts= order+pnts; opp2 = orderpluspnts-1; @@ -777,7 +779,7 @@ static void basisNurb(float t, short order, short pnts, float *knots, float *bas } basis[i]= 0.0; - /* this is order 2,3,... */ + /* this is order 2, 3, ... */ for (j=2; j<=order; j++) { if (i2+j>= orderpluspnts) i2= opp2-j; @@ -870,7 +872,7 @@ void BKE_nurb_makeFaces(Nurb *nu, float *coord_array, int rowstride, int resolu, jstart= (int *)MEM_mallocN(sizeof(float)*totv, "makeNurbfaces4"); jend= (int *)MEM_mallocN(sizeof(float)*totv, "makeNurbfaces5"); - /* precalculation of basisv and jstart,jend */ + /* precalculation of basisv and jstart, jend */ if (nu->flagv & CU_NURB_CYCLIC) cycl= nu->orderv-1; else cycl= 0; v= vstart; @@ -1076,7 +1078,7 @@ void BKE_nurb_makeCurve(Nurb *nu, float *coord_array, float *tilt_array, float * /* forward differencing method for bezier curve */ void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride) { - float rt0,rt1,rt2,rt3,f; + float rt0, rt1, rt2, rt3, f; int a; f= (float)it; @@ -1281,7 +1283,7 @@ float *BKE_curve_make_orco(Scene *scene, Object *ob) } for (u=0; u<sizev; u++) { - for (v=0; v<sizeu; v++,fp+=3) { + for (v=0; v<sizeu; v++, fp+=3) { if (cu->flag & CU_UV_ORCO) { fp[0]= 2.0f*u/(sizev - 1) - 1.0f; fp[1]= 2.0f*v/(sizeu - 1) - 1.0f; @@ -1544,13 +1546,13 @@ static int cu_isectLL(const float v1[3], const float v2[3], const float v3[3], c } -static short bevelinside(BevList *bl1,BevList *bl2) +static short bevelinside(BevList *bl1, BevList *bl2) { /* is bl2 INSIDE bl1 ? with left-right method and "labda's" */ /* returns '1' if correct hole */ BevPoint *bevp, *prevbevp; - float min,max,vec[3],hvec1[3],hvec2[3],lab,mu; - int nr, links=0,rechts=0,mode; + float min, max, vec[3], hvec1[3], hvec2[3], lab, mu; + int nr, links=0, rechts=0, mode; /* take first vertex of possible hole */ @@ -1558,7 +1560,7 @@ static short bevelinside(BevList *bl1,BevList *bl2) hvec1[0]= bevp->vec[0]; hvec1[1]= bevp->vec[1]; hvec1[2]= 0.0; - copy_v3_v3(hvec2,hvec1); + copy_v3_v3(hvec2, hvec1); hvec2[0]+=1000; /* test it with all edges of potential surounding poly */ @@ -1605,7 +1607,7 @@ struct bevelsort { static int vergxcobev(const void *a1, const void *a2) { - const struct bevelsort *x1=a1,*x2=a2; + const struct bevelsort *x1=a1, *x2=a2; if ( x1->left > x2->left ) return 1; else if ( x1->left < x2->left) return -1; @@ -1837,7 +1839,7 @@ static void bevel_list_smooth(BevList *bl, int smooth_iter) while (nr--) { /* interpolate quats */ - float zaxis[3] = {0,0,1}, cross[3], q2[4]; + float zaxis[3] = {0, 0, 1}, cross[3], q2[4]; interp_qt_qtqt(q, bevp0_quat, bevp2->quat, 0.5); normalize_qt(q); @@ -1872,7 +1874,7 @@ static void make_bevel_list_3D_zup(BevList *bl) while (nr--) { /* totally simple */ bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); - vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); + vec_to_quat(bevp1->quat, bevp1->dir, 5, 1); bevp0= bevp1; bevp1= bevp2; @@ -1896,7 +1898,7 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) while (nr--) { if (nr+4 > bl->nr) { /* first time and second time, otherwise first point adjusts last */ - vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); + vec_to_quat(bevp1->quat, bevp1->dir, 5, 1); } else { float angle= angle_normalized_v3v3(bevp0->dir, bevp1->dir); @@ -1930,7 +1932,7 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) * * this is why we compare last with second last * */ - float vec_1[3]= {0,1,0}, vec_2[3]= {0,1,0}, angle, ang_fac, cross_tmp[3]; + float vec_1[3]= {0, 1, 0}, vec_2[3]= {0, 1, 0}, angle, ang_fac, cross_tmp[3]; BevPoint *bevp_first; BevPoint *bevp_last; @@ -2024,11 +2026,11 @@ static void make_bevel_list_3D_tangent(BevList *bl) /* make perpendicular, modify tan in place, is ok */ float cross_tmp[3]; - float zero[3] = {0,0,0}; + float zero[3] = {0, 0, 0}; cross_v3_v3v3(cross_tmp, bevp1->tan, bevp1->dir); normalize_v3(cross_tmp); - tri_to_quat( bevp1->quat,zero, cross_tmp, bevp1->tan); /* XXX - could be faster */ + tri_to_quat(bevp1->quat, zero, cross_tmp, bevp1->tan); /* XXX - could be faster */ /* bevp0= bevp1; */ /* UNUSED */ bevp1= bevp2; @@ -2072,7 +2074,7 @@ static void make_bevel_list_segment_3D(BevList *bl) sub_v3_v3v3(bevp1->dir, bevp1->vec, bevp2->vec); normalize_v3(bevp1->dir); - vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); + vec_to_quat(bevp1->quat, bevp1->dir, 5, 1); axis_angle_to_quat(q, bevp1->dir, bevp1->alfa); mul_qt_qtqt(bevp1->quat, q, bevp1->quat); @@ -2201,24 +2203,23 @@ void BKE_curve_bevelList_make(Object *ob) /* BevPoint must stay aligned to 4 so sizeof(BevPoint)/sizeof(float) works */ for (j=0; j<3; j++) { - BKE_curve_forward_diff_bezier( prevbezt->vec[1][j], prevbezt->vec[2][j], - bezt->vec[0][j], bezt->vec[1][j], - &(bevp->vec[j]), resolu, sizeof(BevPoint)); + BKE_curve_forward_diff_bezier(prevbezt->vec[1][j], prevbezt->vec[2][j], + bezt->vec[0][j], bezt->vec[1][j], + &(bevp->vec[j]), resolu, sizeof(BevPoint)); } /* if both arrays are NULL do nothiong */ - alfa_bezpart( prevbezt, bezt, nu, - do_tilt ? &bevp->alfa : NULL, - do_radius ? &bevp->radius : NULL, - do_weight ? &bevp->weight : NULL, - resolu, sizeof(BevPoint)); + alfa_bezpart(prevbezt, bezt, nu, + do_tilt ? &bevp->alfa : NULL, + do_radius ? &bevp->radius : NULL, + do_weight ? &bevp->weight : NULL, + resolu, sizeof(BevPoint)); if (cu->twist_mode==CU_TWIST_TANGENT) { - forward_diff_bezier_cotangent( - prevbezt->vec[1], prevbezt->vec[2], - bezt->vec[0], bezt->vec[1], - bevp->tan, resolu, sizeof(BevPoint)); + forward_diff_bezier_cotangent(prevbezt->vec[1], prevbezt->vec[2], + bezt->vec[0], bezt->vec[1], + bevp->tan, resolu, sizeof(BevPoint)); } /* indicate with handlecodes double points */ @@ -2256,11 +2257,11 @@ void BKE_curve_bevelList_make(Object *ob) else bl->poly= -1; bevp= (BevPoint *)(bl+1); - BKE_nurb_makeCurve( nu, &bevp->vec[0], - do_tilt ? &bevp->alfa : NULL, - do_radius ? &bevp->radius : NULL, - do_weight ? &bevp->weight : NULL, - resolu, sizeof(BevPoint)); + BKE_nurb_makeCurve(nu, &bevp->vec[0], + do_tilt ? &bevp->alfa : NULL, + do_radius ? &bevp->radius : NULL, + do_weight ? &bevp->weight : NULL, + resolu, sizeof(BevPoint)); } } } @@ -2299,7 +2300,7 @@ void BKE_curve_bevelList_make(Object *ob) memcpy(blnew, bl, sizeof(BevList)); blnew->nr= 0; BLI_remlink(&(cu->bev), bl); - BLI_insertlinkbefore(&(cu->bev),blnext,blnew); /* to make sure bevlijst is tuned with nurblist */ + BLI_insertlinkbefore(&(cu->bev), blnext, blnew); /* to make sure bevlijst is tuned with nurblist */ bevp0= (BevPoint *)(bl+1); bevp1= (BevPoint *)(blnew+1); nr= bl->nr; @@ -2367,7 +2368,7 @@ void BKE_curve_bevelList_make(Object *ob) bl= bl->next; } - qsort(sortdata,poly,sizeof(struct bevelsort), vergxcobev); + qsort(sortdata, poly, sizeof(struct bevelsort), vergxcobev); sd= sortdata+1; for (a=1; a<poly; a++, sd++) { @@ -2442,7 +2443,7 @@ void BKE_curve_bevelList_make(Object *ob) /* from: make_bevel_list_3D_zup, could call but avoid a second loop. * no need for tricky tilt calculation as with 3D curves */ bisect_v3_v3v3v3(bevp1->dir, bevp0->vec, bevp1->vec, bevp2->vec); - vec_to_quat( bevp1->quat,bevp1->dir, 5, 1); + vec_to_quat(bevp1->quat, bevp1->dir, 5, 1); /* done with inline make_bevel_list_3D_zup */ bevp0= bevp1; @@ -2497,7 +2498,7 @@ void BKE_curve_bevelList_make(Object *ob) /* mode: is not zero when FCurve, is 2 when forced horizontal for autohandles */ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode, int skip_align) { - float *p1,*p2,*p3, pt[3]; + float *p1, *p2, *p3, pt[3]; float dvec_a[3], dvec_b[3]; float len, len_a, len_b; const float eps= 1e-5; @@ -2545,7 +2546,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n if (len_b==0.0f) len_b=1.0f; - if (ELEM(bezt->h1,HD_AUTO,HD_AUTO_ANIM) || ELEM(bezt->h2,HD_AUTO,HD_AUTO_ANIM)) { /* auto */ + if (ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM) || ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM)) { /* auto */ float tvec[3]; tvec[0]= dvec_b[0]/len_b + dvec_a[0]/len_a; tvec[1]= dvec_b[1]/len_b + dvec_a[1]/len_a; @@ -2558,7 +2559,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n if (len_a>5.0f*len_b) len_a= 5.0f*len_b; if (len_b>5.0f*len_a) len_b= 5.0f*len_a; - if (ELEM(bezt->h1,HD_AUTO,HD_AUTO_ANIM)) { + if (ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM)) { len_a/=len; madd_v3_v3v3fl(p2-3, p2, tvec, -len_a); @@ -2584,7 +2585,7 @@ static void calchandleNurb_intern(BezTriple *bezt, BezTriple *prev, BezTriple *n } } } - if (ELEM(bezt->h2,HD_AUTO,HD_AUTO_ANIM)) { + if (ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM)) { len_b/=len; madd_v3_v3v3fl(p2+3, p2, tvec, len_b); @@ -2795,7 +2796,7 @@ void BKE_nurb_handles_autocalc(Nurb *nu, int flag) if (flag==0 || (bezt1->f1 & flag) ) { bezt1->h1= 0; /* distance too short: vectorhandle */ - if ( len_v3v3( bezt1->vec[1], bezt0->vec[1] ) < 0.0001f) { + if (len_v3v3(bezt1->vec[1], bezt0->vec[1]) < 0.0001f) { bezt1->h1= HD_VECT; leftsmall= 1; } @@ -2815,7 +2816,7 @@ void BKE_nurb_handles_autocalc(Nurb *nu, int flag) if (flag==0 || (bezt1->f3 & flag) ) { bezt1->h2= 0; /* distance too short: vectorhandle */ - if ( len_v3v3( bezt1->vec[1], bezt2->vec[1] ) < 0.0001f) { + if (len_v3v3(bezt1->vec[1], bezt2->vec[1]) < 0.0001f) { bezt1->h2= HD_VECT; rightsmall= 1; } @@ -3075,7 +3076,7 @@ float (*BKE_curve_vertexCos_get(Curve *UNUSED(cu), ListBase *lb, int *numVerts_r if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i=0; i<nu->pntsu; i++,bezt++) { + for (i=0; i<nu->pntsu; i++, bezt++) { copy_v3_v3(co, bezt->vec[0]); co+=3; copy_v3_v3(co, bezt->vec[1]); co+=3; copy_v3_v3(co, bezt->vec[2]); co+=3; @@ -3084,7 +3085,7 @@ float (*BKE_curve_vertexCos_get(Curve *UNUSED(cu), ListBase *lb, int *numVerts_r else { BPoint *bp = nu->bp; - for (i=0; i<nu->pntsu*nu->pntsv; i++,bp++) { + for (i=0; i<nu->pntsu*nu->pntsv; i++, bp++) { copy_v3_v3(co, bp->vec); co+=3; } } @@ -3103,7 +3104,7 @@ void BK_curve_vertexCos_apply(Curve *UNUSED(cu), ListBase *lb, float (*vertexCos if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i=0; i<nu->pntsu; i++,bezt++) { + for (i=0; i<nu->pntsu; i++, bezt++) { copy_v3_v3(bezt->vec[0], co); co+=3; copy_v3_v3(bezt->vec[1], co); co+=3; copy_v3_v3(bezt->vec[2], co); co+=3; @@ -3112,7 +3113,7 @@ void BK_curve_vertexCos_apply(Curve *UNUSED(cu), ListBase *lb, float (*vertexCos else { BPoint *bp = nu->bp; - for (i=0; i<nu->pntsu*nu->pntsv; i++,bp++) { + for (i=0; i<nu->pntsu*nu->pntsv; i++, bp++) { copy_v3_v3(bp->vec, co); co+=3; } } @@ -3132,7 +3133,7 @@ float (*BKE_curve_keyVertexCos_get(Curve *UNUSED(cu), ListBase *lb, float *key)) if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i=0; i<nu->pntsu; i++,bezt++) { + for (i=0; i<nu->pntsu; i++, bezt++) { copy_v3_v3(co, key); co+=3; key+=3; copy_v3_v3(co, key); co+=3; key+=3; copy_v3_v3(co, key); co+=3; key+=3; @@ -3142,7 +3143,7 @@ float (*BKE_curve_keyVertexCos_get(Curve *UNUSED(cu), ListBase *lb, float *key)) else { BPoint *bp = nu->bp; - for (i=0; i<nu->pntsu*nu->pntsv; i++,bp++) { + for (i=0; i<nu->pntsu*nu->pntsv; i++, bp++) { copy_v3_v3(co, key); co+=3; key+=3; key++; /* skip tilt */ } @@ -3161,7 +3162,7 @@ void BKE_curve_keyVertexTilts_apply(Curve *UNUSED(cu), ListBase *lb, float *key) if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i=0; i<nu->pntsu; i++,bezt++) { + for (i=0; i<nu->pntsu; i++, bezt++) { key+=3*3; bezt->alfa= *key; key+=3; @@ -3170,7 +3171,7 @@ void BKE_curve_keyVertexTilts_apply(Curve *UNUSED(cu), ListBase *lb, float *key) else { BPoint *bp = nu->bp; - for (i=0; i<nu->pntsu*nu->pntsv; i++,bp++) { + for (i=0; i<nu->pntsu*nu->pntsv; i++, bp++) { key+=3; bp->alfa= *key; key++; @@ -3179,7 +3180,7 @@ void BKE_curve_keyVertexTilts_apply(Curve *UNUSED(cu), ListBase *lb, float *key) } } -int BKE_nurb_check_valid_u( struct Nurb *nu ) +int BKE_nurb_check_valid_u(struct Nurb *nu) { if (nu==NULL) return 0; if (nu->pntsu <= 1) return 0; @@ -3194,7 +3195,7 @@ int BKE_nurb_check_valid_u( struct Nurb *nu ) } return 1; } -int BKE_nurb_check_valid_v( struct Nurb *nu) +int BKE_nurb_check_valid_v(struct Nurb *nu) { if (nu==NULL) return 0; if (nu->pntsv <= 1) return 0; @@ -3210,7 +3211,7 @@ int BKE_nurb_check_valid_v( struct Nurb *nu) return 1; } -int BKE_nurb_order_clamp_u( struct Nurb *nu ) +int BKE_nurb_order_clamp_u(struct Nurb *nu) { int change = 0; if (nu->pntsu<nu->orderu) { @@ -3218,13 +3219,13 @@ int BKE_nurb_order_clamp_u( struct Nurb *nu ) change= 1; } if (((nu->flagu & CU_NURB_CYCLIC)==0) && (nu->flagu & CU_NURB_BEZIER)) { - CLAMP(nu->orderu, 3,4); + CLAMP(nu->orderu, 3, 4); change= 1; } return change; } -int BKE_nurb_order_clamp_v( struct Nurb *nu) +int BKE_nurb_order_clamp_v(struct Nurb *nu) { int change = 0; if (nu->pntsv<nu->orderv) { @@ -3232,7 +3233,7 @@ int BKE_nurb_order_clamp_v( struct Nurb *nu) change= 1; } if (((nu->flagv & CU_NURB_CYCLIC)==0) && (nu->flagv & CU_NURB_BEZIER)) { - CLAMP(nu->orderv, 3,4); + CLAMP(nu->orderv, 3, 4); change= 1; } return change; diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index ee8e57d5a3e..e32182ed36e 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -71,7 +71,11 @@ typedef struct LayerTypeInfo { int size; /* the memory size of one element of this layer's data */ const char *structname; /* name of the struct used, for file writing */ int structnum; /* number of structs per element, for file writing */ - const char *defaultname; /* default layer name */ + + /* default layer name. + * note! when NULL this is a way to ensure there is only ever one item + * see: CustomData_layertype_is_singleton() */ + const char *defaultname; /* a function to copy count elements of this layer's data * (deep copy if appropriate) @@ -582,7 +586,7 @@ static int layerEqual_mloopcol(void *data1, void *data2) b = m1->b - m2->b; a = m1->a - m2->a; - return r*r + g*g + b*b + a*a < 0.001; + return r * r + g * g + b * b + a * a < 0.001f; } static void layerMultiply_mloopcol(void *data, float fac) @@ -638,7 +642,7 @@ static void layerInitMinMax_mloopcol(void *vmin, void *vmax) static void layerDefault_mloopcol(void *data, int count) { - MLoopCol default_mloopcol = {255,255,255,255}; + MLoopCol default_mloopcol = {255, 255, 255, 255}; MLoopCol *mlcol = (MLoopCol*)data; int i; for (i = 0; i < count; i++) @@ -986,11 +990,11 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { /* 9: CD_POLYINDEX */ {sizeof(int), "MIntProperty", 1, NULL, NULL, NULL, NULL, NULL, NULL}, /* 10: CD_PROP_FLT */ - {sizeof(MFloatProperty), "MFloatProperty",1,"Float", layerCopy_propFloat,NULL,NULL,NULL}, + {sizeof(MFloatProperty), "MFloatProperty", 1, "Float", layerCopy_propFloat, NULL, NULL, NULL}, /* 11: CD_PROP_INT */ - {sizeof(MIntProperty), "MIntProperty",1,"Int",layerCopy_propInt,NULL,NULL,NULL}, + {sizeof(MIntProperty), "MIntProperty", 1, "Int", layerCopy_propInt, NULL, NULL, NULL}, /* 12: CD_PROP_STR */ - {sizeof(MStringProperty), "MStringProperty",1,"String",layerCopy_propString,NULL,NULL,NULL}, + {sizeof(MStringProperty), "MStringProperty", 1, "String", layerCopy_propString, NULL, NULL, NULL}, /* 13: CD_ORIGSPACE */ {sizeof(OrigSpaceFace), "OrigSpaceFace", 1, "UVMap", layerCopy_origspace_face, NULL, layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face}, @@ -1026,10 +1030,9 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { /* 23: CD_CLOTH_ORCO */ {sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL}, /* 24: CD_RECAST */ - {sizeof(MRecast), "MRecast", 1,"Recast",NULL,NULL,NULL,NULL} + {sizeof(MRecast), "MRecast", 1, "Recast", NULL, NULL, NULL, NULL}, /* BMESH ONLY */ - , /* 25: CD_MPOLY */ {sizeof(MPoly), "MPoly", 1, "NGon Face", NULL, NULL, NULL, NULL, NULL}, /* 26: CD_MLOOP */ @@ -1042,7 +1045,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { {sizeof(float), "", 0, "BevelWeight", NULL, NULL, layerInterp_bweight}, /* 30: CD_CREASE */ {sizeof(float), "", 0, "SubSurfCrease", NULL, NULL, layerInterp_bweight}, - /* 31: CD_ORIGSPACE_MLOOP */ + /* 31: CD_ORIGSPACE_MLOOP */ {sizeof(OrigSpaceLoop), "OrigSpaceLoop", 1, "OS Loop", NULL, NULL, layerInterp_mloop_origspace, NULL, NULL, layerEqual_mloop_origspace, layerMultiply_mloop_origspace, layerInitMinMax_mloop_origspace, layerAdd_mloop_origspace, layerDoMinMax_mloop_origspace, layerCopyValue_mloop_origspace}, @@ -1064,12 +1067,11 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { static const char *LAYERTYPENAMES[CD_NUMTYPES] = { /* 0-4 */ "CDMVert", "CDMSticky", "CDMDeformVert", "CDMEdge", "CDMFace", /* 5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFlags", - /* 10-14 */ "CDMFloatProperty", "CDMIntProperty","CDMStringProperty", "CDOrigSpace", "CDOrco", + /* 10-14 */ "CDMFloatProperty", "CDMIntProperty", "CDMStringProperty", "CDOrigSpace", "CDOrco", /* 15-19 */ "CDMTexPoly", "CDMLoopUV", "CDMloopCol", "CDTangent", "CDMDisps", - /* 20-24 */"CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast" + /* 20-24 */"CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast", /* BMESH ONLY */ - , /* 25-29 */ "CDMPoly", "CDMLoop", "CDShapeKeyIndex", "CDShapeKey", "CDBevelWeight", /* 30-32 */ "CDSubSurfCrease", "CDOrigSpaceLoop", "CDPreviewLoopCol" /* END BMESH ONLY */ @@ -2601,6 +2603,16 @@ const char *CustomData_layertype_name(int type) return layerType_getName(type); } + +/** + * Can only ever be one of these. + */ +int CustomData_layertype_is_singleton(int type) +{ + const LayerTypeInfo *typeInfo = layerType_getInfo(type); + return typeInfo->defaultname == NULL; +} + static int CustomData_is_property_layer(int type) { if ((type == CD_PROP_FLT) || (type == CD_PROP_INT) || (type == CD_PROP_STR)) diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 3e0c947ff4a..ebf5735c1cd 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -437,11 +437,51 @@ void defgroup_unique_name(bDeformGroup *dg, Object *ob) BLI_uniquename_cb(defgroup_unique_check, &data, "Group", '.', dg->name, sizeof(dg->name)); } -BLI_INLINE int is_char_sep(const char c) +static int is_char_sep(const char c) { return ELEM4(c, '.', ' ', '-', '_'); } +/* based on BLI_split_dirfile() / os.path.splitext(), "a.b.c" -> ("a.b", ".c") */ + +void BKE_deform_split_suffix(const char string[MAX_VGROUP_NAME], char body[MAX_VGROUP_NAME], char suf[MAX_VGROUP_NAME]) +{ + size_t len = BLI_strnlen(string, MAX_VGROUP_NAME); + size_t i; + + body[0] = suf[0] = '\0'; + + for (i = len - 1; i > 1; i--) { + if (is_char_sep(string[i])) { + BLI_strncpy(body, string, i + 1); + BLI_strncpy(suf, string + i, (len + 1) - i); + return; + } + } + + BLI_strncpy(body, string, len); +} + +/* "a.b.c" -> ("a.", "b.c") */ +void BKE_deform_split_prefix(const char string[MAX_VGROUP_NAME], char pre[MAX_VGROUP_NAME], char body[MAX_VGROUP_NAME]) +{ + size_t len = BLI_strnlen(string, MAX_VGROUP_NAME); + size_t i; + + body[0] = pre[0] = '\0'; + + for (i = 1; i < len; i++) { + if (is_char_sep(string[i])) { + i++; + BLI_strncpy(pre, string, i + 1); + BLI_strncpy(body, string + i, (len + 1) - i); + return; + } + } + + BLI_strncpy(body, string, len); +} + /* finds the best possible flipped name. For renaming; check for unique names afterwards */ /* if strip_number: removes number extensions * note: don't use sizeof() for 'name' or 'from_name' */ @@ -466,7 +506,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_ /* We first check the case with a .### extension, let's find the last period */ if (isdigit(name[len - 1])) { index = strrchr(name, '.'); // last occurrence - if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever! + if (index && isdigit(index[1])) { // doesnt handle case bone.1abc2 correct..., whatever! if (strip_number == 0) { BLI_strncpy(number, index, sizeof(number)); } @@ -478,7 +518,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_ BLI_strncpy(prefix, name, sizeof(prefix)); /* first case; separator . - _ with extensions r R l L */ - if (is_char_sep(name[len - 2]) ) { + if (is_char_sep(name[len - 2])) { switch (name[len - 1]) { case 'l': prefix[len - 1] = 0; @@ -499,7 +539,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_ } } /* case; beginning with r R l L , with separator after it */ - else if (is_char_sep(name[1]) ) { + else if (is_char_sep(name[1])) { switch (name[0]) { case 'l': strcpy(replace, "r"); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 045d85242f1..75e22195c6a 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -72,6 +72,7 @@ #include "BKE_pointcache.h" #include "BKE_scene.h" #include "BKE_screen.h" +#include "BKE_tracking.h" #include "BKE_utildefines.h" #include "depsgraph_private.h" @@ -87,18 +88,18 @@ DagNodeQueue * queue_create (int slots) DagNodeQueueElem * elem; int i; - queue = MEM_mallocN(sizeof(DagNodeQueue),"DAG queue"); - queue->freenodes = MEM_mallocN(sizeof(DagNodeQueue),"DAG queue"); + queue = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue"); + queue->freenodes = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue"); queue->count = 0; queue->maxlevel = 0; queue->first = queue->last = NULL; - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem3"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem3"); elem->node = NULL; elem->next = NULL; queue->freenodes->first = queue->freenodes->last = elem; for (i = 1; i <slots;i++) { - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem4"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem4"); elem->node = NULL; elem->next = NULL; queue->freenodes->last->next = elem; @@ -159,10 +160,10 @@ void push_queue(DagNodeQueue *queue, DagNode *node) int i; if (node == NULL) { - fprintf(stderr,"pushing null node\n"); + fprintf(stderr, "pushing null node\n"); return; } - /*fprintf(stderr,"BFS push : %s %d\n",((ID *) node->ob)->name, queue->count);*/ + /*fprintf(stderr, "BFS push : %s %d\n", ((ID *) node->ob)->name, queue->count);*/ elem = queue->freenodes->first; if (elem != NULL) { @@ -174,13 +175,13 @@ void push_queue(DagNodeQueue *queue, DagNode *node) queue->freenodes->count--; } else { /* alllocating more */ - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem1"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1"); elem->node = NULL; elem->next = NULL; queue->freenodes->first = queue->freenodes->last = elem; for (i = 1; i <DAGQUEUEALLOC;i++) { - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem2"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2"); elem->node = NULL; elem->next = NULL; queue->freenodes->last->next = elem; @@ -219,13 +220,13 @@ void push_stack(DagNodeQueue *queue, DagNode *node) queue->freenodes->count--; } else { /* alllocating more */ - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem1"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1"); elem->node = NULL; elem->next = NULL; queue->freenodes->first = queue->freenodes->last = elem; for (i = 1; i <DAGQUEUEALLOC;i++) { - elem = MEM_mallocN(sizeof(DagNodeQueueElem),"DAG queue elem2"); + elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2"); elem->node = NULL; elem->next = NULL; queue->freenodes->last->next = elem; @@ -270,7 +271,7 @@ DagNode * pop_queue(DagNodeQueue *queue) return node; } else { - fprintf(stderr,"return null\n"); + fprintf(stderr, "return null\n"); return NULL; } } @@ -295,7 +296,7 @@ DagForest *dag_init(void) { DagForest *forest; /* use callocN to init all zero */ - forest = MEM_callocN(sizeof(DagForest),"DAG root"); + forest = MEM_callocN(sizeof(DagForest), "DAG root"); return forest; } @@ -376,8 +377,8 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O node = dag_get_node(dag, ob); if ((ob->data) && (mask&DAG_RL_DATA)) { - node2 = dag_get_node(dag,ob->data); - dag_add_relation(dag,node,node2,DAG_RL_DATA, "Object-Data Relation"); + node2 = dag_get_node(dag, ob->data); + dag_add_relation(dag, node, node2, DAG_RL_DATA, "Object-Data Relation"); node2->first_ancestor = ob; node2->ancestor_count += 1; } @@ -401,18 +402,18 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O for (ct= targets.first; ct; ct= ct->next) { if (ct->tar && ct->tar != ob) { - // fprintf(stderr,"armature %s target :%s\n", ob->id.name, target->id.name); + // fprintf(stderr, "armature %s target :%s\n", ob->id.name, target->id.name); node3 = dag_get_node(dag, ct->tar); if (ct->subtarget[0]) { - dag_add_relation(dag,node3,node, DAG_RL_OB_DATA|DAG_RL_DATA_DATA, cti->name); + dag_add_relation(dag, node3, node, DAG_RL_OB_DATA|DAG_RL_DATA_DATA, cti->name); if (ct->tar->type == OB_MESH) node3->customdata_mask |= CD_MASK_MDEFORMVERT; } else if (ELEM3(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO, CONSTRAINT_TYPE_SPLINEIK)) - dag_add_relation(dag,node3,node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, cti->name); + dag_add_relation(dag, node3, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, cti->name); else - dag_add_relation(dag,node3,node, DAG_RL_OB_DATA, cti->name); + dag_add_relation(dag, node3, node, DAG_RL_OB_DATA, cti->name); } } @@ -460,31 +461,31 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O } } if (ob->parent) { - node2 = dag_get_node(dag,ob->parent); + node2 = dag_get_node(dag, ob->parent); switch (ob->partype) { case PARSKEL: - dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent"); break; case PARVERT1: case PARVERT3: - dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Vertex Parent"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, "Vertex Parent"); node2->customdata_mask |= CD_MASK_ORIGINDEX; break; case PARBONE: - dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Bone Parent"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, "Bone Parent"); break; default: if (ob->parent->type==OB_LATTICE) - dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Lattice Parent"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Lattice Parent"); else if (ob->parent->type==OB_CURVE) { Curve *cu= ob->parent->data; if (cu->flag & CU_PATH) - dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Curve Parent"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, "Curve Parent"); else - dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Curve Parent"); + dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Curve Parent"); } else - dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Parent"); + dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Parent"); } /* exception case: parent is duplivert */ if (ob->type==OB_MBALL && (ob->parent->transflag & OB_DUPLIVERTS)) { @@ -533,7 +534,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if (cam->dof_ob) { node2 = dag_get_node(dag, cam->dof_ob); - dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Camera DoF"); + dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Camera DoF"); } } break; @@ -543,7 +544,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if (mom!=ob) { node2 = dag_get_node(dag, mom); - dag_add_relation(dag,node,node2,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Metaball"); // mom depends on children! + dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Metaball"); // mom depends on children! } } break; @@ -554,16 +555,16 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if (cu->bevobj) { node2 = dag_get_node(dag, cu->bevobj); - dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Bevel"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Bevel"); } if (cu->taperobj) { node2 = dag_get_node(dag, cu->taperobj); - dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Taper"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Taper"); } if (ob->type == OB_FONT) { if (cu->textoncurve) { node2 = dag_get_node(dag, cu->textoncurve); - dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Texture On Curve"); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Texture On Curve"); } } } @@ -587,7 +588,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if (!psys_check_enabled(ob, psys)) continue; - if (ELEM(part->phystype,PART_PHYS_KEYED,PART_PHYS_BOIDS)) { + if (ELEM(part->phystype, PART_PHYS_KEYED, PART_PHYS_BOIDS)) { ParticleTarget *pt = psys->targets.first; for (; pt; pt=pt->next) { @@ -677,7 +678,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, cti->name); } - dag_add_relation(dag,scenenode,node,DAG_RL_SCENE, "Scene Relation"); + dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation"); addtoroot = 0; } else if (cti->get_constraint_targets) { @@ -712,7 +713,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O } if (addtoroot == 1 ) - dag_add_relation(dag,scenenode,node,DAG_RL_SCENE, "Scene Relation"); + dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation"); } struct DagForest *build_dag(Main *bmain, Scene *sce, short mask) @@ -729,7 +730,7 @@ struct DagForest *build_dag(Main *bmain, Scene *sce, short mask) dag = sce->theDag; sce->dagisvalid=1; if ( dag) - free_forest( dag ); + free_forest(dag); else { dag = dag_init(); sce->theDag = dag; @@ -831,7 +832,7 @@ void free_forest(DagForest *Dag) } -DagNode * dag_find_node (DagForest *forest,void * fob) +DagNode * dag_find_node (DagForest *forest, void * fob) { if (forest->nodeHash) return BLI_ghash_lookup(forest->nodeHash, fob); @@ -847,7 +848,7 @@ DagNode * dag_add_node (DagForest *forest, void * fob) { DagNode *node; - node = MEM_callocN(sizeof(DagNode),"DAG node"); + node = MEM_callocN(sizeof(DagNode), "DAG node"); if (node) { node->ob = fob; node->color = DAG_WHITE; @@ -872,7 +873,7 @@ DagNode * dag_add_node (DagForest *forest, void * fob) return node; } -DagNode * dag_get_node (DagForest *forest,void * fob) +DagNode * dag_get_node (DagForest *forest, void * fob) { DagNode *node; @@ -884,7 +885,7 @@ DagNode * dag_get_node (DagForest *forest,void * fob) -DagNode * dag_get_sub_node (DagForest *forest,void * fob) +DagNode * dag_get_sub_node (DagForest *forest, void * fob) { DagNode *node; DagAdjList *mainchild, *prev=NULL; @@ -926,7 +927,7 @@ static void dag_add_parent_relation(DagForest *UNUSED(forest), DagNode *fob1, Da itA = itA->next; } /* create new relation and insert at head. MALLOC alert! */ - itA = MEM_mallocN(sizeof(DagAdjList),"DAG adj list"); + itA = MEM_mallocN(sizeof(DagAdjList), "DAG adj list"); itA->node = fob1; itA->type = rel; itA->count = 1; @@ -951,7 +952,7 @@ void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel itA = itA->next; } /* create new relation and insert at head. MALLOC alert! */ - itA = MEM_mallocN(sizeof(DagAdjList),"DAG adj list"); + itA = MEM_mallocN(sizeof(DagAdjList), "DAG adj list"); itA->node = fob2; itA->type = rel; itA->count = 1; @@ -1118,7 +1119,7 @@ void graph_bfs(void) DagAdjList *itA; int minheight; - /* fprintf(stderr,"starting BFS\n ------------\n"); */ + /* fprintf(stderr, "starting BFS\n ------------\n"); */ nqueue = queue_create(DAGQUEUEALLOC); for ( i=0; i<50; i++) pos[i] = 0; @@ -1138,7 +1139,7 @@ void graph_bfs(void) if (node->color == DAG_WHITE) { node->color = DAG_GRAY; node->BFS_dist = 1; - push_queue(nqueue,node); + push_queue(nqueue, node); while (nqueue->count) { node = pop_queue(nqueue); @@ -1149,11 +1150,11 @@ void graph_bfs(void) itA->node->color = DAG_GRAY; itA->node->BFS_dist = node->BFS_dist + 1; itA->node->k = (float) minheight; - push_queue(nqueue,itA->node); + push_queue(nqueue, itA->node); } else { - fprintf(stderr,"bfs not dag tree edge color :%i\n",itA->node->color); + fprintf(stderr, "bfs not dag tree edge color :%i\n", itA->node->color); } @@ -1169,7 +1170,7 @@ void graph_bfs(void) set_node_xy(node, node->BFS_dist*DEPSX*2, pos[node->BFS_dist]*DEPSY*2); node->color = DAG_BLACK; - // fprintf(stderr,"BFS node : %20s %i %5.0f %5.0f\n",((ID *) node->ob)->name,node->BFS_dist, node->x, node->y); + // fprintf(stderr, "BFS node : %20s %i %5.0f %5.0f\n", ((ID *) node->ob)->name, node->BFS_dist, node->x, node->y); } } queue_delete(nqueue); @@ -1190,7 +1191,7 @@ int pre_and_post_source_BFS(DagForest *dag, short mask, DagNode *source, graph_a DagNodeQueue *nqueue; DagAdjList *itA; int retval = 0; - /* fprintf(stderr,"starting BFS\n ------------\n"); */ + /* fprintf(stderr, "starting BFS\n ------------\n"); */ /* Init * dagnode.first is always the root (scene) @@ -1207,7 +1208,7 @@ int pre_and_post_source_BFS(DagForest *dag, short mask, DagNode *source, graph_a if (node->color == DAG_WHITE) { node->color = DAG_GRAY; node->BFS_dist = 1; - pre_func(node->ob,data); + pre_func(node->ob, data); while (nqueue->count) { node = pop_queue(nqueue); @@ -1217,8 +1218,8 @@ int pre_and_post_source_BFS(DagForest *dag, short mask, DagNode *source, graph_a if ((itA->node->color == DAG_WHITE) && (itA->type & mask)) { itA->node->color = DAG_GRAY; itA->node->BFS_dist = node->BFS_dist + 1; - push_queue(nqueue,itA->node); - pre_func(node->ob,data); + push_queue(nqueue, itA->node); + pre_func(node->ob, data); } else { // back or cross edge @@ -1226,10 +1227,10 @@ int pre_and_post_source_BFS(DagForest *dag, short mask, DagNode *source, graph_a } itA = itA->next; } - post_func(node->ob,data); + post_func(node->ob, data); node->color = DAG_BLACK; - // fprintf(stderr,"BFS node : %20s %i %5.0f %5.0f\n",((ID *) node->ob)->name,node->BFS_dist, node->x, node->y); + // fprintf(stderr, "BFS node : %20s %i %5.0f %5.0f\n", ((ID *) node->ob)->name, node->BFS_dist, node->x, node->y); } } queue_delete(nqueue); @@ -1251,7 +1252,7 @@ DagNodeQueue * graph_dfs(void) int maxpos=0; /* int is_cycle = 0; */ /* UNUSED */ /* - *fprintf(stderr,"starting DFS\n ------------\n"); + *fprintf(stderr, "starting DFS\n ------------\n"); */ nqueue = queue_create(DAGQUEUEALLOC); retqueue = queue_create(MainDag->numNodes); @@ -1280,7 +1281,7 @@ DagNodeQueue * graph_dfs(void) node->DFS_dist = 1; node->DFS_dvtm = time; time++; - push_stack(nqueue,node); + push_stack(nqueue, node); while (nqueue->count) { //graph_print_queue(nqueue); @@ -1299,13 +1300,13 @@ DagNodeQueue * graph_dfs(void) time++; itA->node->DFS_dist = node->DFS_dist + 1; itA->node->k = (float) minheight; - push_stack(nqueue,itA->node); + push_stack(nqueue, itA->node); skip = 1; break; } else { if (itA->node->color == DAG_GRAY) { // back edge - fprintf(stderr,"dfs back edge :%15s %15s\n",((ID *) node->ob)->name, ((ID *) itA->node->ob)->name); + fprintf(stderr, "dfs back edge :%15s %15s\n", ((ID *) node->ob)->name, ((ID *) itA->node->ob)->name); /* is_cycle = 1; */ /* UNUSED */ } else if (itA->node->color == DAG_BLACK) { @@ -1316,7 +1317,7 @@ DagNodeQueue * graph_dfs(void) if (node->DFS_dist >= itA->node->DFS_dist) itA->node->DFS_dist = node->DFS_dist + 1; - fprintf(stderr,"dfs forward or cross edge :%15s %i-%i %15s %i-%i\n", + fprintf(stderr, "dfs forward or cross edge :%15s %i-%i %15s %i-%i\n", ((ID *) node->ob)->name, node->DFS_dvtm, node->DFS_fntm, @@ -1326,7 +1327,7 @@ DagNodeQueue * graph_dfs(void) #endif } else - fprintf(stderr,"dfs unknown edge\n"); + fprintf(stderr, "dfs unknown edge\n"); } itA = itA->next; } @@ -1348,16 +1349,16 @@ DagNodeQueue * graph_dfs(void) } set_node_xy(node, node->DFS_dist*DEPSX*2, pos[node->DFS_dist]*DEPSY*2); - // fprintf(stderr,"DFS node : %20s %i %i %i %i\n",((ID *) node->ob)->name,node->BFS_dist, node->DFS_dist, node->DFS_dvtm, node->DFS_fntm ); + // fprintf(stderr, "DFS node : %20s %i %i %i %i\n", ((ID *) node->ob)->name, node->BFS_dist, node->DFS_dist, node->DFS_dvtm, node->DFS_fntm ); - push_stack(retqueue,node); + push_stack(retqueue, node); } } } node = node->next; } while (node); -// fprintf(stderr,"i size : %i\n", maxpos); +// fprintf(stderr, "i size : %i\n", maxpos); queue_delete(nqueue); return(retqueue); @@ -1381,7 +1382,7 @@ int pre_and_post_source_DFS(DagForest *dag, short mask, DagNode *source, graph_a int skip = 0; int retval = 0; /* - *fprintf(stderr,"starting DFS\n ------------\n"); + *fprintf(stderr, "starting DFS\n ------------\n"); */ nqueue = queue_create(DAGQUEUEALLOC); @@ -1406,8 +1407,8 @@ int pre_and_post_source_DFS(DagForest *dag, short mask, DagNode *source, graph_a node->DFS_dist = 1; node->DFS_dvtm = time; time++; - push_stack(nqueue,node); - pre_func(node->ob,data); + push_stack(nqueue, node); + pre_func(node->ob, data); while (nqueue->count) { skip = 0; @@ -1421,8 +1422,8 @@ int pre_and_post_source_DFS(DagForest *dag, short mask, DagNode *source, graph_a time++; itA->node->DFS_dist = node->DFS_dist + 1; - push_stack(nqueue,itA->node); - pre_func(node->ob,data); + push_stack(nqueue, itA->node); + pre_func(node->ob, data); skip = 1; break; @@ -1444,7 +1445,7 @@ int pre_and_post_source_DFS(DagForest *dag, short mask, DagNode *source, graph_a node->DFS_fntm = time; time++; - post_func(node->ob,data); + post_func(node->ob, data); } } } @@ -1462,13 +1463,13 @@ struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob) DagNodeQueue *nqueue; DagAdjList *itA; - node = dag_find_node(dag,ob); + node = dag_find_node(dag, ob); if (node==NULL) { return NULL; } else if (node->ancestor_count == 1) { // simple case nqueue = queue_create(1); - push_queue(nqueue,node); + push_queue(nqueue, node); } else { /* need to go over the whole dag for adj list */ nqueue = queue_create(node->ancestor_count); @@ -1479,7 +1480,7 @@ struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob) itA = node->child; while (itA != NULL) { if ((itA->node == node) && (itA->type == DAG_RL_DATA)) { - push_queue(nqueue,node); + push_queue(nqueue, node); } itA = itA->next; } @@ -1496,7 +1497,7 @@ struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob) DagNodeQueue *nqueue; DagAdjList *itA; - node = dag_find_node(dag,ob); + node = dag_find_node(dag, ob); // need to go over the whole dag for adj list nqueue = queue_create(node->ancestor_count); @@ -1507,7 +1508,7 @@ struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob) itA = node->child; while (itA != NULL) { if (itA->node == node) { - push_queue(nqueue,node); + push_queue(nqueue, node); } itA = itA->next; } @@ -1544,7 +1545,7 @@ struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob) node->color = DAG_GRAY; time++; - push_stack(nqueue,node); + push_stack(nqueue, node); while (nqueue->count) { @@ -1558,7 +1559,7 @@ struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob) itA->node->color = DAG_GRAY; time++; - push_stack(nqueue,itA->node); + push_stack(nqueue, itA->node); skip = 1; break; } @@ -1570,7 +1571,7 @@ struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob) node->color = DAG_BLACK; time++; - push_stack(retqueue,node); + push_stack(retqueue, node); } } } @@ -1598,7 +1599,7 @@ short are_obs_related(struct DagForest *dag, void *ob1, void *ob2) } #endif -int is_acyclic( DagForest *dag) +int is_acyclic(DagForest *dag) { return dag->is_acyclic; } @@ -1618,10 +1619,10 @@ void graph_print_queue(DagNodeQueue *nqueue) queueElem = nqueue->first; while (queueElem) { - fprintf(stderr,"** %s %i %i-%i ",((ID *) queueElem->node->ob)->name,queueElem->node->color,queueElem->node->DFS_dvtm,queueElem->node->DFS_fntm); + fprintf(stderr, "** %s %i %i-%i ", ((ID *) queueElem->node->ob)->name, queueElem->node->color, queueElem->node->DFS_dvtm, queueElem->node->DFS_fntm); queueElem = queueElem->next; } - fprintf(stderr,"\n"); + fprintf(stderr, "\n"); } void graph_print_queue_dist(DagNodeQueue *nqueue) @@ -1632,16 +1633,16 @@ void graph_print_queue_dist(DagNodeQueue *nqueue) queueElem = nqueue->first; count = 0; while (queueElem) { - fprintf(stderr,"** %25s %2.2i-%2.2i ",((ID *) queueElem->node->ob)->name,queueElem->node->DFS_dvtm,queueElem->node->DFS_fntm); - while (count < queueElem->node->DFS_dvtm-1) { fputc(' ',stderr); count++;} - fputc('|',stderr); - while (count < queueElem->node->DFS_fntm-2) { fputc('-',stderr); count++;} - fputc('|',stderr); - fputc('\n',stderr); + fprintf(stderr, "** %25s %2.2i-%2.2i ", ((ID *) queueElem->node->ob)->name, queueElem->node->DFS_dvtm, queueElem->node->DFS_fntm); + while (count < queueElem->node->DFS_dvtm-1) { fputc(' ', stderr); count++;} + fputc('|', stderr); + while (count < queueElem->node->DFS_fntm-2) { fputc('-', stderr); count++;} + fputc('|', stderr); + fputc('\n', stderr); count = 0; queueElem = queueElem->next; } - fprintf(stderr,"\n"); + fprintf(stderr, "\n"); } void graph_print_adj_list(void) @@ -1651,14 +1652,14 @@ void graph_print_adj_list(void) node = (getMainDag())->DagNode.first; while (node) { - fprintf(stderr,"node : %s col: %i",((ID *) node->ob)->name, node->color); + fprintf(stderr, "node : %s col: %i", ((ID *) node->ob)->name, node->color); itA = node->child; while (itA) { - fprintf(stderr,"-- %s ",((ID *) itA->node->ob)->name); + fprintf(stderr, "-- %s ", ((ID *) itA->node->ob)->name); itA = itA->next; } - fprintf(stderr,"\n"); + fprintf(stderr, "\n"); node = node->next; } } @@ -1722,8 +1723,8 @@ static void scene_sort_groups(Main *bmain, Scene *sce) if (base->object->id.newid) { go= (GroupObject *)base->object->id.newid; base->object->id.newid= NULL; - BLI_remlink( &group->gobject, go); - BLI_addtail( &listb, go); + BLI_remlink(&group->gobject, go); + BLI_addtail(&listb, go); } } /* copy the newly sorted listbase */ @@ -1760,7 +1761,7 @@ void DAG_scene_sort(Main *bmain, Scene *sce) rootnode = sce->theDag->DagNode.first; rootnode->color = DAG_GRAY; time++; - push_stack(nqueue,rootnode); + push_stack(nqueue, rootnode); while (nqueue->count) { @@ -1774,7 +1775,7 @@ void DAG_scene_sort(Main *bmain, Scene *sce) itA->node->color = DAG_GRAY; time++; - push_stack(nqueue,itA->node); + push_stack(nqueue, itA->node); skip = 1; break; } @@ -1793,8 +1794,8 @@ void DAG_scene_sort(Main *bmain, Scene *sce) while (base && base->object != node->ob) base = base->next; if (base) { - BLI_remlink(&sce->base,base); - BLI_addhead(&tempbase,base); + BLI_remlink(&sce->base, base); + BLI_addhead(&tempbase, base); } } } @@ -1803,8 +1804,8 @@ void DAG_scene_sort(Main *bmain, Scene *sce) /* temporal correction for circular dependencies */ base = sce->base.first; while (base) { - BLI_remlink(&sce->base,base); - BLI_addhead(&tempbase,base); + BLI_remlink(&sce->base, base); + BLI_addhead(&tempbase, base); //if (G.debug & G_DEBUG) printf("cyclic %s\n", base->object->id.name); base = sce->base.first; @@ -1930,7 +1931,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime) } -/* node was checked to have lasttime != curtime , and is of type ID_OB */ +/* node was checked to have lasttime != curtime, and is of type ID_OB */ static unsigned int flush_layer_node(Scene *sce, DagNode *node, int curtime) { DagAdjList *itA; @@ -1952,7 +1953,7 @@ static unsigned int flush_layer_node(Scene *sce, DagNode *node, int curtime) return node->lay; } -/* node was checked to have lasttime != curtime , and is of type ID_OB */ +/* node was checked to have lasttime != curtime, and is of type ID_OB */ static void flush_pointcache_reset(Scene *scene, DagNode *node, int curtime, int reset) { Main *bmain= G.main; @@ -2580,6 +2581,10 @@ static void dag_id_flush_update(Scene *sce, ID *id) } if (idtype == ID_MC) { + MovieClip *clip = (MovieClip *) id; + + BKE_tracking_dopesheet_tag_update(&clip->tracking); + for (obt=bmain->object.first; obt; obt= obt->id.next) { bConstraint *con; for (con = obt->constraints.first; con; con=con->next) { @@ -2897,7 +2902,7 @@ void DAG_pose_sort(Object *ob) while (itA != NULL) { if (itA->node->color == DAG_WHITE) { itA->node->color = DAG_GRAY; - push_stack(nqueue,itA->node); + push_stack(nqueue, itA->node); skip = 1; break; } @@ -2935,8 +2940,8 @@ void DAG_pose_sort(Object *ob) // printf(" %s\n", pchan->name); // } - free_forest( dag ); - MEM_freeN( dag ); + free_forest(dag); + MEM_freeN(dag); ugly_hack_sorry= 1; } diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 3d79386e19a..cf7750520a3 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1,5 +1,4 @@ /* - * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -197,7 +196,7 @@ void addnormalsDispList(ListBase *lb) for (; b<dl->nr; b++) { - normal_quad_v3( nor,v1, v3, v4, v2); + normal_quad_v3(nor, v1, v3, v4, v2); add_v3_v3(n1, nor); add_v3_v3(n2, nor); @@ -321,7 +320,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i dl= MEM_callocN(sizeof(DispList), "makeDispListbez"); /* len+1 because of 'forward_diff_bezier' function */ - dl->verts= MEM_callocN( (len+1)*3*sizeof(float), "dlverts"); + dl->verts= MEM_callocN((len+1)*3*sizeof(float), "dlverts"); BLI_addtail(dispbase, dl); dl->parts= 1; dl->nr= len; @@ -352,11 +351,11 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i else { int j; for (j=0; j<3; j++) { - BKE_curve_forward_diff_bezier( prevbezt->vec[1][j], - prevbezt->vec[2][j], - bezt->vec[0][j], - bezt->vec[1][j], - data+j, resolu, 3*sizeof(float)); + BKE_curve_forward_diff_bezier(prevbezt->vec[1][j], + prevbezt->vec[2][j], + bezt->vec[0][j], + bezt->vec[1][j], + data + j, resolu, 3 * sizeof(float)); } data+= 3*resolu; @@ -433,7 +432,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) totvert= 0; nextcol= 0; - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); dl= dispbase->first; while (dl) { @@ -450,18 +449,18 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) while (a--) { vlast= eve; - eve = BLI_addfillvert(&sf_ctx, f1); + eve = BLI_scanfill_vert_add(&sf_ctx, f1); totvert++; if (vlast==NULL) v1= eve; else { - BLI_addfilledge(&sf_ctx, vlast, eve); + BLI_scanfill_edge_add(&sf_ctx, vlast, eve); } f1+=3; } if (eve!=NULL && v1!=NULL) { - BLI_addfilledge(&sf_ctx, eve, v1); + BLI_scanfill_edge_add(&sf_ctx, eve, v1); } } else if (colnr<dl->col) { @@ -474,7 +473,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) dl= dl->next; } - if (totvert && (tot= BLI_edgefill(&sf_ctx, FALSE))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { + if (totvert && (tot= BLI_scanfill_calc(&sf_ctx, FALSE))) { // XXX (obedit && obedit->actcol)?(obedit->actcol-1):0)) { if (tot) { dlnew= MEM_callocN(sizeof(DispList), "filldisplist"); dlnew->type= DL_INDEX3; @@ -519,7 +518,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal) BLI_addhead(to, dlnew); } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); if (nextcol) { /* stay at current char but fill polys with next material */ @@ -970,7 +969,7 @@ static void displist_surf_indices(DispList *dl) dl->totindex= 0; - index=dl->index= MEM_mallocN( 4*sizeof(int)*(dl->parts+1)*(dl->nr+1), "index array nurbs"); + index=dl->index= MEM_mallocN(4*sizeof(int)*(dl->parts+1)*(dl->nr+1), "index array nurbs"); for (a=0; a<dl->parts; a++) { @@ -1197,7 +1196,7 @@ static void rotateBevelPiece(Curve *cu, BevPoint *bevp, DispList *dlb, float wid int b; fp = dlb->verts; - for (b = 0; b<dlb->nr; b++,fp += 3,data += 3) { + for (b = 0; b<dlb->nr; b++, fp += 3, data += 3) { if (cu->flag & CU_3D) { float vec[3]; @@ -1221,10 +1220,11 @@ static void rotateBevelPiece(Curve *cu, BevPoint *bevp, DispList *dlb, float wid *data_r = data; } -static void fillBevelCap(Curve *cu, Nurb *nu, BevPoint *bevp, DispList *dlb, float fac, float widfac, ListBase *dispbase) +static void fillBevelCap(Nurb *nu, DispList *dlb, float *prev_fp, ListBase *dispbase) { DispList *dl; float *data; + int b; dl= MEM_callocN(sizeof(DispList), "makeDispListbev2"); dl->verts= data= MEM_callocN(3*sizeof(float)*dlb->nr, "dlverts"); @@ -1240,7 +1240,8 @@ static void fillBevelCap(Curve *cu, Nurb *nu, BevPoint *bevp, DispList *dlb, flo /* CU_2D conflicts with R_NOPUNOFLIP */ dl->rt= nu->flag & ~CU_2D; - rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data); + for (b = 0; b < dlb->nr; b++, prev_fp += 3, data += 3) + copy_v3_v3(data, prev_fp); BLI_addtail(dispbase, dl); } @@ -1288,7 +1289,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba BevList *bl= cu->bev.first; Nurb *nu= nubase->first; - for (; bl && nu; bl=bl->next,nu=nu->next) { + for (; bl && nu; bl=bl->next, nu=nu->next) { DispList *dl; float *data; BevPoint *bevp; @@ -1333,9 +1334,26 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba ListBase top_capbase = {NULL, NULL}; for (dlb=dlbev.first; dlb; dlb=dlb->next) { + int i, start, steps; + float bevfac1 = MIN2(cu->bevfac1, cu->bevfac2), bevfac2 = MAX2(cu->bevfac1, cu->bevfac2); + float firstblend = 0.0f, lastblend = 0.0f; + + if (cu->bevfac1 - cu->bevfac2 == 0.0f) + continue; + + start = (int)(bevfac1*(bl->nr-1)); + steps = 2+(int)((bevfac2)*(bl->nr-1)) - start; + firstblend = 1.0f - ((float)bevfac1*(bl->nr-1) - (int)((float)bevfac1*(bl->nr-1))); + lastblend = (float)bevfac2*(bl->nr-1) - (int)((float)bevfac2*(bl->nr-1)); + + if (steps > bl->nr) { + steps = bl->nr; + lastblend = 1.0f; + } + /* for each part of the bevel use a separate displblock */ dl= MEM_callocN(sizeof(DispList), "makeDispListbev1"); - dl->verts= data= MEM_callocN(3*sizeof(float)*dlb->nr*bl->nr, "dlverts"); + dl->verts= data= MEM_callocN(3*sizeof(float)*dlb->nr*steps, "dlverts"); BLI_addtail(dispbase, dl); dl->type= DL_SURF; @@ -1343,8 +1361,8 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba dl->flag= dlb->flag & (DL_FRONT_CURVE|DL_BACK_CURVE); if (dlb->type==DL_POLY) dl->flag |= DL_CYCL_U; if (bl->poly>=0) dl->flag |= DL_CYCL_V; - - dl->parts= bl->nr; + + dl->parts= steps; dl->nr= dlb->nr; dl->col= nu->mat_nr; dl->charidx= nu->charidx; @@ -1353,18 +1371,20 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba /* CU_2D conflicts with R_NOPUNOFLIP */ dl->rt= nu->flag & ~CU_2D; - dl->bevelSplitFlag= MEM_callocN(sizeof(*dl->col2)*((bl->nr+0x1F)>>5), "bevelSplitFlag"); + dl->bevelSplitFlag= MEM_callocN(sizeof(*dl->col2)*((steps+0x1F)>>5), "bevelSplitFlag"); /* for each point of poly make a bevel piece */ - bevp= (BevPoint *)(bl+1); - for (a=0; a<bl->nr; a++,bevp++) { + bevp= (BevPoint *)(bl+1) + start; + for (i=start, a=0; a<steps; i++,bevp++,a++) { float fac=1.0; + float *cur_data = data; + if (cu->taperobj==NULL) { if ( (cu->bevobj!=NULL) || !((cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) ) fac = bevp->radius; } else { - fac = calc_taper(scene, cu->taperobj, a, bl->nr); + fac = calc_taper(scene, cu->taperobj, i, bl->nr); } if (bevp->split_tag) { @@ -1374,11 +1394,31 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba /* rotate bevel piece and write in data */ rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data); + if (a == 1 || a == steps - 1) { + float *cur_fp = cur_data, *prev_fp = cur_data - 3*dlb->nr; + int b; + + for (b = 0; b < dlb->nr; b++, prev_fp += 3, cur_fp += 3) { + float cur[3], prev[3]; + + copy_v3_v3(cur, cur_fp); + copy_v3_v3(prev, prev_fp); + + if (a == 1) + interp_v3_v3v3(prev, cur_fp, prev_fp, firstblend); + if (a == steps - 1) + interp_v3_v3v3(cur, prev_fp, cur_fp, lastblend); + + copy_v3_v3(cur_fp, cur); + copy_v3_v3(prev_fp, prev); + } + } + if (cu->bevobj && (cu->flag & CU_FILL_CAPS)) { - if (a == 0) - fillBevelCap(cu, nu, bevp, dlb, fac, widfac, &bottom_capbase); - else if (a == bl->nr - 1) - fillBevelCap(cu, nu, bevp, dlb, fac, widfac, &top_capbase); + if (a == 1) + fillBevelCap(nu, dlb, cur_data - 3*dlb->nr, &bottom_capbase); + if (a == steps - 1) + fillBevelCap(nu, dlb, cur_data, &top_capbase); } } diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index e6f38a3a334..6c5826c5bab 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -1,11 +1,20 @@ -/** -***** BEGIN GPL LICENSE BLOCK ***** +/* + * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * * Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** @@ -78,15 +87,15 @@ /* precalculated gaussian factors for 5x super sampling */ static float gaussianFactors[5] = { 0.996849f, - 0.596145f, - 0.596145f, - 0.596145f, - 0.524141f}; + 0.596145f, + 0.596145f, + 0.596145f, + 0.524141f}; static float gaussianTotal = 3.309425f; /* UV Image neighboring pixel table x and y list */ -static int neighX[8] = {1,1,0,-1,-1,-1, 0, 1}; -static int neighY[8] = {0,1,1, 1, 0,-1,-1,-1}; +static int neighX[8] = {1, 1, 0, -1, -1, -1, 0, 1}; +static int neighY[8] = {0, 1, 1, 1, 0, -1, -1, -1}; /* subframe_updateObject() flags */ #define UPDATE_PARENTS (1<<0) @@ -110,7 +119,7 @@ static int neighY[8] = {0,1,1, 1, 0,-1,-1,-1}; #define MIN_WETNESS 0.001f #define MAX_WETNESS 5.0f /* dissolve macro */ -#define VALUE_DISSOLVE(VALUE, TIME, SCALE, LOG) (VALUE) = (LOG) ? (VALUE) * (pow(MIN_WETNESS,1.0f/(1.2f*((float)(TIME))/(SCALE)))) : (VALUE) - 1.0f/(TIME)*(SCALE) +#define VALUE_DISSOLVE(VALUE, TIME, SCALE, LOG) (VALUE) = (LOG) ? (VALUE) * (pow(MIN_WETNESS, 1.0f/(1.2f*((float)(TIME))/(SCALE)))) : (VALUE) - 1.0f/(TIME)*(SCALE) /***************************** Internal Structs ***************************/ @@ -376,18 +385,18 @@ void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface) } if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) { - strcat(surface->output_name,"paintmap"); - strcat(surface->output_name2,"wetmap"); + strcat(surface->output_name, "paintmap"); + strcat(surface->output_name2, "wetmap"); surface_setUniqueOutputName(surface, surface->output_name2, 1); } else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) { - strcat(surface->output_name,"displace"); + strcat(surface->output_name, "displace"); } else if (surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) { - strcat(surface->output_name,"weight"); + strcat(surface->output_name, "weight"); } else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) { - strcat(surface->output_name,"wave"); + strcat(surface->output_name, "wave"); } surface_setUniqueOutputName(surface, surface->output_name, 0); @@ -720,14 +729,14 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface) /* get dimensions */ sub_v3_v3v3(dim, grid->grid_bounds.max, grid->grid_bounds.min); copy_v3_v3(td, dim); - min_dim = MAX3(td[0],td[1],td[2]) / 1000.f; + min_dim = MAX3(td[0], td[1], td[2]) / 1000.f; /* deactivate zero axises */ for (i=0; i<3; i++) { if (td[i]<min_dim) {td[i]=1.0f; axis-=1;} } - if (axis == 0 || MAX3(td[0],td[1],td[2]) < 0.0001f) { + if (axis == 0 || MAX3(td[0], td[1], td[2]) < 0.0001f) { MEM_freeN(grid_bounds); MEM_freeN(bData->grid); bData->grid = NULL; @@ -1428,8 +1437,8 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface) } /* interpolate final uv pos */ - interp_v3_v3v3v3( uv_final, &uv[0], &uv[3], &uv[6], - f_data->barycentricWeights[i*samples].v); + interp_v3_v3v3v3(uv_final, &uv[0], &uv[3], &uv[6], + f_data->barycentricWeights[i*samples].v); /* remap to -1.0 to 1.0 */ uv_final[0] = uv_final[0]*2.0f - 1.0f; uv_final[1] = uv_final[1]*2.0f - 1.0f; @@ -1469,7 +1478,7 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface) #pragma omp parallel for schedule(static) for (i=0; i<sData->total_points; i++) { int face_ind = f_data->uv_p[i].face_index; - float colors[3][4] = {{0.0f,0.0f,0.0f,0.0f}}; + float colors[3][4] = {{0.0f, 0.0f, 0.0f, 0.0f}}; float final_color[4]; int j; /* collect color values */ @@ -1482,8 +1491,8 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface) } /* interpolate final color */ - interp_v4_v4v4v4( final_color, colors[0], colors[1], colors[2], - f_data->barycentricWeights[i*samples].v); + interp_v4_v4v4v4(final_color, colors[0], colors[1], colors[2], + f_data->barycentricWeights[i*samples].v); copy_v3_v3(pPoint[i].color, final_color); pPoint[i].alpha = final_color[3]; @@ -1914,8 +1923,8 @@ struct DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scen * Tries to find the neighboring pixel in given (uv space) direction. * Result is used by effect system to move paint on the surface. * -* px,py : origin pixel x and y -* n_index : lookup direction index (use neighX,neighY to get final index) +* px, py : origin pixel x and y +* n_index : lookup direction index (use neighX, neighY to get final index) */ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh *dm, const char *uvname, int w, int h, int px, int py, int n_index) @@ -1925,7 +1934,7 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh * and faster/simplier than including possible face tip point links) */ - int x,y; + int x, y; PaintUVPoint *tPoint = NULL; PaintUVPoint *cPoint = NULL; @@ -2121,7 +2130,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) 0.4f, -0.2f, -0.4f, 0.3f}; int ty; - int w,h; + int w, h; int numOfFaces; char uvname[MAX_CUSTOMDATA_LAYER_NAME]; int active_points = 0; @@ -2217,7 +2226,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) short isInside = 0; /* if point is inside a uv face */ float d1[2], d2[2], d3[2], point[5][2]; - float dot00,dot01,dot02,dot11,dot12, invDenom, u,v; + float dot00, dot01, dot02, dot11, dot12, invDenom, u, v; /* Init per pixel settings */ tPoint->face_index = -1; @@ -2258,7 +2267,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) if (faceBB[i].max[1] < (point[sample][1])) continue; /* Calculate point inside a triangle check - * for uv0,1,2 */ + * for uv0, 1, 2 */ sub_v2_v2v2(d1, tface[i].uv[2], tface[i].uv[0]); // uv2 - uv0 sub_v2_v2v2(d2, tface[i].uv[1], tface[i].uv[0]); // uv1 - uv0 sub_v2_v2v2(d3, point[sample], tface[i].uv[0]); // point - uv0 @@ -2358,7 +2367,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) /* If point isn't't on canvas mesh */ if (tPoint->face_index == -1) { int u_min, u_max, v_min, v_max; - int u,v, ind; + int u, v, ind; float point[2]; /* get loop area */ @@ -2696,7 +2705,7 @@ static void dynamicPaint_updateBrushMaterials(Object *brushOb, Material *ui_mat, if (tot) { bMats->ob_mats = MEM_callocN(sizeof(Material*)*(tot), "BrushMaterials"); for (i=0; i<tot; i++) { - bMats->ob_mats[i] = RE_init_sample_material(give_current_material(brushOb,(i+1)), scene); + bMats->ob_mats[i] = RE_init_sample_material(give_current_material(brushOb, (i+1)), scene); } } bMats->tot = tot; @@ -3189,7 +3198,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, if (brush->flags & MOD_DPAINT_PROX_PROJECT && brush->collision != MOD_DPAINT_COL_VOLUME) { mul_v3_fl(avg_brushNor, 1.0f/(float)numOfVerts); /* instead of null vector use positive z */ - if (!(MIN3(avg_brushNor[0],avg_brushNor[1],avg_brushNor[2]))) + if (!(MIN3(avg_brushNor[0], avg_brushNor[1], avg_brushNor[2]))) avg_brushNor[2] = 1.0f; else normalize_v3(avg_brushNor); @@ -3278,7 +3287,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, float dot; if (quad) {v2=mface[hit.index].v3; v3=mface[hit.index].v4;} - normal_tri_v3( hit.no, mvert[v1].co, mvert[v2].co, mvert[v3].co); + normal_tri_v3(hit.no, mvert[v1].co, mvert[v2].co, mvert[v3].co); dot = ray_dir[0]*hit.no[0] + ray_dir[1]*hit.no[1] + ray_dir[2]*hit.no[2]; /* If ray and hit face normal are facing same direction @@ -3402,7 +3411,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, /* velocity brush, only do on main sample */ if (brush->flags & MOD_DPAINT_USES_VELOCITY && ss==0 && brushVelocity) { - int v1,v2,v3; + int v1, v2, v3; float weights[4]; float brushPointVelocity[3]; float velocity[3]; @@ -3424,10 +3433,10 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, * todo: perhaps implement something that handles volume movement as well */ /* interpolate vertex speed vectors to get hit point velocity */ - interp_v3_v3v3v3( brushPointVelocity, - brushVelocity[v1].v, - brushVelocity[v2].v, - brushVelocity[v3].v, weights); + interp_v3_v3v3v3(brushPointVelocity, + brushVelocity[v1].v, + brushVelocity[v2].v, + brushVelocity[v3].v, weights); /* substract canvas point velocity */ if (bData->velocity) { @@ -3888,7 +3897,7 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int if ((!surface_usesAdjDistance(surface) && !force_init) || !sData->adj_data) return; if (bData->bNeighs) MEM_freeN(bData->bNeighs); - bNeighs = bData->bNeighs = MEM_mallocN(sData->adj_data->total_targets*sizeof(struct BakeAdjPoint),"PaintEffectBake"); + bNeighs = bData->bNeighs = MEM_mallocN(sData->adj_data->total_targets*sizeof(struct BakeAdjPoint), "PaintEffectBake"); if (!bNeighs) return; #pragma omp parallel for schedule(static) @@ -4662,10 +4671,11 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc /* per sample coordinates */ for (ss=0; ss<bData->s_num[index]; ss++) { - interp_v3_v3v3v3( bData->realCoord[bData->s_pos[index]+ss].v, - canvas_verts[tPoint->v1].v, - canvas_verts[tPoint->v2].v, - canvas_verts[tPoint->v3].v, f_data->barycentricWeights[index*bData->s_num[index]+ss].v); + interp_v3_v3v3v3(bData->realCoord[bData->s_pos[index]+ss].v, + canvas_verts[tPoint->v1].v, + canvas_verts[tPoint->v2].v, + canvas_verts[tPoint->v3].v, + f_data->barycentricWeights[index * bData->s_num[index] + ss].v); } /* Calculate current pixel surface normal */ @@ -4673,8 +4683,8 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc normal_short_to_float_v3(n2, mvert[tPoint->v2].no); normal_short_to_float_v3(n3, mvert[tPoint->v3].no); - interp_v3_v3v3v3( bData->bNormal[index].invNorm, - n1, n2, n3, f_data->barycentricWeights[index*bData->s_num[index]].v); + interp_v3_v3v3v3(bData->bNormal[index].invNorm, + n1, n2, n3, f_data->barycentricWeights[index*bData->s_num[index]].v); mul_mat3_m4_v3(ob->obmat, bData->bNormal[index].invNorm); normalize_v3(bData->bNormal[index].invNorm); negate_v3(bData->bNormal[index].invNorm); diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 263f89a363e..428dc176e1d 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -150,8 +150,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) #endif - f = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); - for ( ; f; f=BM_iter_step(&iter)) { + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { /*don't consider two-edged faces*/ if (f->len < 3) { /* do nothing */ @@ -197,18 +196,18 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) ScanFillFace *efa; int totfilltri; - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); /*scanfill time*/ l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, f); for (j=0; l; l=BM_iter_step(&liter), j++) { /*mark order*/ BM_elem_index_set(l, j); /* set_loop */ - v = BLI_addfillvert(&sf_ctx, l->v->co); + v = BLI_scanfill_vert_add(&sf_ctx, l->v->co); v->tmp.p = l; if (lastv) { - /* e = */ BLI_addfilledge(&sf_ctx, lastv, v); + /* e = */ BLI_scanfill_edge_add(&sf_ctx, lastv, v); } lastv = v; @@ -216,9 +215,9 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) } /*complete the loop*/ - BLI_addfilledge(&sf_ctx, firstv, v); + BLI_scanfill_edge_add(&sf_ctx, firstv, v); - totfilltri = BLI_edgefill_ex(&sf_ctx, FALSE, f->no); + totfilltri = BLI_scanfill_calc_ex(&sf_ctx, FALSE, f->no); BLI_array_grow_items(looptris, totfilltri); for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) { @@ -236,7 +235,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) i += 1; } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); } } @@ -357,17 +356,18 @@ static void emDM_foreachMappedVert( void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]), void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; BMVert *eve; BMIter iter; int i; - eve = BM_iter_new(&iter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL); - for (i=0; eve; i++, eve=BM_iter_step(&iter)) { - if (bmdm->vertexCos) { + if (bmdm->vertexCos) { + BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) { func(userData, i, bmdm->vertexCos[i], bmdm->vertexNos[i], NULL); } - else { + } + else { + BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) { func(userData, i, eve->co, eve->no, NULL); } } @@ -377,7 +377,7 @@ static void emDM_foreachMappedEdge( void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]), void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; BMEdge *eed; BMIter iter; int i; @@ -387,14 +387,14 @@ static void emDM_foreachMappedEdge( BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_VERT); eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) + for (i=0; eed; i++, eed=BM_iter_step(&iter)) func(userData, i, bmdm->vertexCos[BM_elem_index_get(eed->v1)], bmdm->vertexCos[BM_elem_index_get(eed->v2)]); } else { eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) + for (i=0; eed; i++, eed=BM_iter_step(&iter)) func(userData, i, eed->v1->co, eed->v2->co); } } @@ -404,7 +404,7 @@ static void emDM_drawMappedEdges( DMSetDrawOptions setDrawOptions, void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; BMEdge *eed; BMIter iter; int i; @@ -415,7 +415,7 @@ static void emDM_drawMappedEdges( glBegin(GL_LINES); eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) { + for (i=0; eed; i++, eed=BM_iter_step(&iter)) { if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) { glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]); glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v2)]); @@ -426,7 +426,7 @@ static void emDM_drawMappedEdges( else { glBegin(GL_LINES); eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) { + for (i=0; eed; i++, eed=BM_iter_step(&iter)) { if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) { glVertex3fv(eed->v1->co); glVertex3fv(eed->v2->co); @@ -449,7 +449,7 @@ static void emDM_drawMappedEdgesInterp( DMSetDrawInterpOptions setDrawInterpOptions, void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; BMEdge *eed; BMIter iter; int i; @@ -460,7 +460,7 @@ static void emDM_drawMappedEdgesInterp( glBegin(GL_LINES); eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) { + for (i=0; eed; i++, eed=BM_iter_step(&iter)) { if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) { setDrawInterpOptions(userData, i, 0.0); glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]); @@ -473,7 +473,7 @@ static void emDM_drawMappedEdgesInterp( else { glBegin(GL_LINES); eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL); - for (i=0; eed; i++,eed=BM_iter_step(&iter)) { + for (i=0; eed; i++, eed=BM_iter_step(&iter)) { if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) { setDrawInterpOptions(userData, i, 0.0); glVertex3fv(eed->v1->co); @@ -487,7 +487,7 @@ static void emDM_drawMappedEdgesInterp( static void emDM_drawUVEdges(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; BMEditMesh *em = bmdm->tc; BMFace *efa; BMIter iter; @@ -557,7 +557,7 @@ static void emDM_foreachMappedFaceCenter( void (*func)(void *userData, int index, const float co[3], const float no[3]), void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; float (*polyNos)[3] = NULL; BMFace *efa; BMIter iter; @@ -572,8 +572,7 @@ static void emDM_foreachMappedFaceCenter( BLI_assert(polyNos != NULL); } - efa = BM_iter_new(&iter, bmdm->tc->bm, BM_FACES_OF_MESH, NULL); - for (i=0; efa; efa=BM_iter_step(&iter), i++) { + BM_ITER_MESH_INDEX (efa, &iter, bmdm->tc->bm, BM_FACES_OF_MESH, i) { emDM__calcFaceCent(bmdm->tc->bm, efa, cent, bmdm->vertexCos); func(userData, i, cent, polyNos ? polyNos[i] : efa->no); } @@ -587,18 +586,18 @@ static void emDM_drawMappedFaces( void *userData, DMDrawFlag flag) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; BMFace *efa; - struct BMLoop *(*looptris)[3]= bmdm->tc->looptris; - const int tottri= bmdm->tc->tottri; - const int lasttri= tottri - 1; /* compare agasint this a lot */ + struct BMLoop *(*looptris)[3] = bmdm->tc->looptris; + const int tottri = bmdm->tc->tottri; + const int lasttri = tottri - 1; /* compare agasint this a lot */ DMDrawOption draw_option; int i, flush; - const int skip_normals= !glIsEnabled(GL_LIGHTING); /* could be passed as an arg */ + const int skip_normals = !glIsEnabled(GL_LIGHTING); /* could be passed as an arg */ /* GL_ZERO is used to detect if drawing has started or not */ - GLenum poly_prev= GL_ZERO; - GLenum shade_prev= GL_ZERO; + GLenum poly_prev = GL_ZERO; + GLenum shade_prev = GL_ZERO; (void)setMaterial; /* UNUSED */ @@ -607,29 +606,29 @@ static void emDM_drawMappedFaces( if (bmdm->vertexCos) { /* add direct access */ - float (*vertexCos)[3]= bmdm->vertexCos; - float (*vertexNos)[3]= bmdm->vertexNos; - float (*polyNos)[3]= bmdm->polyNos; + float (*vertexCos)[3] = bmdm->vertexCos; + float (*vertexNos)[3] = bmdm->vertexNos; + float (*polyNos)[3] = bmdm->polyNos; // int *triPolyMap= bmdm->triPolyMap; BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_VERT | BM_FACE); - for (i=0; i < tottri; i++) { + for (i = 0; i < tottri; i++) { BMLoop **l = looptris[i]; int drawSmooth; efa = l[0]->f; - drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH); + drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH); draw_option = (!setDrawOptions ? DM_DRAW_OPTION_NORMAL : setDrawOptions(userData, BM_elem_index_get(efa))); if (draw_option != DM_DRAW_OPTION_SKIP) { - const GLenum poly_type= GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ + const GLenum poly_type = GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ if (draw_option == DM_DRAW_OPTION_STIPPLE) { /* enabled with stipple */ if (poly_prev != GL_ZERO) glEnd(); - poly_prev= GL_ZERO; /* force glBegin */ + poly_prev = GL_ZERO; /* force glBegin */ glEnable(GL_POLYGON_STIPPLE); glPolygonStipple(stipple_quarttone); @@ -638,22 +637,22 @@ static void emDM_drawMappedFaces( if (skip_normals) { if (poly_type != poly_prev) { if (poly_prev != GL_ZERO) glEnd(); - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } glVertex3fv(vertexCos[BM_elem_index_get(l[0]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(l[1]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(l[2]->v)]); } else { - const GLenum shade_type= drawSmooth ? GL_SMOOTH : GL_FLAT; + const GLenum shade_type = drawSmooth ? GL_SMOOTH : GL_FLAT; if (shade_type != shade_prev) { if (poly_prev != GL_ZERO) glEnd(); - glShadeModel((shade_prev= shade_type)); /* same as below but switch shading */ - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glShadeModel((shade_prev = shade_type)); /* same as below but switch shading */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } if (poly_type != poly_prev) { if (poly_prev != GL_ZERO) glEnd(); - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } if (!drawSmooth) { @@ -672,13 +671,13 @@ static void emDM_drawMappedFaces( } } - flush= (draw_option == DM_DRAW_OPTION_STIPPLE); + flush = (draw_option == DM_DRAW_OPTION_STIPPLE); if (!skip_normals && !flush && (i != lasttri)) - flush|= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */ + flush |= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */ if (flush) { glEnd(); - poly_prev= GL_ZERO; /* force glBegin */ + poly_prev = GL_ZERO; /* force glBegin */ glDisable(GL_POLYGON_STIPPLE); } @@ -699,11 +698,11 @@ static void emDM_drawMappedFaces( DM_DRAW_OPTION_NORMAL : setDrawOptions(userData, BM_elem_index_get(efa))); if (draw_option != DM_DRAW_OPTION_SKIP) { - const GLenum poly_type= GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ + const GLenum poly_type = GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ if (draw_option == DM_DRAW_OPTION_STIPPLE) { /* enabled with stipple */ if (poly_prev != GL_ZERO) glEnd(); - poly_prev= GL_ZERO; /* force glBegin */ + poly_prev = GL_ZERO; /* force glBegin */ glEnable(GL_POLYGON_STIPPLE); glPolygonStipple(stipple_quarttone); @@ -712,22 +711,22 @@ static void emDM_drawMappedFaces( if (skip_normals) { if (poly_type != poly_prev) { if (poly_prev != GL_ZERO) glEnd(); - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } glVertex3fv(l[0]->v->co); glVertex3fv(l[1]->v->co); glVertex3fv(l[2]->v->co); } else { - const GLenum shade_type= drawSmooth ? GL_SMOOTH : GL_FLAT; + const GLenum shade_type = drawSmooth ? GL_SMOOTH : GL_FLAT; if (shade_type != shade_prev) { if (poly_prev != GL_ZERO) glEnd(); - glShadeModel((shade_prev= shade_type)); /* same as below but switch shading */ - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glShadeModel((shade_prev = shade_type)); /* same as below but switch shading */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } if (poly_type != poly_prev) { if (poly_prev != GL_ZERO) glEnd(); - glBegin((poly_prev= poly_type)); /* BMesh: will always be GL_TRIANGLES */ + glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */ } if (!drawSmooth) { @@ -746,9 +745,9 @@ static void emDM_drawMappedFaces( } } - flush= (draw_option == DM_DRAW_OPTION_STIPPLE); + flush = (draw_option == DM_DRAW_OPTION_STIPPLE); if (!skip_normals && !flush && (i != lasttri)) { - flush|= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */ + flush |= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */ } if (flush) { @@ -766,7 +765,7 @@ static void emDM_drawMappedFaces( } static void bmdm_get_tri_tex(BMesh *bm, BMLoop **ls, MLoopUV *luv[3], MLoopCol *lcol[3], - int has_uv, int has_col) + int has_uv, int has_col) { if (has_uv) { luv[0] = CustomData_bmesh_get(&bm->ldata, ls[0]->head.data, CD_MLOOPUV); @@ -790,11 +789,11 @@ static void emDM_drawFacesTex_common( DMCompareDrawOptions compareDrawOptions, void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; BMEditMesh *em = bmdm->tc; - BMesh *bm= bmdm->tc->bm; - float (*vertexCos)[3]= bmdm->vertexCos; - float (*vertexNos)[3]= bmdm->vertexNos; + BMesh *bm = bmdm->tc->bm; + float (*vertexCos)[3] = bmdm->vertexCos; + float (*vertexNos)[3] = bmdm->vertexNos; BMFace *efa; MLoopUV *luv[3], dummyluv = {{0}}; MLoopCol *lcol[3] = {NULL}, dummylcol = {0}; @@ -815,13 +814,12 @@ static void emDM_drawFacesTex_common( if (vertexCos) { BM_mesh_elem_index_ensure(bm, BM_VERT); - glBegin(GL_TRIANGLES); - for (i=0; i<em->tottri; i++) { + for (i = 0; i < em->tottri; i++) { BMLoop **ls = em->looptris[i]; - MTexPoly *tp= has_uv ? CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY) : NULL; + MTexPoly *tp = has_uv ? CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY) : NULL; MTFace mtf = {{{0}}}; /*unsigned char *cp= NULL;*/ /*UNUSED*/ - int drawSmooth= BM_elem_flag_test(ls[0]->f, BM_ELEM_SMOOTH); + int drawSmooth = BM_elem_flag_test(ls[0]->f, BM_ELEM_SMOOTH); DMDrawOption draw_option; efa = ls[0]->f; @@ -831,14 +829,15 @@ static void emDM_drawFacesTex_common( } if (drawParams) - draw_option= drawParams(&mtf, has_vcol, efa->mat_nr); + draw_option = drawParams(&mtf, has_vcol, efa->mat_nr); else if (drawParamsMapped) - draw_option= drawParamsMapped(userData, BM_elem_index_get(efa)); + draw_option = drawParamsMapped(userData, BM_elem_index_get(efa)); else - draw_option= DM_DRAW_OPTION_NORMAL; + draw_option = DM_DRAW_OPTION_NORMAL; if (draw_option != DM_DRAW_OPTION_SKIP) { + glBegin(GL_TRIANGLES); if (!drawSmooth) { glNormal3fv(bmdm->polyNos[BM_elem_index_get(efa)]); @@ -880,19 +879,19 @@ static void emDM_drawFacesTex_common( glNormal3fv(vertexNos[BM_elem_index_get(ls[2]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ls[2]->v)]); } + glEnd(); } } - glEnd(); } else { BM_mesh_elem_index_ensure(bm, BM_VERT); - for (i=0; i<em->tottri; i++) { + for (i = 0; i < em->tottri; i++) { BMLoop **ls = em->looptris[i]; - MTexPoly *tp= has_uv ? CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY) : NULL; + MTexPoly *tp = has_uv ? CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY) : NULL; MTFace mtf = {{{0}}}; /*unsigned char *cp= NULL;*/ /*UNUSED*/ - int drawSmooth= BM_elem_flag_test(ls[0]->f, BM_ELEM_SMOOTH); + int drawSmooth = BM_elem_flag_test(ls[0]->f, BM_ELEM_SMOOTH); DMDrawOption draw_option; efa = ls[0]->f; @@ -902,11 +901,11 @@ static void emDM_drawFacesTex_common( } if (drawParams) - draw_option= drawParams(&mtf, has_vcol, efa->mat_nr); + draw_option = drawParams(&mtf, has_vcol, efa->mat_nr); else if (drawParamsMapped) - draw_option= drawParamsMapped(userData, BM_elem_index_get(efa)); + draw_option = drawParamsMapped(userData, BM_elem_index_get(efa)); else - draw_option= DM_DRAW_OPTION_NORMAL; + draw_option = DM_DRAW_OPTION_NORMAL; if (draw_option != DM_DRAW_OPTION_SKIP) { @@ -990,11 +989,11 @@ static void emDM_drawMappedFacesGLSL( DMSetDrawOptions setDrawOptions, void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; - BMesh *bm= bmdm->tc->bm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; + BMesh *bm = bmdm->tc->bm; BMEditMesh *em = bmdm->tc; - float (*vertexCos)[3]= bmdm->vertexCos; - float (*vertexNos)[3]= bmdm->vertexNos; + float (*vertexCos)[3] = bmdm->vertexCos; + float (*vertexNos)[3] = bmdm->vertexNos; BMFace *efa; BMLoop **ltri; DMVertexAttribs attribs; @@ -1014,30 +1013,30 @@ static void emDM_drawMappedFacesGLSL( #define PASSATTRIB(loop, eve, vert) { \ if (attribs.totorco) { \ float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \ - glVertexAttrib3fvARB(attribs.orco.glIndex, orco); \ + glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \ } \ for (b = 0; b < attribs.tottface; b++) { \ MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPUV, b);\ - glVertexAttrib2fvARB(attribs.tface[b].glIndex, _luv->uv); \ + glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \ } \ for (b = 0; b < attribs.totmcol; b++) { \ MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPCOL, b);\ GLubyte _col[4]; \ _col[0]= _cp->b; _col[1]= _cp->g; _col[2]= _cp->r; _col[3]= _cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, _col); \ + glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \ } \ if (attribs.tottang) { \ float *tang = attribs.tang.array[i*4 + vert]; \ - glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \ + glVertexAttrib3fvARB(attribs.tang.gl_index, tang); \ } \ } - for (i=0, ltri=em->looptris[0]; i<em->tottri; i++, ltri += 3) { + for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) { int drawSmooth; efa = ltri[0]->f; - drawSmooth= BM_elem_flag_test(efa, BM_ELEM_SMOOTH); + drawSmooth = BM_elem_flag_test(efa, BM_ELEM_SMOOTH); if (setDrawOptions && (setDrawOptions(userData, BM_elem_index_get(efa)) == DM_DRAW_OPTION_SKIP)) continue; @@ -1116,14 +1115,14 @@ static void emDM_drawMappedFacesMat( void (*setMaterial)(void *userData, int, void *attribs), int (*setFace)(void *userData, int index), void *userData) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; - BMesh *bm= bmdm->tc->bm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; + BMesh *bm = bmdm->tc->bm; BMEditMesh *em = bmdm->tc; - float (*vertexCos)[3]= bmdm->vertexCos; - float (*vertexNos)[3]= bmdm->vertexNos; + float (*vertexCos)[3] = bmdm->vertexCos; + float (*vertexNos)[3] = bmdm->vertexNos; BMFace *efa; BMLoop **ltri; - DMVertexAttribs attribs= {{{0}}}; + DMVertexAttribs attribs = {{{0}}}; GPUVertexAttribs gattribs; int i, b, matnr, new_matnr; @@ -1132,36 +1131,36 @@ static void emDM_drawMappedFacesMat( /* always use smooth shading even for flat faces, else vertex colors wont interpolate */ glShadeModel(GL_SMOOTH); - BM_mesh_elem_index_ensure(bm, BM_VERT|BM_FACE); + BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE); #define PASSATTRIB(loop, eve, vert) { \ if (attribs.totorco) { \ float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \ - if (attribs.orco.glTexco) \ + if (attribs.orco.gl_texco) \ glTexCoord3fv(orco); \ else \ - glVertexAttrib3fvARB(attribs.orco.glIndex, orco); \ + glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \ } \ for (b = 0; b < attribs.tottface; b++) { \ MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPUV, b);\ - if (attribs.tface[b].glTexco) \ + if (attribs.tface[b].gl_texco) \ glTexCoord2fv(_luv->uv); \ else \ - glVertexAttrib2fvARB(attribs.tface[b].glIndex, _luv->uv); \ + glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \ } \ for (b = 0; b < attribs.totmcol; b++) { \ MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPCOL, b);\ GLubyte _col[4]; \ _col[0]= _cp->b; _col[1]= _cp->g; _col[2]= _cp->r; _col[3]= _cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, _col); \ + glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \ } \ if (attribs.tottang) { \ float *tang = attribs.tang.array[i*4 + vert]; \ - glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \ + glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \ } \ } - for (i=0, ltri=em->looptris[0]; i<em->tottri; i++, ltri += 3) { + for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) { int drawSmooth; efa = ltri[0]->f; @@ -1235,18 +1234,19 @@ static void emDM_drawMappedFacesMat( static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; BMVert *eve; BMIter iter; int i; if (bmdm->tc->bm->totvert) { - eve = BM_iter_new(&iter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL); - for (i=0; eve; eve=BM_iter_step(&iter), i++) { - if (bmdm->vertexCos) { + if (bmdm->vertexCos) { + BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) { DO_MINMAX(bmdm->vertexCos[i], min_r, max_r); } - else { + } + else { + BM_ITER_MESH (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH) { DO_MINMAX(eve->co, min_r, max_r); } } @@ -1258,35 +1258,35 @@ static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) } static int emDM_getNumVerts(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; return bmdm->tc->bm->totvert; } static int emDM_getNumEdges(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; return bmdm->tc->bm->totedge; } static int emDM_getNumTessFaces(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; return bmdm->tc->tottri; } static int emDM_getNumLoops(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; return bmdm->tc->bm->totloop; } static int emDM_getNumPolys(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; return bmdm->tc->bm->totface; } @@ -1413,8 +1413,7 @@ static void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r) BM_mesh_elem_index_ensure(bm, BM_VERT); - ee = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); - for ( ; ee; ee=BM_iter_step(&iter), edge_r++) { + for (ee = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); ee; ee = BM_iter_step(&iter), edge_r++) { if (has_bweight) { edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, ee, CD_BWEIGHT)*255.0f); } @@ -1440,7 +1439,7 @@ static void emDM_copyTessFaceArray(DerivedMesh *dm, MFace *face_r) BM_mesh_elem_index_ensure(bm, BM_VERT); - for (i=0; i<bmdm->tc->tottri; i++, face_r++) { + for (i = 0; i < bmdm->tc->tottri; i++, face_r++) { l = bmdm->tc->looptris[i]; ef = l[0]->f; @@ -1499,8 +1498,8 @@ static void emDM_copyPolyArray(DerivedMesh *dm, MPoly *poly_r) static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; - BMesh *bm= bmdm->tc->bm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; + BMesh *bm = bmdm->tc->bm; void *datalayer; datalayer = DM_get_tessface_data_layer(dm, type); @@ -1553,27 +1552,26 @@ static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type) static void emDM_getVertCos(DerivedMesh *dm, float (*cos_r)[3]) { - EditDerivedBMesh *emdm= (EditDerivedBMesh*) dm; + EditDerivedBMesh *emdm = (EditDerivedBMesh *)dm; BMVert *eve; BMIter iter; int i; - i= 0; - BM_ITER_MESH (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH) { - if (emdm->vertexCos) { + if (emdm->vertexCos) { + BM_ITER_MESH_INDEX (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH, i) { copy_v3_v3(cos_r[i], emdm->vertexCos[i]); } - else { + } + else { + BM_ITER_MESH_INDEX (eve, &iter, emdm->tc->bm, BM_VERTS_OF_MESH, i) { copy_v3_v3(cos_r[i], eve->co); } - - i++; } } static void emDM_release(DerivedMesh *dm) { - EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm; + EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; if (DM_release(dm)) { if (bmdm->vertexCos) { @@ -1690,10 +1688,10 @@ DerivedMesh *getEditDerivedBMesh( DM_add_vert_layer(&bmdm->dm, CD_MDEFORMVERT, CD_CALLOC, NULL); - eve = BM_iter_new(&iter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL); - for (i=0; eve; eve=BM_iter_step(&iter), i++) + BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) { DM_set_vert_data(&bmdm->dm, i, CD_MDEFORMVERT, CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT)); + } } if (vertexCos) { @@ -1708,16 +1706,13 @@ DerivedMesh *getEditDerivedBMesh( bmdm->vertexNos = MEM_callocN(sizeof(*bmdm->vertexNos) * bm->totvert, "bmdm_vno"); bmdm->polyNos = MEM_mallocN(sizeof(*bmdm->polyNos)*bm->totface, "bmdm_pno"); - i = 0; - BM_ITER_MESH (efa, &fiter, bm, BM_FACES_OF_MESH) { + BM_ITER_MESH_INDEX (efa, &fiter, bm, BM_FACES_OF_MESH, i) { BM_elem_index_set(efa, i); /* set_inline */ BM_face_normal_update_vcos(bm, efa, bmdm->polyNos[i], (float const (*)[3])vertexCos); - i++; } bm->elem_index_dirty &= ~BM_FACE; - eve=BM_iter_new(&viter, bm, BM_VERTS_OF_MESH, NULL); - for (i=0; eve; eve=BM_iter_step(&viter), i++) { + BM_ITER_MESH_INDEX (eve, &viter, bm, BM_VERTS_OF_MESH, i) { float *no = bmdm->vertexNos[i]; BM_ITER_ELEM (efa, &fiter, eve, BM_FACES_OF_VERT) { add_v3_v3(no, bmdm->polyNos[BM_elem_index_get(efa)]); @@ -1725,14 +1720,14 @@ DerivedMesh *getEditDerivedBMesh( /* following Mesh convention; we use vertex coordinate itself * for normal in this case */ - if (normalize_v3(no)==0.0) { + if (normalize_v3(no) == 0.0f) { copy_v3_v3(no, vertexCos[i]); normalize_v3(no); } } } - return (DerivedMesh*) bmdm; + return (DerivedMesh *)bmdm; } /** diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index c275d4ef0ac..7fb0cf9f0fa 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -756,7 +756,7 @@ static void do_texture_effector(EffectorCache *eff, EffectorData *efd, EffectedP strength= eff->pd->f_strength * efd->falloff; - copy_v3_v3(tex_co,point->loc); + copy_v3_v3(tex_co, point->loc); if (eff->pd->flag & PFIELD_TEX_2D) { float fac=-dot_v3v3(tex_co, efd->nor); @@ -767,7 +767,7 @@ static void do_texture_effector(EffectorCache *eff, EffectorData *efd, EffectedP mul_m4_v3(eff->ob->imat, tex_co); } - hasrgb = multitex_ext(eff->pd->tex, tex_co, NULL,NULL, 0, result); + hasrgb = multitex_ext(eff->pd->tex, tex_co, NULL, NULL, 0, result); if (hasrgb && mode==PFIELD_TEX_RGB) { force[0] = (0.5f - result->tr) * strength; @@ -820,7 +820,7 @@ static void do_physical_effector(EffectorCache *eff, EffectorData *efd, Effected { PartDeflect *pd = eff->pd; RNG *rng = pd->rng; - float force[3]={0,0,0}; + float force[3]={0, 0, 0}; float temp[3]; float fac; float strength = pd->f_strength; @@ -905,9 +905,9 @@ static void do_physical_effector(EffectorCache *eff, EffectorData *efd, Effected else { add_v3_v3v3(temp, efd->vec_to_point2, efd->nor2); } - force[0] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[0], temp[1], temp[2], 2,0,2); - force[1] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[1], temp[2], temp[0], 2,0,2); - force[2] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[2], temp[0], temp[1], 2,0,2); + force[0] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[0], temp[1], temp[2], 2, 0, 2); + force[1] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[1], temp[2], temp[0], 2, 0, 2); + force[2] = -1.0f + 2.0f * BLI_gTurbulence(pd->f_size, temp[2], temp[0], temp[1], 2, 0, 2); mul_v3_fl(force, strength * efd->falloff); break; case PFIELD_DRAG: @@ -993,7 +993,7 @@ void pdDoEffectors(ListBase *effectors, ListBase *colliders, EffectorWeights *we else if (eff->pd->forcefield == PFIELD_TEXTURE) do_texture_effector(eff, &efd, point, force); else { - float temp1[3]={0,0,0}, temp2[3]; + float temp1[3]={0, 0, 0}, temp2[3]; copy_v3_v3(temp1, force); do_physical_effector(eff, &efd, point, force); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index e85432581d5..0414d69785f 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -71,7 +71,7 @@ /* ---------------------- Freeing --------------------------- */ /* Frees the F-Curve itself too, so make sure BLI_remlink is called before calling this... */ -void free_fcurve (FCurve *fcu) +void free_fcurve(FCurve *fcu) { if (fcu == NULL) return; @@ -95,7 +95,7 @@ void free_fcurve (FCurve *fcu) } /* Frees a list of F-Curves */ -void free_fcurves (ListBase *list) +void free_fcurves(ListBase *list) { FCurve *fcu, *fcn; @@ -151,7 +151,7 @@ FCurve *copy_fcurve (FCurve *fcu) } /* duplicate a list of F-Curves */ -void copy_fcurves (ListBase *dst, ListBase *src) +void copy_fcurves(ListBase *dst, ListBase *src) { FCurve *dfcu, *sfcu; @@ -270,7 +270,7 @@ FCurve *iter_step_fcurve (FCurve *fcu_iter, const char rna_path[]) * - dataPrefix: i.e. 'pose.bones[' or 'nodes[' * - dataName: name of entity within "" immediately following the prefix */ -int list_find_data_fcurves (ListBase *dst, ListBase *src, const char *dataPrefix, const char *dataName) +int list_find_data_fcurves(ListBase *dst, ListBase *src, const char *dataPrefix, const char *dataName) { FCurve *fcu; int matches = 0; @@ -357,7 +357,7 @@ FCurve *rna_get_fcurve (PointerRNA *ptr, PropertyRNA *prop, int rnaindex, bActio /* Binary search algorithm for finding where to insert BezTriple. (for use by insert_bezt_fcurve) * Returns the index to insert at (data already at that index will be offset if replace is 0) */ -int binarysearch_bezt_index (BezTriple array[], float frame, int arraylen, short *replace) +int binarysearch_bezt_index(BezTriple array[], float frame, int arraylen, short *replace) { int start=0, end=arraylen; int loopbreaker= 0, maxloop= arraylen * 2; @@ -476,8 +476,8 @@ static void get_fcurve_end_keyframes (FCurve *fcu, BezTriple **first, BezTriple /* Calculate the extents of F-Curve's data */ -void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax, - const short do_sel_only) +void calc_fcurve_bounds(FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax, + const short do_sel_only) { float xminv=999999999.0f, xmaxv=-999999999.0f; float yminv=999999999.0f, ymaxv=-999999999.0f; @@ -558,8 +558,8 @@ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, flo } /* Calculate the extents of F-Curve's keyframes */ -void calc_fcurve_range (FCurve *fcu, float *start, float *end, - const short do_sel_only, const short do_min_length) +void calc_fcurve_range(FCurve *fcu, float *start, float *end, + const short do_sel_only, const short do_min_length) { float min=999999999.0f, max=-999999999.0f; short foundvert= FALSE; @@ -610,7 +610,7 @@ void calc_fcurve_range (FCurve *fcu, float *start, float *end, * Usability of keyframes refers to whether they should be displayed, * and also whether they will have any influence on the final result. */ -short fcurve_are_keyframes_usable (FCurve *fcu) +short fcurve_are_keyframes_usable(FCurve *fcu) { /* F-Curve must exist */ if (fcu == NULL) @@ -671,7 +671,7 @@ short fcurve_are_keyframes_usable (FCurve *fcu) /* Can keyframes be added to F-Curve? * Keyframes can only be added if they are already visible */ -short fcurve_is_keyframable (FCurve *fcu) +short fcurve_is_keyframable(FCurve *fcu) { /* F-Curve's keyframes must be "usable" (i.e. visible + have an effect on final result) */ if (fcurve_are_keyframes_usable(fcu) == 0) @@ -688,7 +688,7 @@ short fcurve_is_keyframable (FCurve *fcu) /* ***************************** Keyframe Column Tools ********************************* */ /* add a BezTriple to a column */ -void bezt_add_to_cfra_elem (ListBase *lb, BezTriple *bezt) +void bezt_add_to_cfra_elem(ListBase *lb, BezTriple *bezt) { CfraElem *ce, *cen; @@ -721,7 +721,7 @@ void bezt_add_to_cfra_elem (ListBase *lb, BezTriple *bezt) /* Basic sampling callback which acts as a wrapper for evaluate_fcurve() * 'data' arg here is unneeded here... */ -float fcurve_samplingcb_evalcurve (FCurve *fcu, void *UNUSED(data), float evaltime) +float fcurve_samplingcb_evalcurve(FCurve *fcu, void *UNUSED(data), float evaltime) { /* assume any interference from drivers on the curve is intended... */ return evaluate_fcurve(fcu, evaltime); @@ -731,7 +731,7 @@ float fcurve_samplingcb_evalcurve (FCurve *fcu, void *UNUSED(data), float evalti /* Main API function for creating a set of sampled curve data, given some callback function * used to retrieve the values to store. */ -void fcurve_store_samples (FCurve *fcu, void *data, int start, int end, FcuSampleFunc sample_cb) +void fcurve_store_samples(FCurve *fcu, void *data, int start, int end, FcuSampleFunc sample_cb) { FPoint *fpt, *new_fpt; int cfra; @@ -775,7 +775,7 @@ void fcurve_store_samples (FCurve *fcu, void *data, int start, int end, FcuSampl /* This function recalculates the handles of an F-Curve * If the BezTriples have been rearranged, sort them first before using this. */ -void calchandles_fcurve (FCurve *fcu) +void calchandles_fcurve(FCurve *fcu) { BezTriple *bezt, *prev, *next; int a= fcu->totvert; @@ -803,7 +803,7 @@ void calchandles_fcurve (FCurve *fcu) BKE_nurb_handle_calc(bezt, prev, next, 1); /* 1==special autohandle */ /* for automatic ease in and out */ - if (ELEM(bezt->h1,HD_AUTO,HD_AUTO_ANIM) && ELEM(bezt->h2,HD_AUTO,HD_AUTO_ANIM)) { + if (ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM) && ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM)) { /* only do this on first or last beztriple */ if ((a == 0) || (a == fcu->totvert-1)) { /* set both handles to have same horizontal value as keyframe */ @@ -828,7 +828,7 @@ void calchandles_fcurve (FCurve *fcu) * -> Vector handles: become 'nothing' when (one half selected AND other not) * - PHASE 2: recalculate handles */ -void testhandles_fcurve (FCurve *fcu, const short use_handle) +void testhandles_fcurve(FCurve *fcu, const short use_handle) { BezTriple *bezt; unsigned int a; @@ -884,7 +884,7 @@ void testhandles_fcurve (FCurve *fcu, const short use_handle) /* This function sorts BezTriples so that they are arranged in chronological order, * as tools working on F-Curves expect that the BezTriples are in order. */ -void sort_time_fcurve (FCurve *fcu) +void sort_time_fcurve(FCurve *fcu) { short ok= 1; @@ -927,7 +927,7 @@ void sort_time_fcurve (FCurve *fcu) } /* This function tests if any BezTriples are out of order, thus requiring a sort */ -short test_time_fcurve (FCurve *fcu) +short test_time_fcurve(FCurve *fcu) { unsigned int a; @@ -1144,8 +1144,8 @@ static float dvar_eval_rotDiff (ChannelDriver *driver, DriverVar *dvar) // TODO: this needs to take into account space conversions... static float dvar_eval_locDiff (ChannelDriver *driver, DriverVar *dvar) { - float loc1[3] = {0.0f,0.0f,0.0f}; - float loc2[3] = {0.0f,0.0f,0.0f}; + float loc1[3] = {0.0f, 0.0f, 0.0f}; + float loc2[3] = {0.0f, 0.0f, 0.0f}; /* get two location values */ // NOTE: for now, these are all just worldspace @@ -1240,7 +1240,7 @@ static float dvar_eval_transChan (ChannelDriver *driver, DriverVar *dvar) Object *ob= (Object *)dtar_id_ensure_proxy_from(dtar->id); bPoseChannel *pchan; float mat[4][4]; - float oldEul[3] = {0.0f,0.0f,0.0f}; + float oldEul[3] = {0.0f, 0.0f, 0.0f}; short useEulers=0, rotOrder=ROT_MODE_EUL; /* check if this target has valid data */ @@ -1394,7 +1394,7 @@ static DriverVarTypeInfo *get_dvar_typeinfo (int type) /* Driver API --------------------------------- */ /* This frees the driver variable itself */ -void driver_free_variable (ChannelDriver *driver, DriverVar *dvar) +void driver_free_variable(ChannelDriver *driver, DriverVar *dvar) { /* sanity checks */ if (dvar == NULL) @@ -1424,7 +1424,7 @@ void driver_free_variable (ChannelDriver *driver, DriverVar *dvar) } /* Change the type of driver variable */ -void driver_change_variable_type (DriverVar *dvar, int type) +void driver_change_variable_type(DriverVar *dvar, int type) { DriverVarTypeInfo *dvti= get_dvar_typeinfo(type); @@ -1547,7 +1547,7 @@ ChannelDriver *fcurve_copy_driver (ChannelDriver *driver) /* Driver Evaluation -------------------------- */ /* Evaluate a Driver Variable to get a value that contributes to the final */ -float driver_get_variable_value (ChannelDriver *driver, DriverVar *dvar) +float driver_get_variable_value(ChannelDriver *driver, DriverVar *dvar) { DriverVarTypeInfo *dvti; @@ -1656,7 +1656,7 @@ static float evaluate_driver (ChannelDriver *driver, const float evaltime) driver->curval= 0.0f; } else { - /* this evaluates the expression using Python,and returns its result: + /* this evaluates the expression using Python, and returns its result: * - on errors it reports, then returns 0.0f */ driver->curval= BPY_driver_exec(driver, evaltime); @@ -2076,7 +2076,7 @@ static float fcurve_eval_samples (FCurve *fcu, FPoint *fpts, float evaltime) /* Evaluate and return the value of the given F-Curve at the specified frame ("evaltime") * Note: this is also used for drivers */ -float evaluate_fcurve (FCurve *fcu, float evaltime) +float evaluate_fcurve(FCurve *fcu, float evaltime) { float cvalue= 0.0f; float devaltime; @@ -2116,13 +2116,13 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) } /* Calculate the value of the given F-Curve at the given frame, and set its curval */ -void calculate_fcurve (FCurve *fcu, float ctime) +void calculate_fcurve(FCurve *fcu, float ctime) { /* only calculate + set curval (overriding the existing value) if curve has * any data which warrants this... */ - if ( (fcu->totvert) || (fcu->driver && !(fcu->driver->flag & DRIVER_FLAG_INVALID)) || - list_has_suitable_fmodifier(&fcu->modifiers, 0, FMI_TYPE_GENERATE_CURVE) ) + if ((fcu->totvert) || (fcu->driver && !(fcu->driver->flag & DRIVER_FLAG_INVALID)) || + list_has_suitable_fmodifier(&fcu->modifiers, 0, FMI_TYPE_GENERATE_CURVE)) { /* calculate and set curval (evaluates driver too if necessary) */ fcu->curval= evaluate_fcurve(fcu, ctime); diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c index a930818dd15..9be599ac66c 100644 --- a/source/blender/blenkernel/intern/fluidsim.c +++ b/source/blender/blenkernel/intern/fluidsim.c @@ -78,7 +78,8 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob, int *tris; dm = mesh_create_derived_index_render(scene, ob, CD_MASK_BAREMESH, modifierIndex); - //dm = mesh_create_derived_no_deform(ob,NULL); + + DM_ensure_tessface(dm); mvert = dm->getVertArray(dm); mface = dm->getTessFaceArray(dm); @@ -86,7 +87,7 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob, totface = dm->getNumTessFaces(dm); *numVertices = totvert; - verts = MEM_callocN( totvert*3*sizeof(float), "elbeemmesh_vertices"); + verts = MEM_callocN(totvert*3*sizeof(float), "elbeemmesh_vertices"); for (i=0; i<totvert; i++) { copy_v3_v3(&verts[i*3], mvert[i].co); if (useGlobalCoords) { mul_m4_v3(ob->obmat, &verts[i*3]); } @@ -98,7 +99,7 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob, if (mface[i].v4) { countTris++; } } *numTriangles = countTris; - tris = MEM_callocN( countTris*3*sizeof(int), "elbeemmesh_triangles"); + tris = MEM_callocN(countTris*3*sizeof(int), "elbeemmesh_triangles"); countTris = 0; for (i=0; i<totface; i++) { int face[4]; @@ -122,3 +123,4 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob, dm->release(dm); } + diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index 0b722aabd4c..92c73b23239 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -1058,7 +1058,7 @@ FModifier *copy_fmodifier (FModifier *src) } /* Duplicate all of the F-Modifiers in the Modifier stacks */ -void copy_fmodifiers (ListBase *dst, ListBase *src) +void copy_fmodifiers(ListBase *dst, ListBase *src) { FModifier *fcm, *srcfcm; @@ -1081,7 +1081,7 @@ void copy_fmodifiers (ListBase *dst, ListBase *src) } /* Remove and free the given F-Modifier from the given stack */ -int remove_fmodifier (ListBase *modifiers, FModifier *fcm) +int remove_fmodifier(ListBase *modifiers, FModifier *fcm) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); @@ -1112,7 +1112,7 @@ int remove_fmodifier (ListBase *modifiers, FModifier *fcm) } /* Remove all of a given F-Curve's modifiers */ -void free_fmodifiers (ListBase *modifiers) +void free_fmodifiers(ListBase *modifiers) { FModifier *fcm, *fmn; @@ -1147,7 +1147,7 @@ FModifier *find_active_fmodifier (ListBase *modifiers) } /* Set the active F-Modifier */ -void set_active_fmodifier (ListBase *modifiers, FModifier *fcm) +void set_active_fmodifier(ListBase *modifiers, FModifier *fcm) { FModifier *fm; @@ -1168,7 +1168,7 @@ void set_active_fmodifier (ListBase *modifiers, FModifier *fcm) * - mtype - type of modifier (if 0, doesn't matter) * - acttype - type of action to perform (if -1, doesn't matter) */ -short list_has_suitable_fmodifier (ListBase *modifiers, int mtype, short acttype) +short list_has_suitable_fmodifier(ListBase *modifiers, int mtype, short acttype) { FModifier *fcm; @@ -1252,7 +1252,7 @@ static float eval_fmodifier_influence (FModifier *fcm, float evaltime) * so nevaltime gets set to whatever the last time-modifying modifier likes... * - we start from the end of the stack, as only the last one matters for now */ -float evaluate_time_fmodifiers (ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) +float evaluate_time_fmodifiers(ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) { FModifier *fcm; @@ -1301,7 +1301,7 @@ float evaluate_time_fmodifiers (ListBase *modifiers, FCurve *fcu, float cvalue, /* Evalautes the given set of F-Curve Modifiers using the given data * Should only be called after evaluate_time_fmodifiers() has been called... */ -void evaluate_value_fmodifiers (ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) +void evaluate_value_fmodifiers(ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) { FModifier *fcm; @@ -1338,7 +1338,7 @@ void evaluate_value_fmodifiers (ListBase *modifiers, FCurve *fcu, float *cvalue, /* Bake modifiers for given F-Curve to curve sample data, in the frame range defined * by start and end (inclusive). */ -void fcurve_bake_modifiers (FCurve *fcu, int start, int end) +void fcurve_bake_modifiers(FCurve *fcu, int start, int end) { ChannelDriver *driver; diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 5d7960a9823..a7f01393a02 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -317,7 +317,7 @@ static void build_underline(Curve *cu, float x1, float y1, float x2, float y2, i Nurb *nu2; BPoint *bp; - nu2 =(Nurb*) MEM_callocN(sizeof(Nurb),"underline_nurb"); + nu2 =(Nurb*) MEM_callocN(sizeof(Nurb), "underline_nurb"); if (nu2 == NULL) return; nu2->resolu= cu->resolu; nu2->bezt = NULL; @@ -331,7 +331,7 @@ static void build_underline(Curve *cu, float x1, float y1, float x2, float y2, i nu2->orderv = 1; nu2->flagu = CU_NURB_CYCLIC; - bp = (BPoint*)MEM_callocN(4 * sizeof(BPoint),"underline_bp"); + bp = (BPoint*)MEM_callocN(4 * sizeof(BPoint), "underline_bp"); if (bp == NULL) { MEM_freeN(nu2); return; @@ -382,7 +382,7 @@ static void buildchar(Main *bmain, Curve *cu, unsigned long character, CharInfo } #endif - /* make a copy at distance ofsx,ofsy with shear*/ + /* make a copy at distance ofsx, ofsy with shear*/ fsize= cu->fsize; shear= cu->shear; si= (float)sin(rot); @@ -398,7 +398,7 @@ static void buildchar(Main *bmain, Curve *cu, unsigned long character, CharInfo while (nu1) { bezt1 = nu1->bezt; if (bezt1) { - nu2 =(Nurb*) MEM_mallocN(sizeof(Nurb),"duplichar_nurb"); + nu2 =(Nurb*) MEM_mallocN(sizeof(Nurb), "duplichar_nurb"); if (nu2 == NULL) break; memcpy(nu2, nu1, sizeof(struct Nurb)); nu2->resolu= cu->resolu; @@ -416,7 +416,7 @@ static void buildchar(Main *bmain, Curve *cu, unsigned long character, CharInfo /* nu2->trim.last = 0; */ i = nu2->pntsu; - bezt2 = (BezTriple*)MEM_mallocN(i * sizeof(BezTriple),"duplichar_bezt2"); + bezt2 = (BezTriple*)MEM_mallocN(i * sizeof(BezTriple), "duplichar_bezt2"); if (bezt2 == NULL) { MEM_freeN(nu2); break; @@ -583,14 +583,14 @@ struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int m /* calc offset and rotation of each char */ ct = chartransdata = - (struct chartrans*)MEM_callocN((slen+1)* sizeof(struct chartrans),"buildtext"); + (struct chartrans*)MEM_callocN((slen+1)* sizeof(struct chartrans), "buildtext"); /* We assume the worst case: 1 character per line (is freed at end anyway) */ - linedata= MEM_mallocN(sizeof(float)*(slen*2 + 1),"buildtext2"); - linedata2= MEM_mallocN(sizeof(float)*(slen*2 + 1),"buildtext3"); - linedata3= MEM_callocN(sizeof(float)*(slen*2 + 1),"buildtext4"); - linedata4= MEM_callocN(sizeof(float)*(slen*2 + 1),"buildtext5"); + linedata = MEM_mallocN(sizeof(float) * (slen * 2 + 1), "buildtext2"); + linedata2 = MEM_mallocN(sizeof(float) * (slen * 2 + 1), "buildtext3"); + linedata3 = MEM_callocN(sizeof(float) * (slen * 2 + 1), "buildtext4"); + linedata4 = MEM_callocN(sizeof(float) * (slen * 2 + 1), "buildtext5"); linedist= cu->linedist; diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 811cb881f6e..9ea4eafdd73 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -54,7 +54,7 @@ /* --------- Memory Management ------------ */ /* Free strokes belonging to a gp-frame */ -void free_gpencil_strokes (bGPDframe *gpf) +void free_gpencil_strokes(bGPDframe *gpf) { bGPDstroke *gps, *gpsn; @@ -72,7 +72,7 @@ void free_gpencil_strokes (bGPDframe *gpf) } /* Free all of a gp-layer's frames */ -void free_gpencil_frames (bGPDlayer *gpl) +void free_gpencil_frames(bGPDlayer *gpl) { bGPDframe *gpf, *gpfn; @@ -90,7 +90,7 @@ void free_gpencil_frames (bGPDlayer *gpl) } /* Free all of the gp-layers for a viewport (list should be &gpd->layers or so) */ -void free_gpencil_layers (ListBase *list) +void free_gpencil_layers(ListBase *list) { bGPDlayer *gpl, *gpln; @@ -108,7 +108,7 @@ void free_gpencil_layers (ListBase *list) } /* Free all of GPencil datablock's related data, but not the block itself */ -void free_gpencil_data (bGPdata *gpd) +void free_gpencil_data(bGPdata *gpd) { /* free layers */ free_gpencil_layers(&gpd->layers); @@ -299,7 +299,7 @@ bGPdata *gpencil_data_duplicate (bGPdata *src) /* -------- GP-Frame API ---------- */ /* delete the last stroke of the given frame */ -void gpencil_frame_delete_laststroke (bGPDlayer *gpl, bGPDframe *gpf) +void gpencil_frame_delete_laststroke(bGPDlayer *gpl, bGPDframe *gpf) { bGPDstroke *gps= (gpf) ? gpf->strokes.last : NULL; int cfra = (gpf) ? gpf->framenum : 0; /* assume that the current frame was not locked */ @@ -447,7 +447,7 @@ bGPDframe *gpencil_layer_getframe (bGPDlayer *gpl, int cframe, short addnew) } /* delete the given frame from a layer */ -void gpencil_layer_delframe (bGPDlayer *gpl, bGPDframe *gpf) +void gpencil_layer_delframe(bGPDlayer *gpl, bGPDframe *gpf) { /* error checking */ if (ELEM(NULL, gpl, gpf)) @@ -479,7 +479,7 @@ bGPDlayer *gpencil_layer_getactive (bGPdata *gpd) } /* set the active gp-layer */ -void gpencil_layer_setactive (bGPdata *gpd, bGPDlayer *active) +void gpencil_layer_setactive(bGPdata *gpd, bGPDlayer *active) { bGPDlayer *gpl; @@ -496,7 +496,7 @@ void gpencil_layer_setactive (bGPdata *gpd, bGPDlayer *active) } /* delete the active gp-layer */ -void gpencil_layer_delactive (bGPdata *gpd) +void gpencil_layer_delactive(bGPdata *gpd) { bGPDlayer *gpl= gpencil_layer_getactive(gpd); diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c index cf0538b4395..204b2b08563 100644 --- a/source/blender/blenkernel/intern/group.c +++ b/source/blender/blenkernel/intern/group.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -176,7 +175,7 @@ static int add_to_group_internal(Group *group, Object *ob) } go= MEM_callocN(sizeof(GroupObject), "groupobject"); - BLI_addtail( &group->gobject, go); + BLI_addtail(&group->gobject, go); go->ob= ob; diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c index c7dec3d8f4b..c3bd36348c6 100644 --- a/source/blender/blenkernel/intern/idcode.c +++ b/source/blender/blenkernel/intern/idcode.c @@ -53,7 +53,7 @@ static IDType idtypes[]= { { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE}, { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE}, { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE}, - { ID_GD, "GPencil", "grease_pencil",IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */ + { ID_GD, "GPencil", "grease_pencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */ { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE}, { ID_ID, "ID", "ids", 0}, /* plural is fake */ { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE}, diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 5c9c942cc6c..9c5c99592ed 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -1036,38 +1036,38 @@ char BKE_imtype_valid_depths(const char imtype) * creator.c help info */ char BKE_imtype_from_arg(const char *imtype_arg) { - if (!strcmp(imtype_arg,"TGA")) return R_IMF_IMTYPE_TARGA; - else if (!strcmp(imtype_arg,"IRIS")) return R_IMF_IMTYPE_IRIS; + if (!strcmp(imtype_arg, "TGA")) return R_IMF_IMTYPE_TARGA; + else if (!strcmp(imtype_arg, "IRIS")) return R_IMF_IMTYPE_IRIS; #ifdef WITH_DDS - else if (!strcmp(imtype_arg,"DDS")) return R_IMF_IMTYPE_DDS; + else if (!strcmp(imtype_arg, "DDS")) return R_IMF_IMTYPE_DDS; #endif - else if (!strcmp(imtype_arg,"JPEG")) return R_IMF_IMTYPE_JPEG90; - else if (!strcmp(imtype_arg,"IRIZ")) return R_IMF_IMTYPE_IRIZ; - else if (!strcmp(imtype_arg,"RAWTGA")) return R_IMF_IMTYPE_RAWTGA; - else if (!strcmp(imtype_arg,"AVIRAW")) return R_IMF_IMTYPE_AVIRAW; - else if (!strcmp(imtype_arg,"AVIJPEG")) return R_IMF_IMTYPE_AVIJPEG; - else if (!strcmp(imtype_arg,"PNG")) return R_IMF_IMTYPE_PNG; - else if (!strcmp(imtype_arg,"AVICODEC")) return R_IMF_IMTYPE_AVICODEC; - else if (!strcmp(imtype_arg,"QUICKTIME")) return R_IMF_IMTYPE_QUICKTIME; - else if (!strcmp(imtype_arg,"BMP")) return R_IMF_IMTYPE_BMP; + else if (!strcmp(imtype_arg, "JPEG")) return R_IMF_IMTYPE_JPEG90; + else if (!strcmp(imtype_arg, "IRIZ")) return R_IMF_IMTYPE_IRIZ; + else if (!strcmp(imtype_arg, "RAWTGA")) return R_IMF_IMTYPE_RAWTGA; + else if (!strcmp(imtype_arg, "AVIRAW")) return R_IMF_IMTYPE_AVIRAW; + else if (!strcmp(imtype_arg, "AVIJPEG")) return R_IMF_IMTYPE_AVIJPEG; + else if (!strcmp(imtype_arg, "PNG")) return R_IMF_IMTYPE_PNG; + else if (!strcmp(imtype_arg, "AVICODEC")) return R_IMF_IMTYPE_AVICODEC; + else if (!strcmp(imtype_arg, "QUICKTIME")) return R_IMF_IMTYPE_QUICKTIME; + else if (!strcmp(imtype_arg, "BMP")) return R_IMF_IMTYPE_BMP; #ifdef WITH_HDR - else if (!strcmp(imtype_arg,"HDR")) return R_IMF_IMTYPE_RADHDR; + else if (!strcmp(imtype_arg, "HDR")) return R_IMF_IMTYPE_RADHDR; #endif #ifdef WITH_TIFF - else if (!strcmp(imtype_arg,"TIFF")) return R_IMF_IMTYPE_TIFF; + else if (!strcmp(imtype_arg, "TIFF")) return R_IMF_IMTYPE_TIFF; #endif #ifdef WITH_OPENEXR - else if (!strcmp(imtype_arg,"EXR")) return R_IMF_IMTYPE_OPENEXR; - else if (!strcmp(imtype_arg,"MULTILAYER")) return R_IMF_IMTYPE_MULTILAYER; + else if (!strcmp(imtype_arg, "EXR")) return R_IMF_IMTYPE_OPENEXR; + else if (!strcmp(imtype_arg, "MULTILAYER")) return R_IMF_IMTYPE_MULTILAYER; #endif - else if (!strcmp(imtype_arg,"MPEG")) return R_IMF_IMTYPE_FFMPEG; - else if (!strcmp(imtype_arg,"FRAMESERVER")) return R_IMF_IMTYPE_FRAMESERVER; + else if (!strcmp(imtype_arg, "MPEG")) return R_IMF_IMTYPE_FFMPEG; + else if (!strcmp(imtype_arg, "FRAMESERVER")) return R_IMF_IMTYPE_FRAMESERVER; #ifdef WITH_CINEON - else if (!strcmp(imtype_arg,"CINEON")) return R_IMF_IMTYPE_CINEON; - else if (!strcmp(imtype_arg,"DPX")) return R_IMF_IMTYPE_DPX; + else if (!strcmp(imtype_arg, "CINEON")) return R_IMF_IMTYPE_CINEON; + else if (!strcmp(imtype_arg, "DPX")) return R_IMF_IMTYPE_DPX; #endif #ifdef WITH_OPENJPEG - else if (!strcmp(imtype_arg,"JP2")) return R_IMF_IMTYPE_JP2; + else if (!strcmp(imtype_arg, "JP2")) return R_IMF_IMTYPE_JP2; #endif else return R_IMF_IMTYPE_INVALID; } @@ -1118,7 +1118,7 @@ int BKE_add_image_extension(char *string, const char imtype) } #endif #ifdef WITH_OPENEXR - else if ( ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER)) { + else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER)) { if (!BLI_testextensie(string, ".exr")) extension= ".exr"; } @@ -1144,7 +1144,7 @@ int BKE_add_image_extension(char *string, const char imtype) } #endif else { // R_IMF_IMTYPE_AVICODEC, R_IMF_IMTYPE_AVIRAW, R_IMF_IMTYPE_AVIJPEG, R_IMF_IMTYPE_JPEG90, R_IMF_IMTYPE_QUICKTIME etc - if (!( BLI_testextensie(string, ".jpg") || BLI_testextensie(string, ".jpeg"))) + if (!(BLI_testextensie(string, ".jpg") || BLI_testextensie(string, ".jpeg"))) extension= ".jpg"; } @@ -2603,7 +2603,7 @@ int BKE_image_user_get_frame(const ImageUser *iuser, int cfra, int fieldnr) /* cyclic */ if (iuser->cycl) { - cfra= ( (cfra) % len ); + cfra= ((cfra) % len); if (cfra < 0) cfra+= len; if (cfra==0) cfra= len; } @@ -2621,7 +2621,7 @@ int BKE_image_user_get_frame(const ImageUser *iuser, int cfra, int fieldnr) framenr+= iuser->offset; if (iuser->cycl) { - framenr= ( (framenr) % len ); + framenr= ((framenr) % len); while (framenr < 0) framenr+= len; if (framenr==0) framenr= len; } diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c index b593419db9f..d4861a27057 100644 --- a/source/blender/blenkernel/intern/implicit.c +++ b/source/blender/blenkernel/intern/implicit.c @@ -87,7 +87,7 @@ void itstart(void) } static void itend(void) { - gettimeofday(&_itend,&itz); + gettimeofday(&_itend, &itz); } double itval(void) { @@ -98,8 +98,8 @@ double itval(void) } #endif -static float I[3][3] = {{1,0,0},{0,1,0},{0,0,1}}; -static float ZERO[3][3] = {{0,0,0}, {0,0,0}, {0,0,0}}; +static float I[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; +static float ZERO[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; /* #define C99 @@ -119,9 +119,9 @@ struct Cloth; typedef float lfVector[3]; typedef struct fmatrix3x3 { float m[3][3]; /* 3x3 matrix */ - unsigned int c,r; /* column and row number */ + unsigned int c, r; /* column and row number */ int pinned; /* is this vertex allowed to move? */ - float n1,n2,n3; /* three normal vectors for collision constrains */ + float n1, n2, n3; /* three normal vectors for collision constrains */ unsigned int vcount; /* vertex count */ unsigned int scount; /* spring count */ } fmatrix3x3; @@ -168,7 +168,7 @@ DO_INLINE void mul_fvectorT_fvectorS(float to[3][3], float vectorA[3], float vec /* printf vector[3] on console: for debug output */ static void print_fvector(float m3[3]) { - printf("%f\n%f\n%f\n\n",m3[0],m3[1],m3[2]); + printf("%f\n%f\n%f\n\n", m3[0], m3[1], m3[2]); } /////////////////////////// @@ -303,9 +303,9 @@ DO_INLINE void sub_lfvector_lfvector(float (*to)[3], float (*fLongVectorA)[3], f /* printf 3x3 matrix on console: for debug output */ static void print_fmatrix(float m3[3][3]) { - printf("%f\t%f\t%f\n",m3[0][0],m3[0][1],m3[0][2]); - printf("%f\t%f\t%f\n",m3[1][0],m3[1][1],m3[1][2]); - printf("%f\t%f\t%f\n\n",m3[2][0],m3[2][1],m3[2][2]); + printf("%f\t%f\t%f\n", m3[0][0], m3[0][1], m3[0][2]); + printf("%f\t%f\t%f\n", m3[1][0], m3[1][1], m3[1][2]); + printf("%f\t%f\t%f\n\n", m3[2][0], m3[2][1], m3[2][2]); } #endif @@ -367,9 +367,9 @@ DO_INLINE void inverse_fmatrix(float to[3][3], float from[3][3]) /* STATUS: verified */ DO_INLINE void mul_fmatrix_S(float matrix[3][3], float scalar) { - mul_fvector_S(matrix[0], matrix[0],scalar); - mul_fvector_S(matrix[1], matrix[1],scalar); - mul_fvector_S(matrix[2], matrix[2],scalar); + mul_fvector_S(matrix[0], matrix[0], scalar); + mul_fvector_S(matrix[1], matrix[1], scalar); + mul_fvector_S(matrix[2], matrix[2], scalar); } /* a vector multiplied by a 3x3 matrix */ @@ -385,17 +385,17 @@ DO_INLINE void mul_fvector_fmatrix(float *to, float *from, float matrix[3][3]) /* STATUS: verified */ DO_INLINE void mul_fmatrix_fvector(float *to, float matrix[3][3], float from[3]) { - to[0] = dot_v3v3(matrix[0],from); - to[1] = dot_v3v3(matrix[1],from); - to[2] = dot_v3v3(matrix[2],from); + to[0] = dot_v3v3(matrix[0], from); + to[1] = dot_v3v3(matrix[1], from); + to[2] = dot_v3v3(matrix[2], from); } /* 3x3 matrix multiplied by a 3x3 matrix */ /* STATUS: verified */ DO_INLINE void mul_fmatrix_fmatrix(float to[3][3], float matrixA[3][3], float matrixB[3][3]) { - mul_fvector_fmatrix(to[0], matrixA[0],matrixB); - mul_fvector_fmatrix(to[1], matrixA[1],matrixB); - mul_fvector_fmatrix(to[2], matrixA[2],matrixB); + mul_fvector_fmatrix(to[0], matrixA[0], matrixB); + mul_fvector_fmatrix(to[1], matrixA[1], matrixB); + mul_fvector_fmatrix(to[2], matrixA[2], matrixB); } /* 3x3 matrix addition with 3x3 matrix */ DO_INLINE void add_fmatrix_fmatrix(float to[3][3], float matrixA[3][3], float matrixB[3][3]) @@ -459,9 +459,9 @@ DO_INLINE void muladd_fvector_fmatrix(float to[3], float from[3], float matrix[3 /* 3x3 matrix multiplied and added to/by a 3x3 matrix and added to another 3x3 matrix */ DO_INLINE void muladd_fmatrix_fmatrix(float to[3][3], float matrixA[3][3], float matrixB[3][3]) { - muladd_fvector_fmatrix(to[0], matrixA[0],matrixB); - muladd_fvector_fmatrix(to[1], matrixA[1],matrixB); - muladd_fvector_fmatrix(to[2], matrixA[2],matrixB); + muladd_fvector_fmatrix(to[0], matrixA[0], matrixB); + muladd_fvector_fmatrix(to[1], matrixA[1], matrixB); + muladd_fvector_fmatrix(to[2], matrixA[2], matrixB); } /* a vector multiplied and sub'd to/by a 3x3 matrix */ DO_INLINE void mulsub_fvector_fmatrix(float to[3], float from[3], float matrix[3][3]) @@ -473,9 +473,9 @@ DO_INLINE void mulsub_fvector_fmatrix(float to[3], float from[3], float matrix[3 /* 3x3 matrix multiplied and sub'd to/by a 3x3 matrix and added to another 3x3 matrix */ DO_INLINE void mulsub_fmatrix_fmatrix(float to[3][3], float matrixA[3][3], float matrixB[3][3]) { - mulsub_fvector_fmatrix(to[0], matrixA[0],matrixB); - mulsub_fvector_fmatrix(to[1], matrixA[1],matrixB); - mulsub_fvector_fmatrix(to[2], matrixA[2],matrixB); + mulsub_fvector_fmatrix(to[0], matrixA[0], matrixB); + mulsub_fvector_fmatrix(to[1], matrixA[1], matrixB); + mulsub_fvector_fmatrix(to[2], matrixA[2], matrixB); } /* 3x3 matrix multiplied+added by a vector */ /* STATUS: verified */ @@ -531,7 +531,7 @@ DO_INLINE void del_bfmatrix(fmatrix3x3 *matrix) DO_INLINE void cp_bfmatrix(fmatrix3x3 *to, fmatrix3x3 *from) { // TODO bounds checking - memcpy(to, from, sizeof(fmatrix3x3) * (from[0].vcount+from[0].scount) ); + memcpy(to, from, sizeof(fmatrix3x3) * (from[0].vcount+from[0].scount)); } /* init big matrix */ @@ -549,8 +549,8 @@ DO_INLINE void init_bfmatrix(fmatrix3x3 *matrix, float m3[3][3]) // slow in parallel DO_INLINE void initdiag_bfmatrix(fmatrix3x3 *matrix, float m3[3][3]) { - unsigned int i,j; - float tmatrix[3][3] = {{0,0,0},{0,0,0},{0,0,0}}; + unsigned int i, j; + float tmatrix[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; for (i = 0; i < matrix[0].vcount; i++) { cp_fmatrix(matrix[i].m, m3); @@ -701,7 +701,7 @@ typedef struct Implicit_Data fmatrix3x3 *A, *dFdV, *dFdX, *S, *P, *Pinv, *bigI, *M; } Implicit_Data; -int implicit_init (Object *UNUSED(ob), ClothModifierData *clmd) +int implicit_init(Object *UNUSED(ob), ClothModifierData *clmd) { unsigned int i = 0; unsigned int pinned = 0; @@ -785,7 +785,7 @@ int implicit_init (Object *UNUSED(ob), ClothModifierData *clmd) return 1; } -int implicit_free (ClothModifierData *clmd) +int implicit_free(ClothModifierData *clmd) { Implicit_Data *id; Cloth *cloth; @@ -824,14 +824,14 @@ int implicit_free (ClothModifierData *clmd) DO_INLINE float fb(float length, float L) { float x = length/L; - return (-11.541f*pow(x,4)+34.193f*pow(x,3)-39.083f*pow(x,2)+23.116f*x-9.713f); + return (-11.541f*pow(x, 4)+34.193f*pow(x, 3)-39.083f*pow(x, 2)+23.116f*x-9.713f); } DO_INLINE float fbderiv(float length, float L) { float x = length/L; - return (-46.164f*pow(x,3)+102.579f*pow(x,2)-78.166f*x+23.116f); + return (-46.164f*pow(x, 3)+102.579f*pow(x, 2)-78.166f*x+23.116f); } DO_INLINE float fbstar(float length, float L, float kb, float cb) @@ -887,12 +887,12 @@ static int cg_filtered(lfVector *ldV, fmatrix3x3 *lA, lfVector *lB, lfVector *z add_lfvector_lfvector(ldV, ldV, z, numverts); - // r = B - Mul(tmp,A,X); // just use B if X known to be zero + // r = B - Mul(tmp, A, X); // just use B if X known to be zero cp_lfvector(r, lB, numverts); mul_bfmatrix_lfvector(tmp, lA, ldV); sub_lfvector_lfvector(r, r, tmp, numverts); - filter(r,S); + filter(r, S); cp_lfvector(d, r, numverts); @@ -900,10 +900,10 @@ static int cg_filtered(lfVector *ldV, fmatrix3x3 *lA, lfVector *lB, lfVector *z starget = s * sqrt(conjgrad_epsilon); while (s>starget && conjgrad_loopcount < conjgrad_looplimit) { - // Mul(q,A,d); // q = A*d; + // Mul(q, A, d); // q = A*d; mul_bfmatrix_lfvector(q, lA, d); - filter(q,S); + filter(q, S); a = s/dot_lfvector(d, q, numverts); @@ -919,7 +919,7 @@ static int cg_filtered(lfVector *ldV, fmatrix3x3 *lA, lfVector *lB, lfVector *z //d = r+d*(s/s_prev); add_lfvector_lfvectorS(d, r, d, (s/s_prev), numverts); - filter(d,S); + filter(d, S); conjgrad_loopcount++; } @@ -1126,7 +1126,7 @@ static int cg_filtered_pre(lfVector *dv, fmatrix3x3 *lA, lfVector *lB, lfVector DO_INLINE void dfdx_spring_type1(float to[3][3], float extent[3], float length, float L, float dot, float k) { // dir is unit length direction, rest is spring's restlength, k is spring constant. - // return (outerprod(dir,dir)*k + (I - outerprod(dir,dir))*(k - ((k*L)/length))); + // return (outerprod(dir, dir)*k + (I - outerprod(dir, dir))*(k - ((k*L)/length))); float temp[3][3]; float temp1 = k*(1.0 - (L/length)); @@ -1148,7 +1148,7 @@ DO_INLINE void dfdx_spring_type1(float to[3][3], float extent[3], float length, DO_INLINE void dfdx_spring_type2(float to[3][3], float dir[3], float length, float L, float k, float cb) { - // return outerprod(dir,dir)*fbstar_jacobi(length, L, k, cb); + // return outerprod(dir, dir)*fbstar_jacobi(length, L, k, cb); mul_fvectorT_fvectorS(to, dir, dir, fbstar_jacobi(length, L, k, cb)); } @@ -1159,10 +1159,10 @@ DO_INLINE void dfdv_damp(float to[3][3], float dir[3], float damping) } -DO_INLINE void dfdx_spring(float to[3][3], float dir[3],float length,float L,float k) +DO_INLINE void dfdx_spring(float to[3][3], float dir[3], float length, float L, float k) { // dir is unit length direction, rest is spring's restlength, k is spring constant. - //return ( (I-outerprod(dir,dir))*Min(1.0f,rest/length) - I) * -k; + //return ( (I-outerprod(dir, dir))*Min(1.0f, rest/length) - I) * -k; mul_fvectorT_fvector(to, dir, dir); sub_fmatrix_fmatrix(to, I, to); @@ -1172,13 +1172,13 @@ DO_INLINE void dfdx_spring(float to[3][3], float dir[3],float length,float L,fl } // unused atm -DO_INLINE void dfdx_damp(float to[3][3], float dir[3],float length,const float vel[3],float rest,float damping) +DO_INLINE void dfdx_damp(float to[3][3], float dir[3], float length, const float vel[3], float rest, float damping) { // inner spring damping vel is the relative velocity of the endpoints. - // return (I-outerprod(dir,dir)) * (-damping * -(dot(dir,vel)/Max(length,rest))); + // return (I-outerprod(dir, dir)) * (-damping * -(dot(dir, vel)/Max(length, rest))); mul_fvectorT_fvector(to, dir, dir); sub_fmatrix_fmatrix(to, I, to); - mul_fmatrix_S(to, (-damping * -(dot_v3v3(dir,vel)/MAX2(length,rest)))); + mul_fmatrix_S(to, (-damping * -(dot_v3v3(dir, vel)/MAX2(length, rest)))); } @@ -1188,17 +1188,17 @@ DO_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s, ClothVertex *verts = cloth->verts; float extent[3]; float length = 0, dot = 0; - float dir[3] = {0,0,0}; + float dir[3] = {0, 0, 0}; float vel[3]; float k = 0.0f; float L = s->restlen; float cb; /* = clmd->sim_parms->structural; */ /*UNUSED*/ - float nullf[3] = {0,0,0}; - float stretch_force[3] = {0,0,0}; - float bending_force[3] = {0,0,0}; - float damping_force[3] = {0,0,0}; - float nulldfdx[3][3]={ {0,0,0}, {0,0,0}, {0,0,0}}; + float nullf[3] = {0, 0, 0}; + float stretch_force[3] = {0, 0, 0}; + float bending_force[3] = {0, 0, 0}; + float damping_force[3] = {0, 0, 0}; + float nulldfdx[3][3]={ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; float scaling = 0.0; @@ -1306,7 +1306,7 @@ DO_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s, mul_fvector_S(bending_force, dir, fbstar(length, L, k, cb)); VECADD(s->f, s->f, bending_force); - dfdx_spring_type2(s->dfdx, dir, length,L, k, cb); + dfdx_spring_type2(s->dfdx, dir, length, L, k, cb); } } } @@ -1334,7 +1334,7 @@ DO_INLINE void cloth_apply_spring_force(ClothModifierData *UNUSED(clmd), ClothSp static void CalcFloat( float *v1, float *v2, float *v3, float *n) { - float n1[3],n2[3]; + float n1[3], n2[3]; n1[0]= v1[0]-v2[0]; n2[0]= v2[0]-v3[0]; @@ -1350,7 +1350,7 @@ static void CalcFloat( float *v1, float *v2, float *v3, float *n) static void CalcFloat4( float *v1, float *v2, float *v3, float *v4, float *n) { /* real cross! */ - float n1[3],n2[3]; + float n1[3], n2[3]; n1[0]= v1[0]-v3[0]; n1[1]= v1[1]-v3[1]; @@ -1512,7 +1512,7 @@ static void hair_velocity_smoothing(ClothModifierData *clmd, lfVector *lF, lfVec static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVector *lF, lfVector *lX, lfVector *lV, fmatrix3x3 *dFdV, fmatrix3x3 *dFdX, ListBase *effectors, float time, fmatrix3x3 *M) { - /* Collect forces and derivatives: F,dFdX,dFdV */ + /* Collect forces and derivatives: F, dFdX, dFdV */ Cloth *cloth = clmd->clothObject; unsigned int i = 0; float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */ @@ -1568,17 +1568,17 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec } for (i = 0; i < cloth->numfaces; i++) { - float trinormal[3]={0,0,0}; // normalized triangle normal - float triunnormal[3]={0,0,0}; // not-normalized-triangle normal - float tmp[3]={0,0,0}; + float trinormal[3]={0, 0, 0}; // normalized triangle normal + float triunnormal[3]={0, 0, 0}; // not-normalized-triangle normal + float tmp[3]={0, 0, 0}; float factor = (mfaces[i].v4) ? 0.25 : 1.0 / 3.0; factor *= 0.02; // calculate face normal if (mfaces[i].v4) - CalcFloat4(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],lX[mfaces[i].v4],triunnormal); + CalcFloat4(lX[mfaces[i].v1], lX[mfaces[i].v2], lX[mfaces[i].v3], lX[mfaces[i].v4], triunnormal); else - CalcFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],triunnormal); + CalcFloat(lX[mfaces[i].v1], lX[mfaces[i].v2], lX[mfaces[i].v3], triunnormal); normalize_v3_v3(trinormal, triunnormal); @@ -1608,9 +1608,9 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec /* Hair has only edges */ if (cloth->numfaces == 0) { ClothSpring *spring; - float edgevec[3]={0,0,0}; //edge vector - float edgeunnormal[3]={0,0,0}; // not-normalized-edge normal - float tmp[3]={0,0,0}; + float edgevec[3]={0, 0, 0}; //edge vector + float edgeunnormal[3]={0, 0, 0}; // not-normalized-edge normal + float tmp[3]={0, 0, 0}; float factor = 0.01; search = cloth->springs; @@ -1768,7 +1768,7 @@ int cloth_calc_helper_forces(Object *UNUSED(ob), ClothModifierData * clmd, float return 1; } -int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase *effectors) +int implicit_solver(Object *ob, float frame, ClothModifierData *clmd, ListBase *effectors) { unsigned int i=0; float step=0.0f, tf=clmd->sim_parms->timescale; @@ -1908,7 +1908,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase return 1; } -void implicit_set_positions (ClothModifierData *clmd) +void implicit_set_positions(ClothModifierData *clmd) { Cloth *cloth = clmd->clothObject; ClothVertex *verts = cloth->verts; diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index c33bb973385..48763382f2a 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -81,7 +81,7 @@ /* Free data from old IPO-Blocks (those which haven't been converted), but not IPO block itself */ // XXX this shouldn't be necessary anymore, but may occur while not all data is converted yet -void free_ipo (Ipo *ipo) +void free_ipo(Ipo *ipo) { IpoCurve *icu, *icn; int n= 0; @@ -1906,7 +1906,8 @@ void do_versions_ipos_to_animato(Main *main) AnimData *adt= BKE_id_add_animdata(id); - SEQ_BEGIN (ed, seq) { + SEQ_BEGIN (ed, seq) + { IpoCurve *icu = (seq->ipo) ? seq->ipo->curve.first : NULL; short adrcode = SEQ_FAC1; diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c index e981d772df6..11c3269ad37 100644 --- a/source/blender/blenkernel/intern/lamp.c +++ b/source/blender/blenkernel/intern/lamp.c @@ -96,6 +96,7 @@ void *add_lamp(const char *name) la->skyblendfac= 1.0f; la->sky_colorspace= BLI_XYZ_CIE; la->sky_exposure= 1.0f; + la->shadow_frustum_size= 10.0f; curvemapping_initialize(la->curfalloff); return la; diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index 12f11a9dee1..e78da48d153 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -131,9 +131,9 @@ void resizelattice(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb) } co = vertexCos[0]; - for (w=0,wc=fw; w<wNew; w++,wc+=dw) { - for (v=0,vc=fv; v<vNew; v++,vc+=dv) { - for (u=0,uc=fu; u<uNew; u++,co+=3,uc+=du) { + for (w=0, wc=fw; w<wNew; w++, wc+=dw) { + for (v=0, vc=fv; v<vNew; v++, vc+=dv) { + for (u=0, uc=fu; u<uNew; u++, co+=3, uc+=du) { co[0] = uc; co[1] = vc; co[2] = wc; @@ -177,7 +177,7 @@ void resizelattice(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb) bp= lt->def; - for (i=0; i<lt->pntsu*lt->pntsv*lt->pntsw; i++,bp++) { + for (i=0; i<lt->pntsu*lt->pntsv*lt->pntsw; i++, bp++) { copy_v3_v3(bp->vec, vertexCos[i]); } @@ -322,9 +322,9 @@ void init_latt_deform(Object *oblatt, Object *ob) invert_m4_m4(imat, lt->latmat); } - for (w=0,fw=lt->fw; w<lt->pntsw; w++,fw+=lt->dw) { - for (v=0,fv=lt->fv; v<lt->pntsv; v++, fv+=lt->dv) { - for (u=0,fu=lt->fu; u<lt->pntsu; u++, bp++, co+=3, fp+=3, fu+=lt->du) { + for (w=0, fw=lt->fw; w<lt->pntsw; w++, fw+=lt->dw) { + for (v=0, fv=lt->fv; v<lt->pntsv; v++, fv+=lt->dv) { + for (u=0, fu=lt->fu; u<lt->pntsu; u++, bp++, co+=3, fp+=3, fu+=lt->du) { if (dl) { fp[0] = co[0] - fu; fp[1] = co[1] - fv; @@ -568,7 +568,7 @@ static int calc_curve_deform(Scene *scene, Object *par, float co[3], /* this is not exactly the same as 2.4x, since the axis is having rotation removed rather than * changing the axis before calculating the tilt but serves much the same purpose */ - float dir_flat[3]={0,0,0}, q[4]; + float dir_flat[3]={0, 0, 0}, q[4]; copy_v3_v3(dir_flat, dir); dir_flat[cd->no_rot_axis-1]= 0.0f; @@ -774,7 +774,7 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, if (calc_curve_deform(scene, cuOb, vec, target->trackflag, &cd, quat)) { float qmat[3][3]; - quat_to_mat3( qmat,quat); + quat_to_mat3(qmat, quat); mul_m3_m3m3(mat, qmat, cd.objectspace3); } else @@ -937,7 +937,7 @@ float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3] if (lt->editlatt) lt= lt->editlatt->latt; numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw; - vertexCos = MEM_mallocN(sizeof(*vertexCos)*numVerts,"lt_vcos"); + vertexCos = MEM_mallocN(sizeof(*vertexCos)*numVerts, "lt_vcos"); for (i=0; i<numVerts; i++) { copy_v3_v3(vertexCos[i], lt->def[i].vec); diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 8612e9f2b97..52c92034367 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -136,9 +136,9 @@ void BKE_id_lib_local_paths(Main *bmain, Library *lib, ID *id) { char *bpath_user_data[2]= {bmain->name, lib->filepath}; - bpath_traverse_id(bmain, id, - bpath_relocate_visitor, - BPATH_TRAVERSE_SKIP_MULTIFILE, + BLI_bpath_traverse_id(bmain, id, + BLI_bpath_relocate_visitor, + BLI_BPATH_TRAVERSE_SKIP_MULTIFILE, bpath_user_data); } @@ -225,7 +225,7 @@ int id_make_local(ID *id, int test) if (!test) make_local_lamp((Lamp*)id); return 1; case ID_CA: - if (!test) make_local_camera((Camera*)id); + if (!test) BKE_camera_make_local((Camera*)id); return 1; case ID_SPK: if (!test) make_local_speaker((Speaker*)id); @@ -259,7 +259,7 @@ int id_make_local(ID *id, int test) case ID_NT: return 0; /* not implemented */ case ID_BR: - if (!test) make_local_brush((Brush*)id); + if (!test) BKE_brush_make_local((Brush*)id); return 1; case ID_PA: if (!test) make_local_particlesettings((ParticleSettings*)id); @@ -318,7 +318,7 @@ int id_copy(ID *id, ID **newid, int test) if (!test) *newid= (ID*)copy_speaker((Speaker*)id); return 1; case ID_CA: - if (!test) *newid= (ID*)copy_camera((Camera*)id); + if (!test) *newid= (ID*)BKE_camera_copy((Camera*)id); return 1; case ID_IP: return 0; /* deprecated */ @@ -352,7 +352,7 @@ int id_copy(ID *id, ID **newid, int test) if (!test) *newid= (ID*)ntreeCopyTree((bNodeTree*)id); return 1; case ID_BR: - if (!test) *newid= (ID*)copy_brush((Brush*)id); + if (!test) *newid= (ID*)BKE_brush_copy((Brush*)id); return 1; case ID_PA: if (!test) *newid= (ID*)psys_copy_settings((ParticleSettings*)id); @@ -843,7 +843,7 @@ void free_libblock(ListBase *lb, void *idv) free_lamp((Lamp *)id); break; case ID_CA: - free_camera((Camera*) id); + BKE_camera_free((Camera*) id); break; case ID_IP: free_ipo((Ipo *)id); @@ -885,7 +885,7 @@ void free_libblock(ListBase *lb, void *idv) ntreeFreeTree((bNodeTree *)id); break; case ID_BR: - free_brush((Brush *)id); + BKE_brush_free((Brush *)id); break; case ID_PA: psys_free_settings((ParticleSettings *)id); @@ -1031,7 +1031,7 @@ static void IDnames_to_dyn_pupstring(DynStr *pupds, ListBase *lb, ID *link, shor case ID_IM: /* fall through */ case ID_WO: /* fall through */ case ID_LA: /* fall through */ - BLI_snprintf(numstr, sizeof(numstr), "%%i%d", BKE_icon_getid(id) ); + BLI_snprintf(numstr, sizeof(numstr), "%%i%d", BKE_icon_getid(id)); BLI_dynstr_append(pupds, numstr); break; default: @@ -1232,7 +1232,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name) continue; } /* this format specifier is from hell... */ - BLI_snprintf(name, sizeof(id->name) - 2,"%s.%.3d", left, nr); + BLI_snprintf(name, sizeof(id->name) - 2, "%s.%.3d", left, nr); return 1; } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 6ddbf56605a..c76eb3c2fb3 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -801,7 +801,7 @@ void assign_material(Object *ob, Material *ma, short act) matar= MEM_callocN(sizeof(void *)*act, "matarray2"); matbits= MEM_callocN(sizeof(char)*act, "matbits1"); if ( ob->totcol) { - memcpy(matar, ob->mat, sizeof(void *)*( ob->totcol )); + memcpy(matar, ob->mat, sizeof(void *) * ob->totcol); memcpy(matbits, ob->matbits, sizeof(char)*(*totcolp)); MEM_freeN(ob->mat); MEM_freeN(ob->matbits); @@ -1055,31 +1055,31 @@ int material_in_material(Material *parmat, Material *mat) /* ****************** */ #if 0 /* UNUSED */ static char colname_array[125][20]= { -"Black","DarkRed","HalfRed","Red","Red", -"DarkGreen","DarkOlive","Brown","Chocolate","OrangeRed", -"HalfGreen","GreenOlive","DryOlive","Goldenrod","DarkOrange", -"LightGreen","Chartreuse","YellowGreen","Yellow","Gold", -"Green","LawnGreen","GreenYellow","LightOlive","Yellow", -"DarkBlue","DarkPurple","HotPink","VioletPink","RedPink", -"SlateGray","DarkGrey","PalePurple","IndianRed","Tomato", -"SeaGreen","PaleGreen","GreenKhaki","LightBrown","LightSalmon", -"SpringGreen","PaleGreen","MediumOlive","YellowBrown","LightGold", -"LightGreen","LightGreen","LightGreen","GreenYellow","PaleYellow", -"HalfBlue","DarkSky","HalfMagenta","VioletRed","DeepPink", -"SteelBlue","SkyBlue","Orchid","LightHotPink","HotPink", -"SeaGreen","SlateGray","MediumGrey","Burlywood","LightPink", -"SpringGreen","Aquamarine","PaleGreen","Khaki","PaleOrange", -"SpringGreen","SeaGreen","PaleGreen","PaleWhite","YellowWhite", -"LightBlue","Purple","MediumOrchid","Magenta","Magenta", -"RoyalBlue","SlateBlue","MediumOrchid","Orchid","Magenta", -"DeepSkyBlue","LightSteelBlue","LightSkyBlue","Violet","LightPink", -"Cyan","DarkTurquoise","SkyBlue","Grey","Snow", -"Mint","Mint","Aquamarine","MintCream","Ivory", -"Blue","Blue","DarkMagenta","DarkOrchid","Magenta", -"SkyBlue","RoyalBlue","LightSlateBlue","MediumOrchid","Magenta", -"DodgerBlue","SteelBlue","MediumPurple","PalePurple","Plum", -"DeepSkyBlue","PaleBlue","LightSkyBlue","PalePurple","Thistle", -"Cyan","ColdBlue","PaleTurquoise","GhostWhite","White" +"Black", "DarkRed", "HalfRed", "Red", "Red", +"DarkGreen", "DarkOlive", "Brown", "Chocolate", "OrangeRed", +"HalfGreen", "GreenOlive", "DryOlive", "Goldenrod", "DarkOrange", +"LightGreen", "Chartreuse", "YellowGreen", "Yellow", "Gold", +"Green", "LawnGreen", "GreenYellow", "LightOlive", "Yellow", +"DarkBlue", "DarkPurple", "HotPink", "VioletPink", "RedPink", +"SlateGray", "DarkGrey", "PalePurple", "IndianRed", "Tomato", +"SeaGreen", "PaleGreen", "GreenKhaki", "LightBrown", "LightSalmon", +"SpringGreen", "PaleGreen", "MediumOlive", "YellowBrown", "LightGold", +"LightGreen", "LightGreen", "LightGreen", "GreenYellow", "PaleYellow", +"HalfBlue", "DarkSky", "HalfMagenta", "VioletRed", "DeepPink", +"SteelBlue", "SkyBlue", "Orchid", "LightHotPink", "HotPink", +"SeaGreen", "SlateGray", "MediumGrey", "Burlywood", "LightPink", +"SpringGreen", "Aquamarine", "PaleGreen", "Khaki", "PaleOrange", +"SpringGreen", "SeaGreen", "PaleGreen", "PaleWhite", "YellowWhite", +"LightBlue", "Purple", "MediumOrchid", "Magenta", "Magenta", +"RoyalBlue", "SlateBlue", "MediumOrchid", "Orchid", "Magenta", +"DeepSkyBlue", "LightSteelBlue", "LightSkyBlue", "Violet", "LightPink", +"Cyan", "DarkTurquoise", "SkyBlue", "Grey", "Snow", +"Mint", "Mint", "Aquamarine", "MintCream", "Ivory", +"Blue", "Blue", "DarkMagenta", "DarkOrchid", "Magenta", +"SkyBlue", "RoyalBlue", "LightSlateBlue", "MediumOrchid", "Magenta", +"DodgerBlue", "SteelBlue", "MediumPurple", "PalePurple", "Plum", +"DeepSkyBlue", "PaleBlue", "LightSkyBlue", "PalePurple", "Thistle", +"Cyan", "ColdBlue", "PaleTurquoise", "GhostWhite", "White" }; void automatname(Material *ma) @@ -1317,13 +1317,13 @@ void ramp_blend(int type, float r_col[3], const float fac, const float col[3]) break; case MA_RAMP_HUE: { - float rH,rS,rV; - float colH,colS,colV; - float tmpr,tmpg,tmpb; - rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV); + float rH, rS, rV; + float colH, colS, colV; + float tmpr, tmpg, tmpb; + rgb_to_hsv(col[0], col[1], col[2], &colH, &colS, &colV); if (colS != 0) { - rgb_to_hsv(r_col[0],r_col[1],r_col[2],&rH,&rS,&rV); - hsv_to_rgb( colH , rS, rV, &tmpr, &tmpg, &tmpb); + rgb_to_hsv(r_col[0], r_col[1], r_col[2], &rH, &rS, &rV); + hsv_to_rgb(colH, rS, rV, &tmpr, &tmpg, &tmpb); r_col[0] = facm*(r_col[0]) + fac*tmpr; r_col[1] = facm*(r_col[1]) + fac*tmpg; r_col[2] = facm*(r_col[2]) + fac*tmpb; @@ -1332,33 +1332,33 @@ void ramp_blend(int type, float r_col[3], const float fac, const float col[3]) break; case MA_RAMP_SAT: { - float rH,rS,rV; - float colH,colS,colV; - rgb_to_hsv(r_col[0],r_col[1],r_col[2],&rH,&rS,&rV); + float rH, rS, rV; + float colH, colS, colV; + rgb_to_hsv(r_col[0], r_col[1], r_col[2], &rH, &rS, &rV); if (rS != 0) { - rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV); - hsv_to_rgb( rH, (facm*rS +fac*colS), rV, r_col+0, r_col+1, r_col+2); + rgb_to_hsv(col[0], col[1], col[2], &colH, &colS, &colV); + hsv_to_rgb(rH, (facm*rS +fac*colS), rV, r_col+0, r_col+1, r_col+2); } } break; case MA_RAMP_VAL: { - float rH,rS,rV; - float colH,colS,colV; - rgb_to_hsv(r_col[0],r_col[1],r_col[2],&rH,&rS,&rV); - rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV); - hsv_to_rgb( rH, rS, (facm*rV +fac*colV), r_col+0, r_col+1, r_col+2); + float rH, rS, rV; + float colH, colS, colV; + rgb_to_hsv(r_col[0], r_col[1], r_col[2], &rH, &rS, &rV); + rgb_to_hsv(col[0], col[1], col[2], &colH, &colS, &colV); + hsv_to_rgb(rH, rS, (facm*rV +fac*colV), r_col+0, r_col+1, r_col+2); } break; case MA_RAMP_COLOR: { - float rH,rS,rV; - float colH,colS,colV; - float tmpr,tmpg,tmpb; - rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV); + float rH, rS, rV; + float colH, colS, colV; + float tmpr, tmpg, tmpb; + rgb_to_hsv(col[0], col[1], col[2], &colH, &colS, &colV); if (colS != 0) { - rgb_to_hsv(r_col[0],r_col[1],r_col[2],&rH,&rS,&rV); - hsv_to_rgb( colH, colS, rV, &tmpr, &tmpg, &tmpb); + rgb_to_hsv(r_col[0], r_col[1], r_col[2], &rH, &rS, &rV); + hsv_to_rgb(colH, colS, rV, &tmpr, &tmpg, &tmpb); r_col[0] = facm*(r_col[0]) + fac*tmpr; r_col[1] = facm*(r_col[1]) + fac*tmpg; r_col[2] = facm*(r_col[2]) + fac*tmpb; diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 73e3576b57f..8b2e66812c7 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -142,7 +142,7 @@ typedef struct octal_node { struct ListBase elems; /* ListBase of MetaElem pointers (ml_pointer) */ float x_min, y_min, z_min; /* 1st border point */ float x_max, y_max, z_max; /* 7th border point */ - float x,y,z; /* center of node */ + float x, y, z; /* center of node */ int pos, neg; /* number of positive and negative MetaElements in the node */ int count; /* number of MetaElems, which belongs to the node */ } octal_node; @@ -453,7 +453,7 @@ int BKE_metaball_is_basis(Object *ob) } /* return nonzero if ob1 is a basis mball for ob */ -int BKE_metaball_is_basis_for (Object *ob1, Object *ob2) +int BKE_metaball_is_basis_for(Object *ob1, Object *ob2) { int basis1nr, basis2nr; char basis1name[MAX_ID_NAME], basis2name[MAX_ID_NAME]; @@ -520,7 +520,7 @@ Object *BKE_metaball_basis_find(Scene *scene, Object *basis) { Scene *sce_iter= scene; Base *base; - Object *ob,*bob= basis; + Object *ob, *bob= basis; MetaElem *ml=NULL; int basisnr, obnr; char basisname[MAX_ID_NAME], obname[MAX_ID_NAME]; @@ -614,10 +614,10 @@ Object *BKE_metaball_basis_find(Scene *scene, Object *basis) #define HASHBIT (5) #define HASHSIZE (size_t)(1<<(3*HASHBIT)) /*! < hash table size (32768) */ -#define HASH(i,j,k) ((((( (i) & 31)<<5) | ( (j) & 31))<<5 ) | ( (k) & 31) ) +#define HASH(i, j, k) ((((( (i) & 31)<<5) | ( (j) & 31))<<5 ) | ( (k) & 31) ) #define MB_BIT(i, bit) (((i)>>(bit))&1) -#define FLIP(i,bit) ((i)^1<<(bit)) /* flip the given bit of i */ +#define FLIP(i, bit) ((i)^1<<(bit)) /* flip the given bit of i */ /* **************** POLYGONIZATION ************************ */ @@ -713,13 +713,13 @@ static octal_node* find_metaball_octal_node(octal_node *node, float x, float y, if (y < node->y) { if (x < node->x) { if (node->nodes[0]) - return find_metaball_octal_node(node->nodes[0],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[0], x, y, z, depth--); else return node; } else { if (node->nodes[1]) - return find_metaball_octal_node(node->nodes[1],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[1], x, y, z, depth--); else return node; } @@ -727,13 +727,13 @@ static octal_node* find_metaball_octal_node(octal_node *node, float x, float y, else { if (x < node->x) { if (node->nodes[3]) - return find_metaball_octal_node(node->nodes[3],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[3], x, y, z, depth--); else return node; } else { if (node->nodes[2]) - return find_metaball_octal_node(node->nodes[2],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[2], x, y, z, depth--); else return node; } @@ -743,13 +743,13 @@ static octal_node* find_metaball_octal_node(octal_node *node, float x, float y, if (y < node->y) { if (x < node->x) { if (node->nodes[4]) - return find_metaball_octal_node(node->nodes[4],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[4], x, y, z, depth--); else return node; } else { if (node->nodes[5]) - return find_metaball_octal_node(node->nodes[5],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[5], x, y, z, depth--); else return node; } @@ -757,13 +757,13 @@ static octal_node* find_metaball_octal_node(octal_node *node, float x, float y, else { if (x < node->x) { if (node->nodes[7]) - return find_metaball_octal_node(node->nodes[7],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[7], x, y, z, depth--); else return node; } else { if (node->nodes[6]) - return find_metaball_octal_node(node->nodes[6],x,y,z,depth--); + return find_metaball_octal_node(node->nodes[6], x, y, z, depth--); else return node; } @@ -881,7 +881,7 @@ static void *new_pgn_element(int size) } } - cur= MEM_callocN( sizeof(struct pgn_elements), "newpgn"); + cur= MEM_callocN(sizeof(struct pgn_elements), "newpgn"); cur->data= MEM_callocN(blocksize, "newpgn"); BLI_addtail(&lb, cur); @@ -919,9 +919,9 @@ static INTLISTS *cubetable[256]; /* edge: LB, LT, LN, LF, RB, RT, RN, RF, BN, BF, TN, TF */ static int corner1[12] = { - LBN,LTN,LBN,LBF,RBN,RTN,RBN,RBF,LBN,LBF,LTN,LTF}; + LBN, LTN, LBN, LBF, RBN, RTN, RBN, RBF, LBN, LBF, LTN, LTF}; static int corner2[12] = { - LBF,LTF,LTN,LTF,RBF,RTF,RTN,RTF,RBN,RBF,RTN,RTF}; + LBF, LTF, LTN, LTF, RBF, RTF, RTN, RTF, RBN, RBF, RTN, RTF}; static int leftface[12] = { B, L, L, F, R, T, N, R, N, B, T, F}; /* face on left when going corner1 to corner2 */ @@ -1197,7 +1197,7 @@ void BKE_metaball_cubeTable_free(void) /**** Storage ****/ -/* setcenter: set (i,j,k) entry of table[] +/* setcenter: set (i, j, k) entry of table[] * return 1 if already set; otherwise, set and return 0 */ static int setcenter(CENTERLIST *table[], int i, int j, int k) @@ -1405,7 +1405,7 @@ static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, int i = 0; MB_POINT pos, neg; float positive = 0.0f, negative = 0.0f; - float dx = 0.0f ,dy = 0.0f ,dz = 0.0f; + float dx = 0.0f, dy = 0.0f, dz = 0.0f; if (v1 < 0) { pos= *p2; @@ -1453,7 +1453,7 @@ static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, while (1) { if (i++ == RES) return; p->x = 0.5f*(pos.x + neg.x); - if ((function(p->x,p->y,p->z)) > 0.0f) pos.x = p->x; else neg.x = p->x; + if ((function(p->x, p->y, p->z)) > 0.0f) pos.x = p->x; else neg.x = p->x; } } @@ -1463,7 +1463,7 @@ static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, while (1) { if (i++ == RES) return; p->y = 0.5f*(pos.y + neg.y); - if ((function(p->x,p->y,p->z)) > 0.0f) pos.y = p->y; else neg.y = p->y; + if ((function(p->x, p->y, p->z)) > 0.0f) pos.y = p->y; else neg.y = p->y; } } @@ -1473,7 +1473,7 @@ static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, while (1) { if (i++ == RES) return; p->z = 0.5f*(pos.z + neg.z); - if ((function(p->x,p->y,p->z)) > 0.0f) pos.z = p->z; else neg.z = p->z; + if ((function(p->x, p->y, p->z)) > 0.0f) pos.z = p->z; else neg.z = p->z; } } @@ -1523,7 +1523,7 @@ static void add_cube(PROCESS *mbproc, int i, int j, int k, int count) /* set corners of initial cube: */ for (n = 0; n < 8; n++) - ncube->cube.corners[n] = setcorner(mbproc, a+MB_BIT(n,2), b+MB_BIT(n,1), c+MB_BIT(n,0)); + ncube->cube.corners[n] = setcorner(mbproc, a+MB_BIT(n, 2), b+MB_BIT(n, 1), c+MB_BIT(n, 0)); } } } @@ -1534,7 +1534,7 @@ static void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) MB_POINT IN, in, OUT, out; /*point;*/ MetaElem *ml; int i, j, k, c_i, c_j, c_k; - int index[3]={1,0,-1}; + int index[3]={1, 0, -1}; float f =0.0f; float in_v /*, out_v*/; MB_POINT workp; @@ -1610,7 +1610,7 @@ static void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) ny = abs((out.y - in.y)/mbproc->size); nz = abs((out.z - in.z)/mbproc->size); - MAXN = MAX3(nx,ny,nz); + MAXN = MAX3(nx, ny, nz); if (MAXN!=0.0f) { dx = (out.x - in.x)/MAXN; dy = (out.y - in.y)/MAXN; @@ -1774,7 +1774,7 @@ static float init_meta(Scene *scene, Object *ob) /* return totsize */ if (ml->s > 10.0f) ml->s = 10.0f; /* Rotation of MetaElem is stored in quat */ - quat_to_mat4( temp3,ml->quat); + quat_to_mat4(temp3, ml->quat); /* Translation of MetaElem */ unit_m4(temp2); @@ -1798,7 +1798,7 @@ static float init_meta(Scene *scene, Object *ob) /* return totsize */ /* MetaBall transformation */ mult_m4_m4m4(mat, temp2, temp1); - invert_m4_m4(imat,mat); + invert_m4_m4(imat, mat); mainb[a]->rad2= ml->rad*ml->rad; @@ -1884,11 +1884,11 @@ static float init_meta(Scene *scene, Object *ob) /* return totsize */ calc_mballco(mainb[a], vec); - size= fabsf( vec[0] ); + size= fabsf(vec[0]); if ( size > totsize ) totsize= size; - size= fabsf( vec[1] ); + size= fabsf(vec[1]); if ( size > totsize ) totsize= size; - size= fabsf( vec[2] ); + size= fabsf(vec[2]); if ( size > totsize ) totsize= size; vec[0]= mainb[a]->x - mainb[a]->rad; @@ -1897,11 +1897,11 @@ static float init_meta(Scene *scene, Object *ob) /* return totsize */ calc_mballco(mainb[a], vec); - size= fabsf( vec[0] ); + size= fabsf(vec[0]); if ( size > totsize ) totsize= size; - size= fabsf( vec[1] ); + size= fabsf(vec[1]); if ( size > totsize ) totsize= size; - size= fabsf( vec[2] ); + size= fabsf(vec[2]); if ( size > totsize ) totsize= size; } @@ -1951,12 +1951,12 @@ static void subdivide_metaball_octal_node(octal_node *node, float size_x, float { MetaElem *ml; ml_pointer *ml_p; - float x,y,z; - int a,i; + float x, y, z; + int a, i; /* create new nodes */ for (a=0;a<8;a++) { - node->nodes[a]= MEM_mallocN(sizeof(octal_node),"octal_node"); + node->nodes[a]= MEM_mallocN(sizeof(octal_node), "octal_node"); for (i=0;i<8;i++) node->nodes[a]->nodes[i]= NULL; node->nodes[a]->parent= node; diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index c7f6bf93831..4b14c2aec4b 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1783,7 +1783,7 @@ void mesh_calc_normals_mapping(MVert *mverts, int numVerts, { mesh_calc_normals_mapping_ex(mverts, numVerts, mloop, mpolys, numLoops, numPolys, polyNors_r, mfaces, numFaces, - origIndexFace, faceNors_r, TRUE); + origIndexFace, faceNors_r, FALSE); } void mesh_calc_normals_mapping_ex(MVert *mverts, int numVerts, @@ -2014,7 +2014,7 @@ static void bm_corners_to_loops(Mesh *me, int findex, int loopstart, int numTex, for (i=0; i<tot; i++, disps += side*side, ld++) { ld->totdisp = side*side; - ld->level = (int)(logf(side - 1.0f) / M_LN2) + 1; + ld->level = (int)(logf(side - 1.0f) / (float)M_LN2) + 1; if (ld->disps) MEM_freeN(ld->disps); @@ -2481,24 +2481,24 @@ int mesh_recalcTessellation(CustomData *fdata, ml = mloop + mp->loopstart; - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); firstv = NULL; lastv = NULL; for (j=0; j<mp->totloop; j++, ml++) { - v = BLI_addfillvert(&sf_ctx, mvert[ml->v].co); + v = BLI_scanfill_vert_add(&sf_ctx, mvert[ml->v].co); v->keyindex = mp->loopstart + j; if (lastv) - BLI_addfilledge(&sf_ctx, lastv, v); + BLI_scanfill_edge_add(&sf_ctx, lastv, v); if (!firstv) firstv = v; lastv = v; } - BLI_addfilledge(&sf_ctx, lastv, firstv); + BLI_scanfill_edge_add(&sf_ctx, lastv, firstv); - totfilltri = BLI_edgefill(&sf_ctx, FALSE); + totfilltri = BLI_scanfill_calc(&sf_ctx, FALSE); if (totfilltri) { BLI_array_grow_items(mface_to_poly_map, totfilltri); BLI_array_grow_items(mface, totfilltri); @@ -2531,7 +2531,7 @@ int mesh_recalcTessellation(CustomData *fdata, } } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); } } @@ -2766,64 +2766,20 @@ int mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata, static void mesh_calc_ngon_normal(MPoly *mpoly, MLoop *loopstart, MVert *mvert, float normal[3]) { - - MVert *v1, *v2, *v3; - double u[3], v[3], w[3]; - double n[3] = {0.0, 0.0, 0.0}, l; + const int nverts = mpoly->totloop; + float const *v_prev = mvert[loopstart[nverts - 1].v].co; + float const *v_curr = mvert[loopstart->v].co; + float n[3] = {0.0f}; int i; - for (i = 0; i < mpoly->totloop; i++) { - v1 = mvert + loopstart[i].v; - v2 = mvert + loopstart[(i+1)%mpoly->totloop].v; - v3 = mvert + loopstart[(i+2)%mpoly->totloop].v; - - copy_v3db_v3fl(u, v1->co); - copy_v3db_v3fl(v, v2->co); - copy_v3db_v3fl(w, v3->co); - - /*this fixes some weird numerical error*/ - if (i==0) { - u[0] += 0.0001f; - u[1] += 0.0001f; - u[2] += 0.0001f; - } - - /* newell's method - * - * so thats?: - * (a[1] - b[1]) * (a[2] + b[2]); - * a[1]*b[2] - b[1]*a[2] - b[1]*b[2] + a[1]*a[2] - * - * odd. half of that is the cross product. . .what's the - * other half? - * - * also could be like a[1]*(b[2] + a[2]) - b[1]*(a[2] - b[2]) - */ - - n[0] += (u[1] - v[1]) * (u[2] + v[2]); - n[1] += (u[2] - v[2]) * (u[0] + v[0]); - n[2] += (u[0] - v[0]) * (u[1] + v[1]); + /* Newell's Method */ + for (i = 0; i < nverts; v_prev = v_curr, v_curr = mvert[loopstart[++i].v].co) { + add_newell_cross_v3_v3v3(n, v_prev, v_curr); } - - l = n[0]*n[0]+n[1]*n[1]+n[2]*n[2]; - l = sqrt(l); - - if (l == 0.0) { - normal[0] = 0.0f; - normal[1] = 0.0f; - normal[2] = 1.0f; - return; + if (UNLIKELY(normalize_v3_v3(normal, n) == 0.0f)) { + normal[2] = 1.0f; /* other axis set to 0.0 */ } - else l = 1.0f / l; - - n[0] *= l; - n[1] *= l; - n[2] *= l; - - normal[0] = (float) n[0]; - normal[1] = (float) n[1]; - normal[2] = (float) n[2]; } void mesh_calc_poly_normal(MPoly *mpoly, MLoop *loopstart, @@ -2857,54 +2813,20 @@ void mesh_calc_poly_normal(MPoly *mpoly, MLoop *loopstart, static void mesh_calc_ngon_normal_coords(MPoly *mpoly, MLoop *loopstart, const float (*vertex_coords)[3], float normal[3]) { - - const float *v1, *v2, *v3; - double u[3], v[3], w[3]; - double n[3] = {0.0, 0.0, 0.0}, l; + const int nverts = mpoly->totloop; + float const *v_prev = vertex_coords[loopstart[nverts - 1].v]; + float const *v_curr = vertex_coords[loopstart->v]; + float n[3] = {0.0f}; int i; - for (i = 0; i < mpoly->totloop; i++) { - v1 = (const float *)(vertex_coords + loopstart[i].v); - v2 = (const float *)(vertex_coords + loopstart[(i+1)%mpoly->totloop].v); - v3 = (const float *)(vertex_coords + loopstart[(i+2)%mpoly->totloop].v); - - copy_v3db_v3fl(u, v1); - copy_v3db_v3fl(v, v2); - copy_v3db_v3fl(w, v3); - - /*this fixes some weird numerical error*/ - if (i==0) { - u[0] += 0.0001f; - u[1] += 0.0001f; - u[2] += 0.0001f; - } - - n[0] += (u[1] - v[1]) * (u[2] + v[2]); - n[1] += (u[2] - v[2]) * (u[0] + v[0]); - n[2] += (u[0] - v[0]) * (u[1] + v[1]); + /* Newell's Method */ + for (i = 0; i < nverts; v_prev = v_curr, v_curr = vertex_coords[loopstart[++i].v]) { + add_newell_cross_v3_v3v3(n, v_prev, v_curr); } - l = n[0]*n[0]+n[1]*n[1]+n[2]*n[2]; - l = sqrt(l); - - if (l == 0.0) { - normal[0] = 0.0f; - normal[1] = 0.0f; - normal[2] = 1.0f; - - return; - } - else { - l = 1.0f / l; + if (UNLIKELY(normalize_v3_v3(normal, n) == 0.0f)) { + normal[2] = 1.0f; /* other axis set to 0.0 */ } - - n[0] *= l; - n[1] *= l; - n[2] *= l; - - normal[0] = (float) n[0]; - normal[1] = (float) n[1]; - normal[2] = (float) n[2]; } void mesh_calc_poly_normal_coords(MPoly *mpoly, MLoop *loopstart, diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 12aa6232cb0..98cbc957201 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -296,7 +296,7 @@ int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCag } /* Find the last modifier acting on the cage. */ - for (i=0; md; i++,md=md->next) { + for (i=0; md; i++, md=md->next) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); md->scene= scene; diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index d548d7589bb..7a279572738 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -155,7 +155,7 @@ static void get_sequence_fname(MovieClip *clip, int framenr, char *name) /* movieclips always points to first image from sequence, * autoguess offset for now. could be something smarter in the future */ - offset= sequence_guess_offset(clip->name, strlen(head), numlen); + offset = sequence_guess_offset(clip->name, strlen(head), numlen); if (numlen) BLI_stringenc(name, head, tail, numlen, offset + framenr - 1); @@ -195,7 +195,7 @@ static ImBuf *movieclip_load_sequence_file(MovieClip *clip, MovieClipUser *user, { struct ImBuf *ibuf; char name[FILE_MAX]; - int loadflag, use_proxy= 0; + int loadflag, use_proxy = 0; use_proxy = (flag & MCLIP_USE_PROXY) && user->render_size != MCLIP_PROXY_RENDER_SIZE_FULL; if (use_proxy) { @@ -432,7 +432,7 @@ static MovieClip *movieclip_alloc(const char *name) clip = alloc_libblock(&G.main->movieclip, ID_MC, name); - clip->aspx = clip->aspy= 1.0f; + clip->aspx = clip->aspy = 1.0f; BKE_tracking_init_settings(&clip->tracking); @@ -453,7 +453,7 @@ static MovieClip *movieclip_alloc(const char *name) MovieClip *BKE_movieclip_file_add(const char *name) { MovieClip *clip; - MovieClipUser user; + MovieClipUser user = {0}; int file, len, width, height; const char *libname; char str[FILE_MAX], strtest[FILE_MAX]; @@ -462,7 +462,7 @@ MovieClip *BKE_movieclip_file_add(const char *name) BLI_path_abs(str, G.main->name); /* exists? */ - file = BLI_open(str, O_BINARY|O_RDONLY,0); + file = BLI_open(str, O_BINARY | O_RDONLY, 0); if (file == -1) return NULL; close(file); @@ -660,7 +660,7 @@ static ImBuf *put_postprocessed_frame_to_cache(MovieClip *clip, MovieClipUser *u copy_v2_v2(cache->postprocessed.principal, camera->principal); copy_v3_v3(&cache->postprocessed.k1, &camera->k1); cache->postprocessed.undistoriton_used = TRUE; - postproc_ibuf= get_undistorted_ibuf(clip, NULL, ibuf); + postproc_ibuf = get_undistorted_ibuf(clip, NULL, ibuf); } else { cache->postprocessed.undistoriton_used = FALSE; @@ -704,14 +704,14 @@ static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *u /* try to obtain cached postprocessed frame first */ if (need_postprocessed_frame(user, flag, postprocess_flag)) { - ibuf= get_postprocessed_cached_frame(clip, user, flag, postprocess_flag); + ibuf = get_postprocessed_cached_frame(clip, user, flag, postprocess_flag); if (!ibuf) need_postprocess = TRUE; } if (!ibuf) - ibuf= get_imbuf_cache(clip, user, flag); + ibuf = get_imbuf_cache(clip, user, flag); if (!ibuf) { int use_sequence = FALSE; @@ -825,7 +825,7 @@ static ImBuf *put_stabilized_frame_to_cache(MovieClip *clip, MovieClipUser *user stableibuf = BKE_tracking_stabilize(&clip->tracking, framenr, ibuf, tloc, &tscale, &tangle); - cache->stabilized.ibuf= stableibuf; + cache->stabilized.ibuf = stableibuf; copy_v2_v2(cache->stabilized.loc, tloc); @@ -862,7 +862,7 @@ ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float return NULL; if (clip->tracking.stabilization.flag & TRACKING_2D_STABILIZATION) { - MovieClipCache *cache= clip->cache; + MovieClipCache *cache = clip->cache; stableibuf = get_stable_cached_frame(clip, user, framenr, postprocess_flag); @@ -873,20 +873,20 @@ ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float copy_v2_v2(loc, cache->stabilized.loc); if (scale) - *scale= cache->stabilized.scale; + *scale = cache->stabilized.scale; if (angle) - *angle= cache->stabilized.angle; + *angle = cache->stabilized.angle; } else { if (loc) zero_v2(loc); if (scale) - *scale= 1.0f; + *scale = 1.0f; if (angle) - *angle= 0.0f; + *angle = 0.0f; stableibuf = ibuf; } @@ -1044,7 +1044,7 @@ void BKE_movieclip_update_scopes(MovieClip *clip, MovieClipUser *user, MovieClip if (user->render_flag & MCLIP_PROXY_RENDER_UNDISTORT) { int width, height; - float aspy= 1.0f / clip->tracking.camera.pixel_aspect; + float aspy = 1.0f / clip->tracking.camera.pixel_aspect; BKE_movieclip_get_size(clip, user, &width, &height); @@ -1058,14 +1058,14 @@ void BKE_movieclip_update_scopes(MovieClip *clip, MovieClipUser *user, MovieClip } /* NOTE: margin should be kept in sync with value from ui_draw_but_TRACKPREVIEW */ - tmpibuf= BKE_tracking_get_pattern_imbuf(ibuf, track, &undist_marker, 3 /* margin */, + tmpibuf = BKE_tracking_get_pattern_imbuf(ibuf, track, &undist_marker, 3 /* margin */, 1 /* anchor */, scopes->track_pos, NULL); if (tmpibuf->rect_float) IMB_rect_from_float(tmpibuf); if (tmpibuf->rect) - scopes->track_preview= tmpibuf; + scopes->track_preview = tmpibuf; else IMB_freeImBuf(tmpibuf); } diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index d7212e5eaf9..f3901cec506 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -747,7 +747,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob) copy_v3_v3(origco[i], me->mvert[i].co); for (i = 0; i < me->totvert; ++i) { - float avg_no[3] = {0,0,0}, center[3] = {0,0,0}, push[3]; + float avg_no[3] = {0, 0, 0}, center[3] = {0, 0, 0}, push[3]; float dist; int tot = 0; @@ -942,7 +942,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm MPoly *mpoly = me->mpoly; MDisps *mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS); int *gridOffset; - int i, k, /*numGrids,*/ gridSize, dGridSize, dSkip; + int i, k, /*numGrids, */ gridSize, dGridSize, dSkip; int totloop, totpoly; /* this happens in the dm made by bmesh_mdisps_space_set */ @@ -1545,9 +1545,9 @@ void multires_free(Multires *mr) } static void create_old_vert_face_map(ListBase **map, IndexNode **mem, const MultiresFace *mface, - const int totvert, const int totface) + const int totvert, const int totface) { - int i,j; + int i, j; IndexNode *node = NULL; (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert face map"); @@ -1566,7 +1566,7 @@ static void create_old_vert_face_map(ListBase **map, IndexNode **mem, const Mult static void create_old_vert_edge_map(ListBase **map, IndexNode **mem, const MultiresEdge *medge, const int totvert, const int totedge) { - int i,j; + int i, j; IndexNode *node = NULL; (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert edge map"); @@ -2043,7 +2043,7 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) /* MLoop *mloop = me->mloop; */ /* UNUSED */ MDisps *mdisps; int *gridOffset; - int i, /*numGrids,*/ gridSize, dGridSize, dSkip, totvert; + int i, /*numGrids, */ gridSize, dGridSize, dSkip, totvert; float (*vertCos)[3] = NULL; MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1); MultiresModifierData high_mmd; diff --git a/source/blender/blenkernel/intern/navmesh_conversion.c b/source/blender/blenkernel/intern/navmesh_conversion.c index 23d2f50c3f7..24382b3bf91 100644 --- a/source/blender/blenkernel/intern/navmesh_conversion.c +++ b/source/blender/blenkernel/intern/navmesh_conversion.c @@ -86,8 +86,8 @@ float distPointToSegmentSq(const float* point, const float* a, const float* b) float abx[3], dx[3]; float d, t; - sub_v3_v3v3(abx, b,a); - sub_v3_v3v3(dx, point,a); + sub_v3_v3v3(abx, b, a); + sub_v3_v3v3(dx, point, a); d = abx[0]*abx[0]+abx[2]*abx[2]; t = abx[0]*dx[0]+abx[2]*dx[2]; @@ -447,7 +447,7 @@ int buildNavMeshDataByDerivedMesh(DerivedMesh *dm, int *vertsPerPoly, } res = buildNavMeshData(*nverts, *verts, ntris, tris, recastData, *trisToFacesMap, - ndtris, dtris, npolys, dmeshes,polys, vertsPerPoly, + ndtris, dtris, npolys, dmeshes, polys, vertsPerPoly, dtrisToPolysMap, dtrisToTrisMap); if (!res) { printf("Converting navmesh: Error! Can't get vertices and indices from mesh\n"); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 5dfeb37b2ee..96c62a32139 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -73,7 +73,7 @@ /* Remove the given NLA strip from the NLA track it occupies, free the strip's data, * and the strip itself. */ -void free_nlastrip (ListBase *strips, NlaStrip *strip) +void free_nlastrip(ListBase *strips, NlaStrip *strip) { NlaStrip *cs, *csn; @@ -111,7 +111,7 @@ void free_nlastrip (ListBase *strips, NlaStrip *strip) /* Remove the given NLA track from the set of NLA tracks, free the track's data, * and the track itself. */ -void free_nlatrack (ListBase *tracks, NlaTrack *nlt) +void free_nlatrack(ListBase *tracks, NlaTrack *nlt) { NlaStrip *strip, *stripn; @@ -135,7 +135,7 @@ void free_nlatrack (ListBase *tracks, NlaTrack *nlt) /* Free the elements of type NLA Tracks provided in the given list, but do not free * the list itself since that is not free-standing */ -void free_nladata (ListBase *tracks) +void free_nladata(ListBase *tracks) { NlaTrack *nlt, *nltn; @@ -216,7 +216,7 @@ NlaTrack *copy_nlatrack (NlaTrack *nlt) } /* Copy all NLA data */ -void copy_nladata (ListBase *dst, ListBase *src) +void copy_nladata(ListBase *dst, ListBase *src) { NlaTrack *nlt, *nlt_d; @@ -486,7 +486,7 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short * only secure for 'internal' (i.e. within AnimSys evaluation) operations, * but should not be directly relied on for stuff which interacts with editors */ -float nlastrip_get_frame (NlaStrip *strip, float cframe, short mode) +float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode) { switch (strip->type) { case NLASTRIP_TYPE_META: /* meta - for now, does the same as transition (is really just an empty container) */ @@ -506,7 +506,7 @@ float nlastrip_get_frame (NlaStrip *strip, float cframe, short mode) * Public API method - perform this mapping using the given AnimData block * and perform any necessary sanity checks on the value */ -float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) +float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, short mode) { NlaStrip *strip; @@ -546,7 +546,7 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) /* (these functions are used for NLA-Tracks and also for nested/meta-strips) */ /* Check if there is any space in the given list to add the given strip */ -short BKE_nlastrips_has_space (ListBase *strips, float start, float end) +short BKE_nlastrips_has_space(ListBase *strips, float start, float end) { NlaStrip *strip; @@ -580,7 +580,7 @@ short BKE_nlastrips_has_space (ListBase *strips, float start, float end) /* Rearrange the strips in the track so that they are always in order * (usually only needed after a strip has been moved) */ -void BKE_nlastrips_sort_strips (ListBase *strips) +void BKE_nlastrips_sort_strips(ListBase *strips) { ListBase tmp = {NULL, NULL}; NlaStrip *strip, *sstrip, *stripn; @@ -624,7 +624,7 @@ void BKE_nlastrips_sort_strips (ListBase *strips) /* Add the given NLA-Strip to the given list of strips, assuming that it * isn't currently a member of another list */ -short BKE_nlastrips_add_strip (ListBase *strips, NlaStrip *strip) +short BKE_nlastrips_add_strip(ListBase *strips, NlaStrip *strip) { NlaStrip *ns; short not_added = 1; @@ -662,7 +662,7 @@ short BKE_nlastrips_add_strip (ListBase *strips, NlaStrip *strip) * contained within 'Meta-Strips' which act as strips which contain strips. * temp: are the meta-strips to be created 'temporary' ones used for transforms? */ -void BKE_nlastrips_make_metas (ListBase *strips, short temp) +void BKE_nlastrips_make_metas(ListBase *strips, short temp) { NlaStrip *mstrip = NULL; NlaStrip *strip, *stripn; @@ -714,7 +714,7 @@ void BKE_nlastrips_make_metas (ListBase *strips, short temp) } /* Split a meta-strip into a set of normal strips */ -void BKE_nlastrips_clear_metastrip (ListBase *strips, NlaStrip *strip) +void BKE_nlastrips_clear_metastrip(ListBase *strips, NlaStrip *strip) { NlaStrip *cs, *csn; @@ -739,7 +739,7 @@ void BKE_nlastrips_clear_metastrip (ListBase *strips, NlaStrip *strip) * sel: only consider selected meta-strips, otherwise all meta-strips are removed * onlyTemp: only remove the 'temporary' meta-strips used for transforms */ -void BKE_nlastrips_clear_metas (ListBase *strips, short onlySel, short onlyTemp) +void BKE_nlastrips_clear_metas(ListBase *strips, short onlySel, short onlyTemp) { NlaStrip *strip, *stripn; @@ -766,7 +766,7 @@ void BKE_nlastrips_clear_metas (ListBase *strips, short onlySel, short onlyTemp) /* Add the given NLA-Strip to the given Meta-Strip, assuming that the * strip isn't attached to anyy list of strips */ -short BKE_nlameta_add_strip (NlaStrip *mstrip, NlaStrip *strip) +short BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip) { /* sanity checks */ if (ELEM(NULL, mstrip, strip)) @@ -816,7 +816,7 @@ short BKE_nlameta_add_strip (NlaStrip *mstrip, NlaStrip *strip) /* Adjust the settings of NLA-Strips contained within a Meta-Strip (recursively), * until the Meta-Strips children all fit within the Meta-Strip's new dimensions */ -void BKE_nlameta_flush_transforms (NlaStrip *mstrip) +void BKE_nlameta_flush_transforms(NlaStrip *mstrip) { NlaStrip *strip; float oStart, oEnd, offset; @@ -915,7 +915,7 @@ NlaTrack *BKE_nlatrack_find_active (ListBase *tracks) /* Toggle the 'solo' setting for the given NLA-track, making sure that it is the only one * that has this status in its AnimData block. */ -void BKE_nlatrack_solo_toggle (AnimData *adt, NlaTrack *nlt) +void BKE_nlatrack_solo_toggle(AnimData *adt, NlaTrack *nlt) { NlaTrack *nt; @@ -947,7 +947,7 @@ void BKE_nlatrack_solo_toggle (AnimData *adt, NlaTrack *nlt) /* Make the given NLA-track the active one for the given stack. If no track is provided, * this function can be used to simply deactivate all the NLA tracks in the given stack too. */ -void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) +void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt_a) { NlaTrack *nlt; @@ -965,7 +965,7 @@ void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) } /* Check if there is any space in the given track to add a strip of the given length */ -short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) +short BKE_nlatrack_has_space(NlaTrack *nlt, float start, float end) { /* sanity checks * - track must exist @@ -987,7 +987,7 @@ short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) /* Rearrange the strips in the track so that they are always in order * (usually only needed after a strip has been moved) */ -void BKE_nlatrack_sort_strips (NlaTrack *nlt) +void BKE_nlatrack_sort_strips(NlaTrack *nlt) { /* sanity checks */ if (ELEM(NULL, nlt, nlt->strips.first)) @@ -1000,7 +1000,7 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) /* Add the given NLA-Strip to the given NLA-Track, assuming that it * isn't currently attached to another one */ -short BKE_nlatrack_add_strip (NlaTrack *nlt, NlaStrip *strip) +short BKE_nlatrack_add_strip(NlaTrack *nlt, NlaStrip *strip) { /* sanity checks */ if (ELEM(NULL, nlt, strip)) @@ -1013,7 +1013,7 @@ short BKE_nlatrack_add_strip (NlaTrack *nlt, NlaStrip *strip) /* Get the extents of the given NLA-Track including gaps between strips, * returning whether this succeeded or not */ -short BKE_nlatrack_get_bounds (NlaTrack *nlt, float bounds[2]) +short BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2]) { NlaStrip *strip; @@ -1061,7 +1061,7 @@ NlaStrip *BKE_nlastrip_find_active (NlaTrack *nlt) } /* Make the given NLA-Strip the active one within the given block */ -void BKE_nlastrip_set_active (AnimData *adt, NlaStrip *strip) +void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip) { NlaTrack *nlt; NlaStrip *nls; @@ -1083,7 +1083,7 @@ void BKE_nlastrip_set_active (AnimData *adt, NlaStrip *strip) /* Does the given NLA-strip fall within the given bounds (times)? */ -short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max) +short BKE_nlastrip_within_bounds(NlaStrip *strip, float min, float max) { const float stripLen= (strip) ? strip->end - strip->start : 0.0f; const float boundsLen= fabsf(max - min); @@ -1096,15 +1096,15 @@ short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max) * - first 2 cases cover when the strip length is less than the bounding area * - second 2 cases cover when the strip length is greater than the bounding area */ - if ( (stripLen < boundsLen) && - !(IN_RANGE(strip->start, min, max) || - IN_RANGE(strip->end, min, max)) ) + if ((stripLen < boundsLen) && + !(IN_RANGE(strip->start, min, max) || + IN_RANGE(strip->end, min, max))) { return 0; } - if ( (stripLen > boundsLen) && - !(IN_RANGE(min, strip->start, strip->end) || - IN_RANGE(max, strip->start, strip->end)) ) + if ((stripLen > boundsLen) && + !(IN_RANGE(min, strip->start, strip->end) || + IN_RANGE(max, strip->start, strip->end)) ) { return 0; } @@ -1116,7 +1116,7 @@ short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max) /* Recalculate the start and end frames for the current strip, after changing * the extents of the action or the mapping (repeats or scale factor) info */ -void BKE_nlastrip_recalculate_bounds (NlaStrip *strip) +void BKE_nlastrip_recalculate_bounds(NlaStrip *strip) { float actlen, mapping; @@ -1171,7 +1171,7 @@ static short nlastrip_is_first (AnimData *adt, NlaStrip *strip) /* Animated Strips ------------------------------------------- */ /* Check if the given NLA-Track has any strips with own F-Curves */ -short BKE_nlatrack_has_animated_strips (NlaTrack *nlt) +short BKE_nlatrack_has_animated_strips(NlaTrack *nlt) { NlaStrip *strip; @@ -1190,7 +1190,7 @@ short BKE_nlatrack_has_animated_strips (NlaTrack *nlt) } /* Check if given NLA-Tracks have any strips with own F-Curves */ -short BKE_nlatracks_have_animated_strips (ListBase *tracks) +short BKE_nlatracks_have_animated_strips(ListBase *tracks) { NlaTrack *nlt; @@ -1209,7 +1209,7 @@ short BKE_nlatracks_have_animated_strips (ListBase *tracks) } /* Validate the NLA-Strips 'control' F-Curves based on the flags set*/ -void BKE_nlastrip_validate_fcurves (NlaStrip *strip) +void BKE_nlastrip_validate_fcurves(NlaStrip *strip) { FCurve *fcu; @@ -1272,7 +1272,7 @@ static int nla_editbone_name_check(void *arg, const char *name) * as we need to ensure that the name is unique over several lists of tracks, * not just a single track. */ -void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) +void BKE_nlastrip_validate_name(AnimData *adt, NlaStrip *strip) { GHash *gh; NlaStrip *tstrip; @@ -1416,7 +1416,7 @@ static void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls) } /* Ensure that auto-blending and other settings are set correctly */ -void BKE_nla_validate_state (AnimData *adt) +void BKE_nla_validate_state(AnimData *adt) { NlaStrip *strip, *fstrip=NULL; NlaTrack *nlt; @@ -1470,7 +1470,7 @@ void BKE_nla_validate_state (AnimData *adt) * so no checks for this are performed. */ // TODO: maybe we should have checks for this too... -void BKE_nla_action_pushdown (AnimData *adt) +void BKE_nla_action_pushdown(AnimData *adt) { NlaStrip *strip; @@ -1518,7 +1518,7 @@ void BKE_nla_action_pushdown (AnimData *adt) /* Find the active strip + track combo, and set them up as the tweaking track, * and return if successful or not. */ -short BKE_nla_tweakmode_enter (AnimData *adt) +short BKE_nla_tweakmode_enter(AnimData *adt) { NlaTrack *nlt, *activeTrack=NULL; NlaStrip *strip, *activeStrip=NULL; @@ -1619,7 +1619,7 @@ short BKE_nla_tweakmode_enter (AnimData *adt) } /* Exit tweakmode for this AnimData block */ -void BKE_nla_tweakmode_exit (AnimData *adt) +void BKE_nla_tweakmode_exit(AnimData *adt) { NlaStrip *strip; NlaTrack *nlt; diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 2fb3f81b147..b2a85ad0629 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -141,8 +141,8 @@ void ntreeInitTypes(bNodeTree *ntree) /* needed info if the pynode script fails now: */ node->storage= ntree; if (node->id!=NULL) { /* not an empty script node */ - node->custom1= 0; - node->custom1= BSET(node->custom1,NODE_DYNAMIC_ADDEXIST); + node->custom1 = 0; + node->custom1 = BSET(node->custom1, NODE_DYNAMIC_ADDEXIST); } // if (node->typeinfo) // node->typeinfo->initfunc(node); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 78a57534e2b..bf2e5b833b6 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -56,6 +56,7 @@ #include "DNA_space_types.h" #include "DNA_view3d_types.h" #include "DNA_world_types.h" +#include "DNA_object_types.h" #include "BLI_blenlib.h" #include "BLI_bpath.h" @@ -164,9 +165,9 @@ void object_free_particlesystems(Object *ob) while (ob->particlesystem.first) { ParticleSystem *psys = ob->particlesystem.first; - BLI_remlink(&ob->particlesystem,psys); + BLI_remlink(&ob->particlesystem, psys); - psys_free(ob,psys); + psys_free(ob, psys); } } @@ -543,7 +544,7 @@ void unlink_object(Object *ob) BoidParticle *bpa; int p; - for (p=0,pa=tpsys->particles; p<tpsys->totpart; p++,pa++) { + for (p=0, pa=tpsys->particles; p<tpsys->totpart; p++, pa++) { bpa = pa->boid; if (bpa->ground == ob) bpa->ground = NULL; @@ -627,7 +628,8 @@ void unlink_object(Object *ob) #endif if (sce->ed) { Sequence *seq; - SEQ_BEGIN (sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) + { if (seq->scene_camera == ob) { seq->scene_camera = NULL; } @@ -755,7 +757,7 @@ int exist_object(Object *obtest) /* *************************************************** */ -static void *add_obdata_from_type(int type) +void *add_obdata_from_type(int type) { switch (type) { case OB_MESH: return add_mesh("Mesh"); @@ -763,7 +765,7 @@ static void *add_obdata_from_type(int type) case OB_SURF: return BKE_curve_add("Surf", OB_SURF); case OB_FONT: return BKE_curve_add("Text", OB_FONT); case OB_MBALL: return BKE_metaball_add("Meta"); - case OB_CAMERA: return add_camera("Camera"); + case OB_CAMERA: return BKE_camera_add("Camera"); case OB_LAMP: return add_lamp("Lamp"); case OB_LATTICE: return add_lattice("Lattice"); case OB_ARMATURE: return add_armature("Armature"); @@ -800,6 +802,9 @@ Object *add_only_object(int type, const char *name) { Object *ob; + if(!name) + name = get_obdata_defname(type); + ob= alloc_libblock(&G.main->object, ID_OB, name); /* default object vars */ @@ -888,6 +893,7 @@ Object *add_object(struct Scene *scene, int type) ob->lay= scene->lay; base= scene_add_base(scene, ob); + scene_deselect_all(scene); scene_select_base(scene, base); ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; @@ -1336,7 +1342,7 @@ void object_copy_proxy_drivers(Object *ob, Object *target) if ((Object *)dtar->id == target) dtar->id= (ID *)ob; else { - /* only on local objects because this causes indirect links a -> b -> c,blend to point directly to a.blend + /* only on local objects because this causes indirect links a -> b -> c, blend to point directly to a.blend * when a.blend has a proxy thats linked into c.blend */ if (ob->id.lib==NULL) id_lib_extern((ID *)dtar->id); @@ -1455,7 +1461,7 @@ void object_scale_to_mat3(Object *ob, float mat[][3]) { float vec[3]; mul_v3_v3v3(vec, ob->size, ob->dscale); - size_to_mat3( mat,vec); + size_to_mat3(mat, vec); } void object_rot_to_mat3(Object *ob, float mat[][3]) @@ -1702,12 +1708,12 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4]) /* vec: 4 items! */ - if ( where_on_path(par, ctime, vec, dir, cu->flag & CU_FOLLOW ? quat:NULL, &radius, NULL) ) { + if (where_on_path(par, ctime, vec, dir, cu->flag & CU_FOLLOW ? quat:NULL, &radius, NULL)) { if (cu->flag & CU_FOLLOW) { #if 0 float x1, q[4]; - vec_to_quat( quat,dir, ob->trackflag, ob->upflag); + vec_to_quat(quat, dir, ob->trackflag, ob->upflag); /* the tilt */ normalize_v3(dir); @@ -1811,7 +1817,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) } if (count==0) { - /* keep as 0,0,0 */ + /* keep as 0, 0, 0 */ } else if (count > 0) { mul_v3_fl(vec, 1.0f / count); @@ -1906,8 +1912,8 @@ static void ob_parvert3(Object *ob, Object *par, float mat[][4]) give_parvert(par, ob->par2, v2); give_parvert(par, ob->par3, v3); - tri_to_quat( q,v1, v2, v3); - quat_to_mat3( cmat,q); + tri_to_quat(q, v1, v2, v3); + quat_to_mat3(cmat, q); copy_m4_m3(mat, cmat); if (ob->type==OB_CURVE) { @@ -1928,7 +1934,7 @@ static int where_is_object_parslow(Object *ob, float obmat[4][4], float slowmat[ int a; // include framerate - fac1= ( 1.0f / (1.0f + fabsf(ob->sf)) ); + fac1= (1.0f / (1.0f + fabsf(ob->sf)) ); if (fac1 >= 1.0f) return 0; fac2= 1.0f-fac1; @@ -2040,7 +2046,7 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ case PAROBJECT: ok= 0; if (par->type==OB_CURVE) { - if ( ((Curve *)par->data)->flag & CU_PATH ) { + if (((Curve *)par->data)->flag & CU_PATH ) { ob_parcurve(scene, ob, par, tmat); ok= 1; } @@ -2093,7 +2099,7 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ copy_m3_m4(originmat, tmat); // origin, voor help line - if ( (ob->partype & PARTYPE)==PARSKEL ) { + if ((ob->partype & PARTYPE)==PARSKEL ) { copy_v3_v3(ob->orig, par->obmat[3]); } else { @@ -2179,7 +2185,7 @@ void what_does_parent(Scene *scene, Object *ob, Object *workob) BoundBox *unit_boundbox(void) { BoundBox *bb; - float min[3] = {-1.0f,-1.0f,-1.0f}, max[3] = {-1.0f,-1.0f,-1.0f}; + float min[3] = {-1.0f, -1.0f, -1.0f}, max[3] = {-1.0f, -1.0f, -1.0f}; bb= MEM_callocN(sizeof(BoundBox), "OB-BoundBox"); boundbox_set_from_min_max(bb, min, max); @@ -2207,7 +2213,7 @@ BoundBox *object_get_boundbox(Object *ob) bb = mesh_get_bb(ob); } else if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) { - bb= ob->bb ? ob->bb : ( (Curve *)ob->data )->bb; + bb= ob->bb ? ob->bb : ((Curve *)ob->data )->bb; } else if (ob->type==OB_MBALL) { bb= ob->bb; @@ -2233,7 +2239,7 @@ void object_get_dimensions(Object *ob, float vec[3]) if (bb) { float scale[3]; - mat4_to_size( scale,ob->obmat); + mat4_to_size(scale, ob->obmat); vec[0] = fabsf(scale[0]) * (bb->vec[4][0] - bb->vec[0][0]); vec[1] = fabsf(scale[1]) * (bb->vec[2][1] - bb->vec[0][1]); @@ -2252,7 +2258,7 @@ void object_set_dimensions(Object *ob, const float *value) if (bb) { float scale[3], len[3]; - mat4_to_size( scale,ob->obmat); + mat4_to_size(scale, ob->obmat); len[0] = bb->vec[4][0] - bb->vec[0][0]; len[1] = bb->vec[2][1] - bb->vec[0][1]; @@ -2654,7 +2660,7 @@ void object_handle_update(Scene *scene, Object *ob) else if (psys->flag & PSYS_DELETE) { tpsys=psys->next; BLI_remlink(&ob->particlesystem, psys); - psys_free(ob,psys); + psys_free(ob, psys); psys= tpsys; } else @@ -2906,7 +2912,7 @@ static KeyBlock *insert_lattkey(Scene *scene, Object *ob, const char *name, int int newkey= 0; if (key==NULL) { - key= lt->key= add_key( (ID *)lt); + key= lt->key= add_key((ID *)lt); key->type= KEY_RELATIVE; newkey= 1; } @@ -2944,7 +2950,7 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, int int newkey= 0; if (key==NULL) { - key= cu->key= add_key( (ID *)cu); + key= cu->key= add_key((ID *)cu); key->type = KEY_RELATIVE; newkey= 1; } @@ -2991,8 +2997,7 @@ KeyBlock *object_insert_shape_key(Scene *scene, Object *ob, const char *name, in } /* most important if this is modified it should _always_ return True, in certain - * cases false positives are hard to avoid (shape keys for eg) - */ + * cases false positives are hard to avoid (shape keys for example) */ int object_is_modified(Scene *scene, Object *ob) { int flag= 0; @@ -3007,13 +3012,38 @@ int object_is_modified(Scene *scene, Object *ob) md && (flag != (eModifierMode_Render | eModifierMode_Realtime)); md=md->next) { - if ((flag & eModifierMode_Render) == 0 && modifier_isEnabled(scene, md, eModifierMode_Render)) { + if ((flag & eModifierMode_Render) == 0 && modifier_isEnabled(scene, md, eModifierMode_Render)) flag |= eModifierMode_Render; - } - if ((flag & eModifierMode_Realtime) == 0 && modifier_isEnabled(scene, md, eModifierMode_Realtime)) { + if ((flag & eModifierMode_Realtime) == 0 && modifier_isEnabled(scene, md, eModifierMode_Realtime)) + flag |= eModifierMode_Realtime; + } + } + + return flag; +} + +/* test if object is affected by deforming modifiers (for motion blur). again + * most important is to avoid false positives, this is to skip computations + * and we can still if there was actual deformation afterwards */ +int object_is_deform_modified(Scene *scene, Object *ob) +{ + ModifierData *md; + int flag= 0; + + /* cloth */ + for (md=modifiers_getVirtualModifierList(ob); + md && (flag != (eModifierMode_Render | eModifierMode_Realtime)); + md=md->next) + { + ModifierTypeInfo *mti = modifierType_getInfo(md->type); + + if (mti->type == eModifierTypeType_OnlyDeform) { + if (!(flag & eModifierMode_Render) && modifier_isEnabled(scene, md, eModifierMode_Render)) + flag |= eModifierMode_Render; + + if (!(flag & eModifierMode_Realtime) && modifier_isEnabled(scene, md, eModifierMode_Realtime)) flag |= eModifierMode_Realtime; - } } } diff --git a/source/blender/blenkernel/intern/ocean.c b/source/blender/blenkernel/intern/ocean.c index 5ba1b3d86c3..4ddcd6f4b51 100644 --- a/source/blender/blenkernel/intern/ocean.c +++ b/source/blender/blenkernel/intern/ocean.c @@ -172,12 +172,12 @@ static float gaussRand (void) /** * Some useful functions * */ -MINLINE float lerp(float a,float b,float f) +MINLINE float lerp(float a, float b, float f) { return a + (b-a)*f; } -MINLINE float catrom(float p0,float p1,float p2,float p3,float f) +MINLINE float catrom(float p0, float p1, float p2, float p3, float f) { return 0.5f *((2.0f * p1) + (-p0 + p2) * f + @@ -191,7 +191,7 @@ MINLINE float omega(float k, float depth) } // modified Phillips spectrum -static float Ph(struct Ocean* o, float kx,float kz ) +static float Ph(struct Ocean* o, float kx, float kz ) { float tmp; float k2 = kx*kx + kz*kz; @@ -206,12 +206,12 @@ static float Ph(struct Ocean* o, float kx,float kz ) tmp *= o->_damp_reflections; } - return o->_A * expf( -1.0f / (k2*(o->_L*o->_L))) * expf(-k2 * (o->_l*o->_l)) * powf(fabsf(tmp),o->_wind_alignment) / (k2*k2); + return o->_A * expf( -1.0f / (k2*(o->_L*o->_L))) * expf(-k2 * (o->_l*o->_l)) * powf(fabsf(tmp), o->_wind_alignment) / (k2*k2); } -static void compute_eigenstuff(struct OceanResult *ocr, float jxx,float jzz,float jxz) +static void compute_eigenstuff(struct OceanResult *ocr, float jxx, float jzz, float jxz) { - float a,b,qplus,qminus; + float a, b, qplus, qminus; a = jxx + jzz; b = sqrt((jxx - jzz)*(jxx - jzz) + 4 * jxz * jxz); @@ -304,15 +304,15 @@ float BKE_ocean_jminus_to_foam(float jminus, float coverage) return foam*foam; } -void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u,float v) +void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v) { - int i0,i1,j0,j1; - float frac_x,frac_z; - float uu,vv; + int i0, i1, j0, j1; + float frac_x, frac_z; + float uu, vv; - // first wrap the texture so 0 <= (u,v) < 1 - u = fmodf(u,1.0f); - v = fmodf(v,1.0f); + // first wrap the texture so 0 <= (u, v) < 1 + u = fmodf(u, 1.0f); + v = fmodf(v, 1.0f); if (u < 0) u += 1.0f; if (v < 0) v += 1.0f; @@ -338,7 +338,7 @@ void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u,float j1 = j1 % oc->_N; -#define BILERP(m) (lerp(lerp(m[i0*oc->_N+j0],m[i1*oc->_N+j0],frac_x),lerp(m[i0*oc->_N+j1],m[i1*oc->_N+j1],frac_x),frac_z)) +#define BILERP(m) (lerp(lerp(m[i0*oc->_N+j0], m[i1*oc->_N+j0], frac_x), lerp(m[i0*oc->_N+j1], m[i1*oc->_N+j1], frac_x), frac_z)) { if (oc->_do_disp_y) { ocr->disp[1] = BILERP(oc->_disp_y); @@ -360,7 +360,7 @@ void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u,float } if (oc->_do_jacobian) { - compute_eigenstuff(ocr, BILERP(oc->_Jxx),BILERP(oc->_Jzz),BILERP(oc->_Jxz)); + compute_eigenstuff(ocr, BILERP(oc->_Jxx), BILERP(oc->_Jzz), BILERP(oc->_Jxz)); } } #undef BILERP @@ -369,15 +369,15 @@ void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u,float } // use catmullrom interpolation rather than linear -void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u,float v) +void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u, float v) { - int i0,i1,i2,i3,j0,j1,j2,j3; - float frac_x,frac_z; - float uu,vv; + int i0, i1, i2, i3, j0, j1, j2, j3; + float frac_x, frac_z; + float uu, vv; - // first wrap the texture so 0 <= (u,v) < 1 - u = fmod(u,1.0f); - v = fmod(v,1.0f); + // first wrap the texture so 0 <= (u, v) < 1 + u = fmod(u, 1.0f); + v = fmod(v, 1.0f); if (u < 0) u += 1.0f; if (v < 0) v += 1.0f; @@ -412,10 +412,10 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u j0 = j0 < 0 ? j0 + oc->_N : j0; j3 = j3 >= oc->_N ? j3 - oc->_N : j3; -#define INTERP(m) catrom(catrom(m[i0*oc->_N+j0],m[i1*oc->_N+j0],m[i2*oc->_N+j0],m[i3*oc->_N+j0],frac_x),\ - catrom(m[i0*oc->_N+j1],m[i1*oc->_N+j1],m[i2*oc->_N+j1],m[i3*oc->_N+j1],frac_x),\ - catrom(m[i0*oc->_N+j2],m[i1*oc->_N+j2],m[i2*oc->_N+j2],m[i3*oc->_N+j2],frac_x),\ - catrom(m[i0*oc->_N+j3],m[i1*oc->_N+j3],m[i2*oc->_N+j3],m[i3*oc->_N+j3],frac_x),\ +#define INTERP(m) catrom(catrom(m[i0*oc->_N+j0], m[i1*oc->_N+j0], m[i2*oc->_N+j0], m[i3*oc->_N+j0], frac_x), \ + catrom(m[i0*oc->_N+j1], m[i1*oc->_N+j1], m[i2*oc->_N+j1], m[i3*oc->_N+j1], frac_x), \ + catrom(m[i0*oc->_N+j2], m[i1*oc->_N+j2], m[i2*oc->_N+j2], m[i3*oc->_N+j2], frac_x), \ + catrom(m[i0*oc->_N+j3], m[i1*oc->_N+j3], m[i2*oc->_N+j3], m[i3*oc->_N+j3], frac_x), \ frac_z) { @@ -437,7 +437,7 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u } if (oc->_do_jacobian) { - compute_eigenstuff(ocr, INTERP(oc->_Jxx),INTERP(oc->_Jzz),INTERP(oc->_Jxz)); + compute_eigenstuff(ocr, INTERP(oc->_Jxx), INTERP(oc->_Jzz), INTERP(oc->_Jxz)); } } #undef INTERP @@ -446,20 +446,20 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u } -void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x,float z) +void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z) { - BKE_ocean_eval_uv(oc, ocr, x/oc->_Lx,z/oc->_Lz); + BKE_ocean_eval_uv(oc, ocr, x/oc->_Lx, z/oc->_Lz); } -void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x,float z) +void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z) { - BKE_ocean_eval_uv_catrom(oc, ocr, x/oc->_Lx,z/oc->_Lz); + BKE_ocean_eval_uv_catrom(oc, ocr, x/oc->_Lx, z/oc->_Lz); } -// note that this doesn't wrap properly for i,j < 0, but its +// note that this doesn't wrap properly for i, j < 0, but its // not really meant for that being just a way to get the raw data out // to save in some image format. -void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i,int j) +void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j) { BLI_rw_mutex_lock(&oc->oceanmutex, THREAD_LOCK_READ); @@ -486,7 +486,7 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i,int j) } if (oc->_do_jacobian) { - compute_eigenstuff(ocr, oc->_Jxx[i*oc->_N+j],oc->_Jzz[i*oc->_N+j],oc->_Jxz[i*oc->_N+j]); + compute_eigenstuff(ocr, oc->_Jxx[i*oc->_N+j], oc->_Jzz[i*oc->_N+j], oc->_Jxz[i*oc->_N+j]); } BLI_rw_mutex_unlock(&oc->oceanmutex); @@ -511,8 +511,8 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount fftw_complex conj_param; - init_complex(exp_param1, 0.0, omega(o->_k[i*(1+o->_N/2)+j],o->_depth)*t); - init_complex(exp_param2, 0.0, -omega(o->_k[i*(1+o->_N/2)+j],o->_depth)*t); + init_complex(exp_param1, 0.0, omega(o->_k[i*(1+o->_N/2)+j], o->_depth)*t); + init_complex(exp_param2, 0.0, -omega(o->_k[i*(1+o->_N/2)+j], o->_depth)*t); exp_complex(exp_param1, exp_param1); exp_complex(exp_param2, exp_param2); conj_complex(conj_param, o->_h0_minus[i*o->_N+j]); @@ -710,7 +710,7 @@ static void set_height_normalize_factor(struct Ocean *oc) float res = 1.0; float max_h = 0.0; - int i,j; + int i, j; if (!oc->_do_disp_y) return; @@ -746,10 +746,10 @@ struct Ocean *BKE_add_ocean(void) return oc; } -void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, float l, float A, float w, float damp, +void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp, float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed) { - int i,j,ii; + int i, j, ii; BLI_rw_mutex_lock(&o->oceanmutex, THREAD_LOCK_WRITE); @@ -792,7 +792,7 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f o->_kx[i] = 2.0f * (float)M_PI * i / o->_Lx; // the -ve components - for (i = o->_M-1,ii=0 ; i > o->_M/2 ; --i,++ii) + for (i = o->_M-1, ii=0 ; i > o->_M/2 ; --i, ++ii) o->_kx[i] = -2.0f * (float)M_PI * ii / o->_Lx; // the +ve components and DC @@ -800,7 +800,7 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f o->_kz[i] = 2.0f * (float)M_PI * i / o->_Lz; // the -ve components - for (i = o->_N-1,ii=0 ; i > o->_N/2 ; --i,++ii) + for (i = o->_N-1, ii=0 ; i > o->_N/2 ; --i, ++ii) o->_kz[i] = -2.0f * (float)M_PI * ii / o->_Lz; // pre-calculate the k matrix @@ -819,7 +819,7 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f fftw_complex r1r2; init_complex(r1r2, r1, r2); mul_complex_f(o->_h0[i*o->_N+j], r1r2, (float)(sqrt(Ph(o, o->_kx[i], o->_kz[j]) / 2.0f))); - mul_complex_f(o->_h0_minus[i*o->_N+j], r1r2, (float)(sqrt(Ph(o, -o->_kx[i],-o->_kz[j]) / 2.0f))); + mul_complex_f(o->_h0_minus[i*o->_N+j], r1r2, (float)(sqrt(Ph(o, -o->_kx[i], -o->_kz[j]) / 2.0f))); } } @@ -828,7 +828,7 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f if (o->_do_disp_y) { o->_disp_y = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_y"); - o->_disp_y_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in, o->_disp_y, FFTW_ESTIMATE); + o->_disp_y_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in, o->_disp_y, FFTW_ESTIMATE); } if (o->_do_normals) { @@ -839,8 +839,8 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f /*o->_N_y = (float*) fftwf_malloc(o->_M * o->_N * sizeof(float)); (MEM01)*/ o->_N_z = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_z"); - o->_N_x_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_nx, o->_N_x, FFTW_ESTIMATE); - o->_N_z_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_nz, o->_N_z, FFTW_ESTIMATE); + o->_N_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nx, o->_N_x, FFTW_ESTIMATE); + o->_N_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nz, o->_N_z, FFTW_ESTIMATE); } if (o->_do_chop) { @@ -850,8 +850,8 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f o->_disp_x = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_x"); o->_disp_z = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_z"); - o->_disp_x_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_x, o->_disp_x, FFTW_ESTIMATE); - o->_disp_z_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_z, o->_disp_z, FFTW_ESTIMATE); + o->_disp_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_x, o->_disp_x, FFTW_ESTIMATE); + o->_disp_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_z, o->_disp_z, FFTW_ESTIMATE); } if (o->_do_jacobian) { o->_fft_in_jxx = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_jxx"); @@ -862,9 +862,9 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f o->_Jzz = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jzz"); o->_Jxz = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxz"); - o->_Jxx_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_jxx, o->_Jxx, FFTW_ESTIMATE); - o->_Jzz_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_jzz, o->_Jzz, FFTW_ESTIMATE); - o->_Jxz_plan = fftw_plan_dft_c2r_2d(o->_M,o->_N, o->_fft_in_jxz, o->_Jxz, FFTW_ESTIMATE); + o->_Jxx_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxx, o->_Jxx, FFTW_ESTIMATE); + o->_Jzz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jzz, o->_Jzz, FFTW_ESTIMATE); + o->_Jxz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxz, o->_Jxz, FFTW_ESTIMATE); } BLI_rw_mutex_unlock(&o->oceanmutex); @@ -1192,7 +1192,7 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v if (o->_do_jacobian) { /* TODO, cleanup unused code - campbell */ - float /*r,*/ /* UNUSED */ pr=0.0f, foam_result; + float /*r, */ /* UNUSED */ pr=0.0f, foam_result; float neg_disp, neg_eplus; ocr.foam = BKE_ocean_jminus_to_foam(ocr.Jminus, och->foam_coverage); @@ -1298,24 +1298,24 @@ float BKE_ocean_jminus_to_foam(float UNUSED(jminus), float UNUSED(coverage)) return 0.0f; } -void BKE_ocean_eval_uv(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u),float UNUSED(v)) +void BKE_ocean_eval_uv(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u), float UNUSED(v)) { } // use catmullrom interpolation rather than linear -void BKE_ocean_eval_uv_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u),float UNUSED(v)) +void BKE_ocean_eval_uv_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(u), float UNUSED(v)) { } -void BKE_ocean_eval_xz(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x),float UNUSED(z)) +void BKE_ocean_eval_xz(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x), float UNUSED(z)) { } -void BKE_ocean_eval_xz_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x),float UNUSED(z)) +void BKE_ocean_eval_xz_catrom(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), float UNUSED(x), float UNUSED(z)) { } -void BKE_ocean_eval_ij(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), int UNUSED(i),int UNUSED(j)) +void BKE_ocean_eval_ij(struct Ocean *UNUSED(oc), struct OceanResult *UNUSED(ocr), int UNUSED(i), int UNUSED(j)) { } @@ -1330,7 +1330,7 @@ struct Ocean *BKE_add_ocean(void) return oc; } -void BKE_init_ocean(struct Ocean* UNUSED(o), int UNUSED(M),int UNUSED(N), float UNUSED(Lx), float UNUSED(Lz), float UNUSED(V), float UNUSED(l), float UNUSED(A), float UNUSED(w), float UNUSED(damp), +void BKE_init_ocean(struct Ocean* UNUSED(o), int UNUSED(M), int UNUSED(N), float UNUSED(Lx), float UNUSED(Lz), float UNUSED(V), float UNUSED(l), float UNUSED(A), float UNUSED(w), float UNUSED(damp), float UNUSED(alignment), float UNUSED(depth), float UNUSED(time), short UNUSED(do_height_field), short UNUSED(do_chop), short UNUSED(do_normals), short UNUSED(do_jacobian), int UNUSED(seed)) { } diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index e0c61fbcc90..3b5b4b766fb 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -189,7 +189,7 @@ PackedFile *newPackedFile(ReportList *reports, const char *filename, const char // open the file // and create a PackedFile structure - file= BLI_open(name, O_BINARY|O_RDONLY,0); + file= BLI_open(name, O_BINARY|O_RDONLY, 0); if (file <= 0) { BKE_reportf(reports, RPT_ERROR, "Unable to pack file, source path not found: \"%s\"", name); } diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index f417f9b79fb..08d8479fd93 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -126,7 +126,7 @@ void paint_init(Paint *p, const char col[3]) /* If there's no brush, create one */ brush = paint_brush(p); if (brush == NULL) - brush= add_brush("Brush"); + brush= BKE_brush_add("Brush"); paint_brush_set(p, brush); memcpy(p->paint_cursor_col, col, 3); diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index febe4277010..1a1ae8e949c 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -549,7 +549,7 @@ void psys_free(Object *ob, ParticleSystem * psys) // check if we are last non-visible particle system for (tpsys=ob->particlesystem.first; tpsys; tpsys=tpsys->next) { if (tpsys->part) { - if (ELEM(tpsys->part->ren_as,PART_DRAW_OB,PART_DRAW_GR)) { + if (ELEM(tpsys->part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) { nr++; break; } @@ -637,7 +637,7 @@ static float psys_render_projected_area(ParticleSystem *psys, const float center /* compute two vectors orthogonal to view vector */ normalize_v3_v3(view, co); - ortho_basis_v3v3_v3( ortho1, ortho2,view); + ortho_basis_v3v3_v3(ortho1, ortho2, view); /* compute on screen minification */ w= co[2]*data->winmat[2][3] + data->winmat[3][3]; @@ -1024,7 +1024,7 @@ void psys_interpolate_particle(short type, ParticleKey keys[4], float dt, Partic float t[4]; if (type<0) { - interp_cubic_v3( result->co, result->vel,keys[1].co, keys[1].vel, keys[2].co, keys[2].vel, dt); + interp_cubic_v3(result->co, result->vel, keys[1].co, keys[1].vel, keys[2].co, keys[2].vel, dt); } else { key_curve_position_weights(dt, t, type); @@ -1357,13 +1357,13 @@ static void do_particle_interpolation(ParticleSystem *psys, int p, ParticleData invdt = dfra * 0.04f * (psys ? psys->part->timetweak : 1.f); mul_v3_fl(keys[1].vel, invdt); mul_v3_fl(keys[2].vel, invdt); - interp_qt_qtqt(result->rot,keys[1].rot,keys[2].rot,keytime); + interp_qt_qtqt(result->rot, keys[1].rot, keys[2].rot, keytime); } - /* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0,1]->[k2,k3] (k1 & k4 used for cardinal & bspline interpolation)*/ + /* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0, 1]->[k2, k3] (k1 & k4 used for cardinal & bspline interpolation)*/ psys_interpolate_particle((pind->keyed || pind->cache || point_vel) ? -1 /* signal for cubic interpolation */ - : (pind->bspline ? KEY_BSPLINE : KEY_CARDINAL) - ,keys, keytime, result, 1); + : (pind->bspline ? KEY_BSPLINE : KEY_CARDINAL), + keys, keytime, result, 1); /* the velocity needs to be converted back from cubic interpolation */ if (pind->keyed || pind->cache || point_vel) @@ -1403,10 +1403,10 @@ static void interpolate_pathcache(ParticleCacheKey *first, float t, ParticleCach /************************************************/ /* interpolate a location on a face based on face coordinates */ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*orcodata)[3], - float *w, float *vec, float *nor, float *utan, float *vtan, float *orco,float *ornor) + float *w, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor) { float *v1=0, *v2=0, *v3=0, *v4=0; - float e1[3],e2[3],s1,s2,t1,t2; + float e1[3], e2[3], s1, s2, t1, t2; float *uv1, *uv2, *uv3, *uv4; float n1[3], n2[3], n3[3], n4[3]; float tuv[4][2]; @@ -1430,7 +1430,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or if (mface->flag & ME_SMOOTH) interp_v3_v3v3v3v3(nor, n1, n2, n3, n4, w); else - normal_quad_v3(nor,v1,v2,v3,v4); + normal_quad_v3(nor, v1, v2, v3, v4); } } else { @@ -1440,7 +1440,7 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or if (mface->flag & ME_SMOOTH) interp_v3_v3v3v3(nor, n1, n2, n3, w); else - normal_tri_v3(nor,v1,v2,v3); + normal_tri_v3(nor, v1, v2, v3); } } @@ -1454,11 +1454,11 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or } else { uv1= tuv[0]; uv2= tuv[1]; uv3= tuv[2]; uv4= tuv[3]; - map_to_sphere( uv1, uv1+1,v1[0], v1[1], v1[2]); - map_to_sphere( uv2, uv2+1,v2[0], v2[1], v2[2]); - map_to_sphere( uv3, uv3+1,v3[0], v3[1], v3[2]); + map_to_sphere(uv1, uv1+1, v1[0], v1[1], v1[2]); + map_to_sphere(uv2, uv2+1, v2[0], v2[1], v2[2]); + map_to_sphere(uv3, uv3+1, v3[0], v3[1], v3[2]); if (v4) - map_to_sphere( uv4, uv4+1,v4[0], v4[1], v4[2]); + map_to_sphere(uv4, uv4+1, v4[0], v4[1], v4[2]); } if (v4) { @@ -1503,13 +1503,13 @@ void psys_interpolate_face(MVert *mvert, MFace *mface, MTFace *tface, float (*or interp_v3_v3v3v3v3(orco, o1, o2, o3, o4, w); if (ornor) - normal_quad_v3( ornor,o1, o2, o3, o4); + normal_quad_v3(ornor, o1, o2, o3, o4); } else { interp_v3_v3v3v3(orco, o1, o2, o3, w); if (ornor) - normal_tri_v3( ornor,o1, o2, o3); + normal_tri_v3(ornor, o1, o2, o3); } } else { @@ -1527,7 +1527,7 @@ void psys_interpolate_uvs(const MTFace *tface, int quad, const float w[4], float float v21= tface->uv[1][1]; float v30= tface->uv[2][0]; float v31= tface->uv[2][1]; - float v40,v41; + float v40, v41; if (quad) { v40= tface->uv[3][0]; @@ -1578,8 +1578,8 @@ static float psys_interpolate_value_from_verts(DerivedMesh *dm, short from, int case PART_FROM_FACE: case PART_FROM_VOLUME: { - MFace *mf=dm->getTessFaceData(dm,index,CD_MFACE); - return interpolate_particle_value(values[mf->v1],values[mf->v2],values[mf->v3],values[mf->v4],fw,mf->v4); + MFace *mf=dm->getTessFaceData(dm, index, CD_MFACE); + return interpolate_particle_value(values[mf->v1], values[mf->v2], values[mf->v3], values[mf->v4], fw, mf->v4); } } @@ -1766,10 +1766,10 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache orcodata= dm->getVertDataArray(dm, CD_ORCO); if (from == PART_FROM_VERT) { - dm->getVertCo(dm,mapindex,vec); + dm->getVertCo(dm, mapindex, vec); if (nor) { - dm->getVertNo(dm,mapindex,nor); + dm->getVertNo(dm, mapindex, nor); normalize_v3(nor); } @@ -1777,7 +1777,7 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache copy_v3_v3(orco, orcodata[mapindex]); if (ornor) { - dm->getVertNo(dm,mapindex,nor); + dm->getVertNo(dm, mapindex, nor); normalize_v3(nor); } @@ -1791,24 +1791,24 @@ void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache MTFace *mtface; MVert *mvert; - mface=dm->getTessFaceData(dm,mapindex,CD_MFACE); - mvert=dm->getVertDataArray(dm,CD_MVERT); - mtface=CustomData_get_layer(&dm->faceData,CD_MTFACE); + mface=dm->getTessFaceData(dm, mapindex, CD_MFACE); + mvert=dm->getVertDataArray(dm, CD_MVERT); + mtface=CustomData_get_layer(&dm->faceData, CD_MTFACE); if (mtface) mtface += mapindex; if (from==PART_FROM_VOLUME) { - psys_interpolate_face(mvert,mface,mtface,orcodata,mapfw,vec,tmpnor,utan,vtan,orco,ornor); + psys_interpolate_face(mvert, mface, mtface, orcodata, mapfw, vec, tmpnor, utan, vtan, orco, ornor); if (nor) - copy_v3_v3(nor,tmpnor); + copy_v3_v3(nor, tmpnor); normalize_v3(tmpnor); - mul_v3_fl(tmpnor,-foffset); + mul_v3_fl(tmpnor, -foffset); add_v3_v3(vec, tmpnor); } else - psys_interpolate_face(mvert,mface,mtface,orcodata,mapfw,vec,nor,utan,vtan,orco,ornor); + psys_interpolate_face(mvert, mface, mtface, orcodata, mapfw, vec, nor, utan, vtan, orco, ornor); } } @@ -1845,24 +1845,24 @@ ParticleSystemModifierData *psys_get_modifier(Object *ob, ParticleSystem *psys) static void psys_particle_on_shape(int UNUSED(distr), int UNUSED(index), float *UNUSED(fuv), float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor) { /* TODO */ - float zerovec[3]={0.0f,0.0f,0.0f}; + float zerovec[3]={0.0f, 0.0f, 0.0f}; if (vec) { - copy_v3_v3(vec,zerovec); + copy_v3_v3(vec, zerovec); } if (nor) { - copy_v3_v3(nor,zerovec); + copy_v3_v3(nor, zerovec); } if (utan) { - copy_v3_v3(utan,zerovec); + copy_v3_v3(utan, zerovec); } if (vtan) { - copy_v3_v3(vtan,zerovec); + copy_v3_v3(vtan, zerovec); } if (orco) { - copy_v3_v3(orco,zerovec); + copy_v3_v3(orco, zerovec); } if (ornor) { - copy_v3_v3(ornor,zerovec); + copy_v3_v3(ornor, zerovec); } } /************************************************/ @@ -1873,17 +1873,17 @@ void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int in if (psmd) { if (psmd->psys->part->distr==PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT) { if (vec) - copy_v3_v3(vec,fuv); + copy_v3_v3(vec, fuv); if (orco) copy_v3_v3(orco, fuv); return; } /* we cant use the num_dmcache */ - psys_particle_on_dm(psmd->dm,from,index,index_dmcache,fuv,foffset,vec,nor,utan,vtan,orco,ornor); + psys_particle_on_dm(psmd->dm, from, index, index_dmcache, fuv, foffset, vec, nor, utan, vtan, orco, ornor); } else - psys_particle_on_shape(from,index,fuv,vec,nor,utan,vtan,orco,ornor); + psys_particle_on_shape(from, index, fuv, vec, nor, utan, vtan, orco, ornor); } /************************************************/ @@ -1892,7 +1892,7 @@ void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int in static void do_kink(ParticleKey *state, ParticleKey *par, float *par_rot, float time, float freq, float shape, float amplitude, float flat, short type, short axis, float obmat[][4], int smooth_start) { - float kink[3]={1.f,0.f,0.f}, par_vec[3], q1[4]={1.f,0.f,0.f,0.f}; + float kink[3]={1.f, 0.f, 0.f}, par_vec[3], q1[4]={1.f, 0.f, 0.f, 0.f}; float t, dt=1.f, result[3]; if (par == NULL || type == PART_KINK_NO) @@ -1995,8 +1995,8 @@ static void do_kink(ParticleKey *state, ParticleKey *par, float *par_rot, float } case PART_KINK_BRAID: { - float y_vec[3]={0.f,1.f,0.f}; - float z_vec[3]={0.f,0.f,1.f}; + float y_vec[3]={0.f, 1.f, 0.f}; + float z_vec[3]={0.f, 0.f, 1.f}; float vec_one[3], state_co[3]; float inp_y, inp_z, length; @@ -2077,11 +2077,11 @@ static float do_clump(ParticleKey *state, ParticleKey *par, float time, float cl cpow=1.0f+9.0f*clumppow; if (clumpfac < 0.0f) /* clump roots instead of tips */ - clump = -clumpfac*pa_clump*(float)pow(1.0-(double)time,(double)cpow); + clump = -clumpfac*pa_clump*(float)pow(1.0-(double)time, (double)cpow); else - clump = clumpfac*pa_clump*(float)pow((double)time,(double)cpow); + clump = clumpfac*pa_clump*(float)pow((double)time, (double)cpow); - interp_v3_v3v3(state->co,state->co,par->co,clump); + interp_v3_v3v3(state->co, state->co, par->co, clump); } return clump; @@ -2101,7 +2101,7 @@ void precalc_guides(ParticleSimulationData *sim, ListBase *effectors) return; LOOP_PARTICLES { - psys_particle_on_emitter(sim->psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,state.co,0,0,0,0,0); + psys_particle_on_emitter(sim->psmd, sim->psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, state.co, 0, 0, 0, 0, 0); mul_m4_v3(sim->ob->obmat, state.co); mul_mat3_m4_v3(sim->ob->obmat, state.vel); @@ -2178,11 +2178,11 @@ int do_guides(ListBase *effectors, ParticleKey *state, int index, float time) cross_v3_v3v3(temp, eff->guide_dir, guidedir); angle = dot_v3v3(eff->guide_dir, guidedir)/(len_v3(eff->guide_dir)); angle = saacos(angle); - axis_angle_to_quat( rot2,temp, angle); + axis_angle_to_quat(rot2, temp, angle); mul_qt_v3(rot2, vec_to_point); /* curve tilt */ - axis_angle_to_quat( rot2,guidedir, guidevec[3] - eff->guide_loc[3]); + axis_angle_to_quat(rot2, guidedir, guidevec[3] - eff->guide_loc[3]); mul_qt_v3(rot2, vec_to_point); } @@ -2203,7 +2203,7 @@ int do_guides(ListBase *effectors, ParticleKey *state, int index, float time) add_v3_v3(vec_to_point, guidevec); - //sub_v3_v3v3(pa_loc,pa_loc,pa_zero); + //sub_v3_v3v3(pa_loc, pa_loc, pa_zero); madd_v3_v3fl(effect, vec_to_point, data->strength); madd_v3_v3fl(veffect, guidedir, data->strength); totstrength += data->strength; @@ -2216,7 +2216,7 @@ int do_guides(ListBase *effectors, ParticleKey *state, int index, float time) if (totstrength > 1.0f) mul_v3_fl(effect, 1.0f / totstrength); CLAMP(totstrength, 0.0f, 1.0f); - //add_v3_v3(effect,pa_zero); + //add_v3_v3(effect, pa_zero); interp_v3_v3v3(state->co, state->co, effect, totstrength); normalize_v3(veffect); @@ -2234,11 +2234,11 @@ static void do_rough(float *loc, float mat[4][4], float t, float fac, float size if (thres != 0.0f) if ((float)fabs((float)(-1.5f+loc[0]+loc[1]+loc[2]))<1.5f*thres) return; - copy_v3_v3(rco,loc); - mul_v3_fl(rco,t); - rough[0]=-1.0f+2.0f*BLI_gTurbulence(size, rco[0], rco[1], rco[2], 2,0,2); - rough[1]=-1.0f+2.0f*BLI_gTurbulence(size, rco[1], rco[2], rco[0], 2,0,2); - rough[2]=-1.0f+2.0f*BLI_gTurbulence(size, rco[2], rco[0], rco[1], 2,0,2); + copy_v3_v3(rco, loc); + mul_v3_fl(rco, t); + rough[0]=-1.0f+2.0f*BLI_gTurbulence(size, rco[0], rco[1], rco[2], 2, 0, 2); + rough[1]=-1.0f+2.0f*BLI_gTurbulence(size, rco[1], rco[2], rco[0], 2, 0, 2); + rough[2]=-1.0f+2.0f*BLI_gTurbulence(size, rco[2], rco[0], rco[1], 2, 0, 2); madd_v3_v3fl(state->co, mat[0], fac * rough[0]); madd_v3_v3fl(state->co, mat[1], fac * rough[1]); @@ -2249,18 +2249,18 @@ static void do_rough_end(float *loc, float mat[4][4], float t, float fac, float float rough[2]; float roughfac; - roughfac=fac*(float)pow((double)t,shape); - copy_v2_v2(rough,loc); + roughfac=fac*(float)pow((double)t, shape); + copy_v2_v2(rough, loc); rough[0]=-1.0f+2.0f*rough[0]; rough[1]=-1.0f+2.0f*rough[1]; - mul_v2_fl(rough,roughfac); + mul_v2_fl(rough, roughfac); madd_v3_v3fl(state->co, mat[0], rough[0]); madd_v3_v3fl(state->co, mat[1], rough[1]); } static void do_path_effectors(ParticleSimulationData *sim, int i, ParticleCacheKey *ca, int k, int steps, float *UNUSED(rootco), float effector, float UNUSED(dfra), float UNUSED(cfra), float *length, float *vec) { - float force[3] = {0.0f,0.0f,0.0f}; + float force[3] = {0.0f, 0.0f, 0.0f}; ParticleKey eff_key; EffectedPoint epoint; @@ -2268,9 +2268,9 @@ static void do_path_effectors(ParticleSimulationData *sim, int i, ParticleCacheK if (sim->psys->flag & PSYS_HAIR_DYNAMICS) return; - copy_v3_v3(eff_key.co,(ca-1)->co); - copy_v3_v3(eff_key.vel,(ca-1)->vel); - copy_qt_qt(eff_key.rot,(ca-1)->rot); + copy_v3_v3(eff_key.co, (ca-1)->co); + copy_v3_v3(eff_key.vel, (ca-1)->vel); + copy_qt_qt(eff_key.rot, (ca-1)->rot); pd_point_from_particle(sim, sim->psys->particles+i, &eff_key, &epoint); pdDoEffectors(sim->psys->effectors, sim->colliders, sim->psys->part->effector_weights, &epoint, force, NULL); @@ -2351,7 +2351,7 @@ void psys_find_parents(ParticleSimulationData *sim) ParticleSettings *part=sim->psys->part; KDTree *tree; ChildParticle *cpa; - int p, totparent,totchild=sim->psys->totchild; + int p, totparent, totchild=sim->psys->totchild; float co[3], orco[3]; int from=PART_FROM_FACE; totparent=(int)(totchild*part->parents*0.3f); @@ -2361,15 +2361,15 @@ void psys_find_parents(ParticleSimulationData *sim) tree=BLI_kdtree_new(totparent); - for (p=0,cpa=sim->psys->child; p<totparent; p++,cpa++) { - psys_particle_on_emitter(sim->psmd,from,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co,0,0,0,orco,0); + for (p=0, cpa=sim->psys->child; p<totparent; p++, cpa++) { + psys_particle_on_emitter(sim->psmd, from, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, co, 0, 0, 0, orco, 0); BLI_kdtree_insert(tree, p, orco, NULL); } BLI_kdtree_balance(tree); - for (; p<totchild; p++,cpa++) { - psys_particle_on_emitter(sim->psmd,from,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co,0,0,0,orco,0); + for (; p<totchild; p++, cpa++) { + psys_particle_on_emitter(sim->psmd, from, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, co, 0, 0, 0, orco, 0); cpa->parent=BLI_kdtree_find_nearest(tree, orco, NULL, NULL); } @@ -2441,10 +2441,10 @@ static int psys_threads_init_path(ParticleThread *threads, Scene *scene, float c } if (psys->renderdata) - steps=(int)pow(2.0,(double)part->ren_step); + steps=(int)pow(2.0, (double)part->ren_step); else { totchild=(int)((float)totchild*(float)part->disp/100.0f); - totparent=MIN2(totparent,totchild); + totparent=MIN2(totparent, totchild); } if (totchild==0) return 0; @@ -2472,14 +2472,14 @@ static int psys_threads_init_path(ParticleThread *threads, Scene *scene, float c psys->lattice = psys_get_lattice(&ctx->sim); /* cache all relevant vertex groups if they exist */ - ctx->vg_length = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_LENGTH); - ctx->vg_clump = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_CLUMP); - ctx->vg_kink = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_KINK); - ctx->vg_rough1 = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_ROUGH1); - ctx->vg_rough2 = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_ROUGH2); - ctx->vg_roughe = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_ROUGHE); + ctx->vg_length = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_LENGTH); + ctx->vg_clump = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_CLUMP); + ctx->vg_kink = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_KINK); + ctx->vg_rough1 = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_ROUGH1); + ctx->vg_rough2 = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_ROUGH2); + ctx->vg_roughe = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_ROUGHE); if (psys->part->flag & PART_CHILD_EFFECT) - ctx->vg_effector = psys_cache_vgroup(ctx->dm,psys,PSYS_VG_EFFECTOR); + ctx->vg_effector = psys_cache_vgroup(ctx->dm, psys, PSYS_VG_EFFECTOR); /* set correct ipo timing */ #if 0 // XXX old animation system @@ -2599,7 +2599,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle cpa_fuv = cpa->fuv; cpa_from = PART_FROM_FACE; - psys_particle_on_emitter(ctx->sim.psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,ornor,0,0,orco,0); + psys_particle_on_emitter(ctx->sim.psmd, cpa_from, cpa_num, DMCACHE_ISCHILD, cpa->fuv, foffset, co, ornor, 0, 0, orco, 0); mul_m4_v3(ob->obmat, co); @@ -2626,7 +2626,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle cpa_num = pa->num; cpa_fuv = pa->fuv; - psys_particle_on_emitter(ctx->sim.psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,ornor,0,0,orco,0); + psys_particle_on_emitter(ctx->sim.psmd, cpa_from, cpa_num, DMCACHE_ISCHILD, cpa_fuv, pa->foffset, co, ornor, 0, 0, orco, 0); psys_mat_hair_to_global(ob, ctx->sim.psmd->dm, psys->part->from, pa, hairmat); } @@ -2642,7 +2642,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle } /* create the child path */ - for (k=0,child=child_keys; k<=ctx->steps; k++,child++) { + for (k=0, child=child_keys; k<=ctx->steps; k++, child++) { if (ctx->between) { int w=0; @@ -2689,7 +2689,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle /* apply effectors */ if (part->flag & PART_CHILD_EFFECT) { - for (k=0,child=child_keys; k<=ctx->steps; k++,child++) { + for (k=0, child=child_keys; k<=ctx->steps; k++, child++) { if (k) { do_path_effectors(&ctx->sim, cpa->pa[0], child, k, ctx->steps, child_keys->co, ptex.effector, 0.0f, ctx->cfra, &eff_length, eff_vec); } @@ -2700,7 +2700,7 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle } } - for (k=0,child=child_keys; k<=ctx->steps; k++,child++) { + for (k=0, child=child_keys; k<=ctx->steps; k++, child++) { t = (float)k/(float)ctx->steps; if (ctx->totparent) @@ -2871,7 +2871,7 @@ static void cache_key_incremental_rotation(ParticleCacheKey *key0, ParticleCache else { angle= saacos(cosangle); cross_v3_v3v3(normal, prev_tangent, tangent); - axis_angle_to_quat( q,normal, angle); + axis_angle_to_quat(q, normal, angle); mul_qt_qtqt(key1->rot, q, key2->rot); } @@ -2954,7 +2954,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) psys_get_texture(sim, pa, &ptex, PAMAP_LENGTH, 0.f); pa_length = ptex.length * (1.0f - part->randlength * PSYS_FRAND(psys->seed + p)); if (vg_length) - pa_length *= psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_length); + pa_length *= psys_particle_value_from_verts(psmd->dm, part->from, pa, vg_length); } pind.keyed = keyed; @@ -3018,9 +3018,9 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra) if ((psys->part->flag & PART_CHILD_EFFECT) == 0) { float effector= 1.0f; if (vg_effector) - effector*= psys_particle_value_from_verts(psmd->dm,psys->part->from,pa,vg_effector); + effector*= psys_particle_value_from_verts(psmd->dm, psys->part->from, pa, vg_effector); - sub_v3_v3v3(vec,(cache[p]+1)->co,cache[p]->co); + sub_v3_v3v3(vec, (cache[p]+1)->co, cache[p]->co); length = len_v3(vec); for (k=1, ca=cache[p]+1; k<=steps; k++, ca++) @@ -3290,19 +3290,19 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf void copy_particle_key(ParticleKey *to, ParticleKey *from, int time) { if (time) { - memcpy(to,from,sizeof(ParticleKey)); + memcpy(to, from, sizeof(ParticleKey)); } else { float to_time=to->time; - memcpy(to,from,sizeof(ParticleKey)); + memcpy(to, from, sizeof(ParticleKey)); to->time=to_time; } } void psys_get_from_key(ParticleKey *key, float *loc, float *vel, float *rot, float *time) { - if (loc) copy_v3_v3(loc,key->co); - if (vel) copy_v3_v3(vel,key->vel); - if (rot) copy_qt_qt(rot,key->rot); + if (loc) copy_v3_v3(loc, key->co); + if (vel) copy_v3_v3(vel, key->vel); + if (rot) copy_qt_qt(rot, key->rot); if (time) *time=key->time; } /*-------changing particle keys from space to another-------*/ @@ -3313,12 +3313,12 @@ static void key_from_object(Object *ob, ParticleKey *key) add_v3_v3(key->vel, key->co); - mul_m4_v3(ob->obmat,key->co); - mul_m4_v3(ob->obmat,key->vel); - mat4_to_quat(q,ob->obmat); + mul_m4_v3(ob->obmat, key->co); + mul_m4_v3(ob->obmat, key->vel); + mat4_to_quat(q, ob->obmat); - sub_v3_v3v3(key->vel,key->vel,key->co); - mul_qt_qtqt(key->rot,q,key->rot); + sub_v3_v3v3(key->vel, key->vel, key->co); + mul_qt_qtqt(key->rot, q, key->rot); } #endif @@ -3330,7 +3330,7 @@ static void triatomat(float *v1, float *v2, float *v3, float (*uv)[2], float mat mat[3][3]= 1.0f; /* first axis is the normal */ - normal_tri_v3( mat[2],v1, v2, v3); + normal_tri_v3(mat[2], v1, v2, v3); /* second axis along (1, 0) in uv space */ if (uv) { @@ -3374,8 +3374,8 @@ static void psys_face_mat(Object *ob, DerivedMesh *dm, ParticleData *pa, float m if (i==-1 || i >= dm->getNumTessFaces(dm)) { unit_m4(mat); return; } - mface=dm->getTessFaceData(dm,i,CD_MFACE); - osface=dm->getTessFaceData(dm,i,CD_ORIGSPACE); + mface=dm->getTessFaceData(dm, i, CD_MFACE); + osface=dm->getTessFaceData(dm, i, CD_ORIGSPACE); if (orco && (orcodata=dm->getVertDataArray(dm, CD_ORCO))) { copy_v3_v3(v[0], orcodata[mface->v1]); @@ -3388,9 +3388,9 @@ static void psys_face_mat(Object *ob, DerivedMesh *dm, ParticleData *pa, float m transform_mesh_orco_verts(ob->data, v, 3, 1); } else { - dm->getVertCo(dm,mface->v1,v[0]); - dm->getVertCo(dm,mface->v2,v[1]); - dm->getVertCo(dm,mface->v3,v[2]); + dm->getVertCo(dm, mface->v1, v[0]); + dm->getVertCo(dm, mface->v2, v[1]); + dm->getVertCo(dm, mface->v3, v[2]); } triatomat(v[0], v[1], v[2], (osface)? osface->uv: NULL, mat); @@ -3402,7 +3402,7 @@ void psys_mat_hair_to_object(Object *UNUSED(ob), DerivedMesh *dm, short from, Pa psys_face_mat(0, dm, pa, hairmat, 0); psys_particle_on_dm(dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, 0, 0); - copy_v3_v3(hairmat[3],vec); + copy_v3_v3(hairmat[3], vec); } void psys_mat_hair_to_orco(Object *ob, DerivedMesh *dm, short from, ParticleData *pa, float hairmat[][4]) @@ -3415,7 +3415,7 @@ void psys_mat_hair_to_orco(Object *ob, DerivedMesh *dm, short from, ParticleData /* see psys_face_mat for why this function is called */ if (DM_get_vert_data_layer(dm, CD_ORIGINDEX)) transform_mesh_orco_verts(ob->data, &orco, 1, 1); - copy_v3_v3(hairmat[3],orco); + copy_v3_v3(hairmat[3], orco); } void psys_vec_rot_to_face(DerivedMesh *dm, ParticleData *pa, float vec[3]) @@ -3513,7 +3513,7 @@ void object_remove_particle_system(Scene *scene, Object *ob) /* clear particle system */ BLI_remlink(&ob->particlesystem, psys); - psys_free(ob,psys); + psys_free(ob, psys); if (ob->particlesystem.first) ((ParticleSystem *) ob->particlesystem.first)->flag |= PSYS_CURRENT; @@ -3795,7 +3795,7 @@ static void get_cpa_texture(DerivedMesh *dm, ParticleSystem *psys, ParticleSetti copy_v3_v3(texvec, orco); break; case TEXCO_PARTICLE: - /* texture coordinates in range [-1,1] */ + /* texture coordinates in range [-1, 1] */ texvec[0] = 2.f * (cfra - par->time)/(par->dietime-par->time) - 1.f; texvec[1] = 0.f; texvec[2] = 0.f; @@ -3805,7 +3805,7 @@ static void get_cpa_texture(DerivedMesh *dm, ParticleSystem *psys, ParticleSetti externtex(mtex, texvec, &value, rgba, rgba+1, rgba+2, rgba+3, 0); if ((event & mtex->mapto) & PAMAP_ROUGH) - ptex->rough1= ptex->rough2= ptex->roughe= texture_value_blend(def,ptex->rough1,value,mtex->roughfac,blend); + ptex->rough1= ptex->rough2= ptex->roughe= texture_value_blend(def, ptex->rough1, value, mtex->roughfac, blend); SET_PARTICLE_TEXTURE(PAMAP_LENGTH, ptex->length, mtex->lengthfac); SET_PARTICLE_TEXTURE(PAMAP_CLUMP, ptex->clump, mtex->clumpfac); @@ -3860,10 +3860,10 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex break; /* no break, failed to get uv's, so let's try orco's */ case TEXCO_ORCO: - psys_particle_on_emitter(sim->psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texvec, 0); + psys_particle_on_emitter(sim->psmd, sim->psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co, 0, 0, 0, texvec, 0); break; case TEXCO_PARTICLE: - /* texture coordinates in range [-1,1] */ + /* texture coordinates in range [-1, 1] */ texvec[0] = 2.f * (cfra - pa->time)/(pa->dietime-pa->time) - 1.f; texvec[1] = 0.f; texvec[2] = 0.f; @@ -3882,7 +3882,7 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex setvars |= MAP_PA_TIME; } else - ptex->time= texture_value_blend(def,ptex->time,value,mtex->timefac,blend); + ptex->time= texture_value_blend(def, ptex->time, value, mtex->timefac, blend); } SET_PARTICLE_TEXTURE(PAMAP_LIFE, ptex->life, mtex->lifefac) SET_PARTICLE_TEXTURE(PAMAP_DENS, ptex->exist, mtex->padensfac) @@ -3970,19 +3970,19 @@ static void get_child_modifier_parameters(ParticleSettings *part, ParticleThread return; if (ctx->vg_length) - ptex->length*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_length); + ptex->length*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_length); if (ctx->vg_clump) - ptex->clump*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_clump); + ptex->clump*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_clump); if (ctx->vg_kink) - ptex->kink*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_kink); + ptex->kink*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_kink); if (ctx->vg_rough1) - ptex->rough1*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_rough1); + ptex->rough1*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_rough1); if (ctx->vg_rough2) - ptex->rough2*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_rough2); + ptex->rough2*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_rough2); if (ctx->vg_roughe) - ptex->roughe*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_roughe); + ptex->roughe*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_roughe); if (ctx->vg_effector) - ptex->effector*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_effector); + ptex->effector*=psys_interpolate_value_from_verts(ctx->dm, cpa_from, cpa_num, cpa_fuv, ctx->vg_effector); } static void do_child_modifiers(ParticleSimulationData *sim, ParticleTexture *ptex, ParticleKey *par, float *par_rot, ChildParticle *cpa, float *orco, float mat[4][4], ParticleKey *state, float t) { @@ -4098,13 +4098,13 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * } if (psys->lattice && edit==0) - calc_latt_deform(psys->lattice, state->co,1.0f); + calc_latt_deform(psys->lattice, state->co, 1.0f); } } } } else if (totchild) { - //invert_m4_m4(imat,ob->obmat); + //invert_m4_m4(imat, ob->obmat); /* interpolate childcache directly if it exists */ if (psys->childcache) { @@ -4119,7 +4119,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * if (state->time < 0.0f) t = psys_get_child_time(psys, cpa, -state->time, NULL, NULL); - + if (totchild && part->childtype==PART_CHILD_FACES) { /* part->parents could still be 0 so we can't test with totparent */ between=1; @@ -4137,17 +4137,17 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * /* get the original coordinates (orco) for texture usage */ cpa_num=cpa->num; - + foffset= cpa->foffset; cpa_fuv = cpa->fuv; cpa_from = PART_FROM_FACE; - psys_particle_on_emitter(psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,0,0,0,orco,0); + psys_particle_on_emitter(psmd, cpa_from, cpa_num, DMCACHE_ISCHILD, cpa->fuv, foffset, co, 0, 0, 0, orco, 0); /* we need to save the actual root position of the child for positioning it accurately to the surface of the emitter */ - //copy_v3_v3(cpa_1st,co); + //copy_v3_v3(cpa_1st, co); - //mul_m4_v3(ob->obmat,cpa_1st); + //mul_m4_v3(ob->obmat, cpa_1st); pa = psys->particles + cpa->parent; @@ -4158,38 +4158,38 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * pa=0; } - else { - /* get the parent state */ - keys->time = state->time; - psys_get_particle_on_path(sim, cpa->parent, keys,1); + else { + /* get the parent state */ + keys->time = state->time; + psys_get_particle_on_path(sim, cpa->parent, keys, 1); - /* get the original coordinates (orco) for texture usage */ - pa=psys->particles+cpa->parent; + /* get the original coordinates (orco) for texture usage */ + pa=psys->particles+cpa->parent; - cpa_from=part->from; - cpa_num=pa->num; - cpa_fuv=pa->fuv; + cpa_from=part->from; + cpa_num=pa->num; + cpa_fuv=pa->fuv; - - if (part->type == PART_HAIR) { - psys_particle_on_emitter(psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,0,0,0,orco,0); - psys_mat_hair_to_global(sim->ob, sim->psmd->dm, psys->part->from, pa, hairmat); - } - else { - copy_v3_v3(orco, cpa->fuv); - unit_m4(hairmat); + + if (part->type == PART_HAIR) { + psys_particle_on_emitter(psmd, cpa_from, cpa_num, DMCACHE_ISCHILD, cpa_fuv, pa->foffset, co, 0, 0, 0, orco, 0); + psys_mat_hair_to_global(sim->ob, sim->psmd->dm, psys->part->from, pa, hairmat); + } + else { + copy_v3_v3(orco, cpa->fuv); + unit_m4(hairmat); + } } - } /* correct child ipo timing */ - #if 0 // XXX old animation system +#if 0 // XXX old animation system if ((part->flag&PART_ABS_TIME)==0 && part->ipo) { calc_ipo(part->ipo, 100.0f*t); execute_ipo((ID *)part, part->ipo); } - #endif // XXX old animation system - +#endif // XXX old animation system + /* get different child parameters from textures & vgroups */ memset(&ctx, 0, sizeof(ParticleThreadContext)); ctx.sim = *sim; @@ -4238,14 +4238,14 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * if (t>=0.001f) { tstate.time=t-0.001f; - psys_get_particle_on_path(sim,p,&tstate,0); - sub_v3_v3v3(state->vel,state->co,tstate.co); + psys_get_particle_on_path(sim, p, &tstate, 0); + sub_v3_v3v3(state->vel, state->co, tstate.co); normalize_v3(state->vel); } else { tstate.time=t+0.001f; - psys_get_particle_on_path(sim,p,&tstate,0); - sub_v3_v3v3(state->vel,tstate.co,state->co); + psys_get_particle_on_path(sim, p, &tstate, 0); + sub_v3_v3v3(state->vel, tstate.co, state->co); normalize_v3(state->vel); } @@ -4290,7 +4290,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta state->time= (cfra - (part->sta + (part->end - part->sta) * PSYS_FRAND(p + 23))) / (part->lifetime * PSYS_FRAND(p + 24)); - psys_get_particle_on_path(sim, p, state,1); + psys_get_particle_on_path(sim, p, state, 1); return 1; } else { @@ -4316,7 +4316,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta if (sim->psys->flag & PSYS_KEYED) { state->time= -cfra; - psys_get_particle_on_path(sim, p, state,1); + psys_get_particle_on_path(sim, p, state, 1); return 1; } else { @@ -4334,10 +4334,10 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta do_child_modifiers(sim, NULL, key1, key1->rot, cpa, cpa->fuv, mat, state, t); if (psys->lattice) - calc_latt_deform(sim->psys->lattice, state->co,1.0f); + calc_latt_deform(sim->psys->lattice, state->co, 1.0f); } else { - if (pa->state.time==cfra || ELEM(part->phystype,PART_PHYS_NO,PART_PHYS_KEYED)) + if (pa->state.time==cfra || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) copy_particle_key(state, &pa->state, 1); else if (pa->prev_state.time==cfra) copy_particle_key(state, &pa->prev_state, 1); @@ -4393,7 +4393,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta } if (sim->psys->lattice) - calc_latt_deform(sim->psys->lattice, state->co,1.0f); + calc_latt_deform(sim->psys->lattice, state->co, 1.0f); } return 1; @@ -4418,7 +4418,7 @@ void psys_get_dupli_texture(ParticleSystem *psys, ParticleSettings *part, Partic psys_interpolate_uvs(mtface, mface->v4, cpa->fuv, uv); } - psys_particle_on_emitter(psmd,PART_FROM_FACE,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,loc,0,0,0,orco,0); + psys_particle_on_emitter(psmd, PART_FROM_FACE, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, loc, 0, 0, 0, orco, 0); return; } else { @@ -4446,7 +4446,7 @@ void psys_get_dupli_texture(ParticleSystem *psys, ParticleSettings *part, Partic } } - psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,orco,0); + psys_particle_on_emitter(psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, 0, 0, 0, orco, 0); } void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa, ChildParticle *cpa, ParticleCacheKey *cache, float mat[][4], float *scale) @@ -4464,9 +4464,9 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa pa = psys->particles + cpa->pa[0]; if (pa) - psys_particle_on_emitter(psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,nor,0,0,0,0); + psys_particle_on_emitter(psmd, sim->psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, nor, 0, 0, 0, 0); else - psys_particle_on_emitter(psmd,PART_FROM_FACE,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,loc,nor,0,0,0,0); + psys_particle_on_emitter(psmd, PART_FROM_FACE, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, loc, nor, 0, 0, 0, 0); if (psys->part->rotmode == PART_ROT_VEL) { copy_m3_m4(nmat, ob->imat); @@ -4475,8 +4475,8 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa normalize_v3(nor); /* make sure that we get a proper side vector */ - if (fabs(dot_v3v3(nor,vec))>0.999999) { - if (fabs(dot_v3v3(nor,xvec))>0.999999) { + if (fabs(dot_v3v3(nor, vec))>0.999999) { + if (fabs(dot_v3v3(nor, xvec))>0.999999) { nor[0] = 0.0f; nor[1] = 1.0f; nor[2] = 0.0f; @@ -4496,7 +4496,7 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa float phasefac = psys->part->phasefac; if (psys->part->randphasefac != 0.0f) phasefac += psys->part->randphasefac * PSYS_FRAND((pa-psys->particles) + 20); - axis_angle_to_quat( q_phase, vec, phasefac*(float)M_PI); + axis_angle_to_quat(q_phase, vec, phasefac*(float)M_PI); mul_qt_v3(q_phase, side); } @@ -4517,7 +4517,7 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]) { - float onevec[3] = {0.0f,0.0f,0.0f}, tvec[3], tvec2[3]; + float onevec[3] = {0.0f, 0.0f, 0.0f}, tvec[3], tvec2[3]; xvec[0] = 1.0f; xvec[1] = 0.0f; xvec[2] = 0.0f; yvec[0] = 0.0f; yvec[1] = 1.0f; yvec[2] = 0.0f; @@ -4561,10 +4561,10 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] } normalize_v3(zvec); - cross_v3_v3v3(xvec,temp,zvec); + cross_v3_v3v3(xvec, temp, zvec); normalize_v3(xvec); - cross_v3_v3v3(yvec,zvec,xvec); + cross_v3_v3v3(yvec, zvec, xvec); } else { sub_v3_v3v3(zvec, bb->ob->obmat[3], bb->vec); @@ -4578,7 +4578,7 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] cross_v3_v3v3(xvec, bb->ob->obmat[1], zvec); normalize_v3(xvec); - cross_v3_v3v3(yvec,zvec,xvec); + cross_v3_v3v3(yvec, zvec, xvec); } copy_v3_v3(tvec, xvec); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index d3644657de7..a4d61cea3fb 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -241,10 +241,10 @@ static void realloc_particles(ParticleSimulationData *sim, int new_totpart) } if (psys->particles) { - totsaved=MIN2(psys->totpart,totpart); + totsaved=MIN2(psys->totpart, totpart); /*save old pars*/ if (totsaved) { - memcpy(newpars,psys->particles,totsaved*sizeof(ParticleData)); + memcpy(newpars, psys->particles, totsaved*sizeof(ParticleData)); if (psys->particles->boid) memcpy(newboids, psys->particles->boid, totsaved*sizeof(BoidParticle)); @@ -418,7 +418,7 @@ static void distribute_simple_children(Scene *scene, Object *ob, DerivedMesh *fi cpa = psys->child; for (i=0; i<child_nbr; i++) { - for (p=0; p<psys->totpart; p++,cpa++) { + for (p=0; p<psys->totpart; p++, cpa++) { float length=2.0; cpa->parent=p; @@ -440,7 +440,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) { ParticleData *pa=NULL; float min[3], max[3], delta[3], d; - MVert *mv, *mvert = dm->getVertDataArray(dm,0); + MVert *mv, *mvert = dm->getVertDataArray(dm, 0); int totvert=dm->getNumVerts(dm), from=psys->part->from; int i, j, k, p, res=psys->part->grid_res, size[3], axis; @@ -452,13 +452,13 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) mv++; for (i=1; i<totvert; i++, mv++) { - min[0]=MIN2(min[0],mv->co[0]); - min[1]=MIN2(min[1],mv->co[1]); - min[2]=MIN2(min[2],mv->co[2]); + min[0]=MIN2(min[0], mv->co[0]); + min[1]=MIN2(min[1], mv->co[1]); + min[2]=MIN2(min[2], mv->co[2]); - max[0]=MAX2(max[0],mv->co[0]); - max[1]=MAX2(max[1],mv->co[1]); - max[2]=MAX2(max[2],mv->co[2]); + max[0]=MAX2(max[0], mv->co[0]); + max[1]=MAX2(max[1], mv->co[1]); + max[2]=MAX2(max[2], mv->co[2]); } sub_v3_v3v3(delta, max, min); @@ -473,8 +473,8 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) size[(axis+2)%3] = (int)ceil(delta[(axis+2)%3]/d); /* float errors grrr.. */ - size[(axis+1)%3] = MIN2(size[(axis+1)%3],res); - size[(axis+2)%3] = MIN2(size[(axis+2)%3],res); + size[(axis+1)%3] = MIN2(size[(axis+1)%3], res); + size[(axis+2)%3] = MIN2(size[(axis+2)%3], res); size[0] = MAX2(size[0], 1); size[1] = MAX2(size[1], 1); @@ -485,9 +485,9 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) min[1]+= d < delta[1] ? d/2.f : delta[1]/2.f; min[2]+= d < delta[2] ? d/2.f : delta[2]/2.f; - for (i=0,p=0,pa=psys->particles; i<res; i++) { + for (i=0, p=0, pa=psys->particles; i<res; i++) { for (j=0; j<res; j++) { - for (k=0; k<res; k++,p++,pa++) { + for (k=0; k<res; k++, p++, pa++) { pa->fuv[0] = min[0] + (float)i*d; pa->fuv[1] = min[1] + (float)j*d; pa->fuv[2] = min[2] + (float)k*d; @@ -507,8 +507,8 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) min[1] -= d/2.0f; min[2] -= d/2.0f; - for (i=0,mv=mvert; i<totvert; i++,mv++) { - sub_v3_v3v3(vec,mv->co,min); + for (i=0, mv=mvert; i<totvert; i++, mv++) { + sub_v3_v3v3(vec, mv->co, min); vec[0]/=delta[0]; vec[1]/=delta[1]; vec[2]/=delta[2]; @@ -517,7 +517,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) +(int)(vec[2]*(size[2]-1)))->flag &= ~PARS_UNEXIST; } } - else if (ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) { + else if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) { float co1[3], co2[3]; MFace *mface= NULL, *mface_array; @@ -526,7 +526,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) int amax= from==PART_FROM_FACE ? 3 : 1; totface=dm->getNumTessFaces(dm); - mface=mface_array=dm->getTessFaceDataArray(dm,CD_MFACE); + mface=mface_array=dm->getTessFaceDataArray(dm, CD_MFACE); for (a=0; a<amax; a++) { if (a==0) { a0mul=res*res; a1mul=res; a2mul=1; } @@ -545,7 +545,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) co1[a] -= 0.001f*d; /* lets intersect the faces */ - for (i=0; i<totface; i++,mface++) { + for (i=0; i<totface; i++, mface++) { copy_v3_v3(v1, mvert[mface->v1].co); copy_v3_v3(v2, mvert[mface->v2].co); copy_v3_v3(v3, mvert[mface->v3].co); @@ -586,9 +586,9 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) } if (psys->part->flag & PART_GRID_HEXAGONAL) { - for (i=0,p=0,pa=psys->particles; i<res; i++) { + for (i=0, p=0, pa=psys->particles; i<res; i++) { for (j=0; j<res; j++) { - for (k=0; k<res; k++,p++,pa++) { + for (k=0; k<res; k++, p++, pa++) { if (j%2) pa->fuv[0] += d/2.f; @@ -614,7 +614,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys) if (psys->part->grid_rand > 0.f) { float rfac = d * psys->part->grid_rand; - for (p=0,pa=psys->particles; p<psys->totpart; p++,pa++) { + for (p=0, pa=psys->particles; p<psys->totpart; p++, pa++) { if (pa->flag & PARS_UNEXIST) continue; @@ -708,10 +708,10 @@ static void psys_uv_to_w(float u, float v, int quad, float *w) if (quad) { vert[3][0]= 0.0f; vert[3][1]= 1.0f; vert[3][2]= 0.0f; - interp_weights_poly_v3( w,vert, 4, co); + interp_weights_poly_v3(w, vert, 4, co); } else { - interp_weights_poly_v3( w,vert, 3, co); + interp_weights_poly_v3(w, vert, 3, co); w[3]= 0.0f; } } @@ -771,9 +771,9 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch KDTreeNearest ptn[3]; int w, maxw; - psys_particle_on_dm(ctx->dm,from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,orco1,0); + psys_particle_on_dm(ctx->dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co1, 0, 0, 0, orco1, 0); transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1); - maxw = BLI_kdtree_find_n_nearest(ctx->tree,3,orco1,NULL,ptn); + maxw = BLI_kdtree_find_n_nearest(ctx->tree, 3, orco1, NULL, ptn); for (w=0; w<maxw; w++) { pa->verts[w]=ptn->num; @@ -785,7 +785,7 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch MFace *mface; pa->num = i = ctx->index[p]; - mface = dm->getTessFaceData(dm,i,CD_MFACE); + mface = dm->getTessFaceData(dm, i, CD_MFACE); switch (distr) { case PART_DISTR_JIT: @@ -796,7 +796,7 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch psys_uv_to_w(0.33333f, 0.33333f, mface->v4, pa->fuv); } else { - ctx->jitoff[i] = fmod(ctx->jitoff[i],(float)ctx->jitlevel); + ctx->jitoff[i] = fmod(ctx->jitoff[i], (float)ctx->jitlevel); psys_uv_to_w(ctx->jit[2*(int)ctx->jitoff[i]], ctx->jit[2*(int)ctx->jitoff[i]+1], mface->v4, pa->fuv); ctx->jitoff[i]++; } @@ -813,21 +813,21 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch /* experimental */ if (from==PART_FROM_VOLUME) { - MVert *mvert=dm->getVertDataArray(dm,CD_MVERT); + MVert *mvert=dm->getVertDataArray(dm, CD_MVERT); tot=dm->getNumTessFaces(dm); - psys_interpolate_face(mvert,mface,0,0,pa->fuv,co1,nor,0,0,0,0); + psys_interpolate_face(mvert, mface, 0, 0, pa->fuv, co1, nor, 0, 0, 0, 0); normalize_v3(nor); - mul_v3_fl(nor,-100.0); + mul_v3_fl(nor, -100.0); - add_v3_v3v3(co2,co1,nor); + add_v3_v3v3(co2, co1, nor); min_d=2.0; intersect=0; - for (i=0,mface=dm->getTessFaceDataArray(dm,CD_MFACE); i<tot; i++,mface++) { + for (i=0, mface=dm->getTessFaceDataArray(dm, CD_MFACE); i<tot; i++, mface++) { if (i==pa->num) continue; v1=mvert[mface->v1].co; @@ -889,14 +889,14 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch if (ctx->tree) { KDTreeNearest ptn[10]; - int w,maxw;//, do_seams; - float maxd /*, mind,dd */, totw= 0.0f; + int w, maxw;//, do_seams; + float maxd /*, mind, dd */, totw= 0.0f; int parent[10]; float pweight[10]; - psys_particle_on_dm(dm,cfrom,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co1,nor1,NULL,NULL,orco1,NULL); + psys_particle_on_dm(dm, cfrom, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, co1, nor1, NULL, NULL, orco1, NULL); transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1); - maxw = BLI_kdtree_find_n_nearest(ctx->tree,4,orco1,NULL,ptn); + maxw = BLI_kdtree_find_n_nearest(ctx->tree, 4, orco1, NULL, ptn); maxd=ptn[maxw-1].dist; /* mind=ptn[0].dist; */ /* UNUSED */ @@ -904,14 +904,14 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch /* the weights here could be done better */ for (w=0; w<maxw; w++) { parent[w]=ptn[w].index; - pweight[w]=(float)pow(2.0,(double)(-6.0f*ptn[w].dist/maxd)); + pweight[w]=(float)pow(2.0, (double)(-6.0f*ptn[w].dist/maxd)); } for (;w<10; w++) { parent[w]=-1; pweight[w]=0.0f; } - for (w=0,i=0; w<maxw && i<4; w++) { + for (w=0, i=0; w<maxw && i<4; w++) { if (parent[w]>=0) { cpa->pa[i]=parent[w]; cpa->w[i]=pweight[w]; @@ -997,7 +997,7 @@ static void distribute_invalid(Scene *scene, ParticleSystem *psys, int from) int p, totchild = get_psys_tot_child(scene, psys); if (psys->child && totchild) { - for (p=0,cpa=psys->child; p<totchild; p++,cpa++) { + for (p=0, cpa=psys->child; p<totchild; p++, cpa++) { cpa->fuv[0]=cpa->fuv[1]=cpa->fuv[2]=cpa->fuv[3]= 0.0; cpa->foffset= 0.0f; cpa->parent=0; @@ -1033,7 +1033,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D int cfrom=0; int totelem=0, totpart, *particle_element=0, children=0, totseam=0; int jitlevel= 1, distr; - float *element_weight=NULL,*element_sum=NULL,*jitter_offset=NULL, *vweight=NULL; + float *element_weight=NULL, *element_sum=NULL, *jitter_offset=NULL, *vweight=NULL; float cur, maxweight=0.0, tweight, totweight, inv_totweight, co[3], nor[3], orco[3], ornor[3]; if (ELEM3(NULL, ob, psys, psys->part)) @@ -1064,7 +1064,8 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D if (part->distr==PART_DISTR_GRID && from != PART_FROM_VERT) { BLI_srandom(31415926 + psys->seed); dm= CDDM_from_mesh((Mesh*)ob->data, ob); - distribute_grid(dm,psys); + DM_ensure_tessface(dm); + distribute_grid(dm, psys); dm->release(dm); return 0; } @@ -1083,8 +1084,8 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D tree=BLI_kdtree_new(totpart); - for (p=0,pa=psys->particles; p<totpart; p++,pa++) { - psys_particle_on_dm(dm,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,ornor); + for (p=0, pa=psys->particles; p<totpart; p++, pa++) { + psys_particle_on_dm(dm, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co, nor, 0, 0, orco, ornor); transform_mesh_orco_verts((Mesh*)ob->data, &orco, 1, 1); BLI_kdtree_insert(tree, p, orco, ornor); } @@ -1117,12 +1118,12 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D for (p=0; p<totvert; p++) { if (orcodata) { - copy_v3_v3(co,orcodata[p]); + copy_v3_v3(co, orcodata[p]); transform_mesh_orco_verts((Mesh*)ob->data, &co, 1, 1); } else - copy_v3_v3(co,mv[p].co); - BLI_kdtree_insert(tree,p,co,NULL); + copy_v3_v3(co, mv[p].co); + BLI_kdtree_insert(tree, p, co, NULL); } BLI_kdtree_balance(tree); @@ -1136,7 +1137,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D distribute_invalid(scene, psys, children ? PART_FROM_CHILD : 0); if (G.debug & G_DEBUG) - fprintf(stderr,"Particle distribution error: Nothing to emit from!\n"); + fprintf(stderr, "Particle distribution error: Nothing to emit from!\n"); if (dm != finaldm) dm->release(dm); @@ -1159,7 +1160,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D orcodata= dm->getVertDataArray(dm, CD_ORCO); for (i=0; i<totelem; i++) { - MFace *mf=dm->getTessFaceData(dm,i,CD_MFACE); + MFace *mf=dm->getTessFaceData(dm, i, CD_MFACE); if (orcodata) { copy_v3_v3(co1, orcodata[mf->v1]); @@ -1174,14 +1175,14 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D } } else { - v1= (MVert*)dm->getVertData(dm,mf->v1,CD_MVERT); - v2= (MVert*)dm->getVertData(dm,mf->v2,CD_MVERT); - v3= (MVert*)dm->getVertData(dm,mf->v3,CD_MVERT); + v1= (MVert*)dm->getVertData(dm, mf->v1, CD_MVERT); + v2= (MVert*)dm->getVertData(dm, mf->v2, CD_MVERT); + v3= (MVert*)dm->getVertData(dm, mf->v3, CD_MVERT); copy_v3_v3(co1, v1->co); copy_v3_v3(co2, v2->co); copy_v3_v3(co3, v3->co); if (mf->v4) { - v4= (MVert*)dm->getVertData(dm,mf->v4,CD_MVERT); + v4= (MVert*)dm->getVertData(dm, mf->v4, CD_MVERT); copy_v3_v3(co4, v4->co); } } @@ -1201,14 +1202,14 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D maxweight /= totarea; } else { - float min=1.0f/(float)(MIN2(totelem,totpart)); + float min=1.0f/(float)(MIN2(totelem, totpart)); for (i=0; i<totelem; i++) element_weight[i]=min; maxweight=min; } /* Calculate weights from vgroup */ - vweight = psys_cache_vgroup(dm,psys,PSYS_VG_DENSITY); + vweight = psys_cache_vgroup(dm, psys, PSYS_VG_DENSITY); if (vweight) { if (from==PART_FROM_VERT) { @@ -1217,7 +1218,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D } else { /* PART_FROM_FACE / PART_FROM_VOLUME */ for (i=0;i<totelem; i++) { - MFace *mf=dm->getTessFaceData(dm,i,CD_MFACE); + MFace *mf=dm->getTessFaceData(dm, i, CD_MFACE); tweight = vweight[mf->v1] + vweight[mf->v2] + vweight[mf->v3]; if (mf->v4) { @@ -1302,7 +1303,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D } /* Create jittering if needed */ - if (distr==PART_DISTR_JIT && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) { + if (distr==PART_DISTR_JIT && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) { jitlevel= part->userjit; if (jitlevel == 0) { @@ -1398,7 +1399,7 @@ static void distribute_particles_on_shape(ParticleSimulationData *sim, int UNUSE { distribute_invalid(sim->scene, sim->psys, 0); - fprintf(stderr,"Shape emission not yet possible!\n"); + fprintf(stderr, "Shape emission not yet possible!\n"); } static void distribute_particles(ParticleSimulationData *sim, int from) @@ -1418,7 +1419,7 @@ static void distribute_particles(ParticleSimulationData *sim, int from) if (distr_error) { distribute_invalid(sim->scene, sim->psys, from); - fprintf(stderr,"Particle distribution error!\n"); + fprintf(stderr, "Particle distribution error!\n"); } } @@ -1619,18 +1620,18 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P ParticleSystem *psys = sim->psys; ParticleSettings *part; ParticleTexture ptex; - float fac, phasefac, nor[3]={0,0,0},loc[3],vel[3]={0.0,0.0,0.0},rot[4],q2[4]; - float r_vel[3],r_ave[3],r_rot[4],vec[3],p_vel[3]={0.0,0.0,0.0}; - float x_vec[3]={1.0,0.0,0.0}, utan[3]={0.0,1.0,0.0}, vtan[3]={0.0,0.0,1.0}, rot_vec[3]={0.0,0.0,0.0}; + float fac, phasefac, nor[3]={0, 0, 0}, loc[3], vel[3]={0.0, 0.0, 0.0}, rot[4], q2[4]; + float r_vel[3], r_ave[3], r_rot[4], vec[3], p_vel[3]={0.0, 0.0, 0.0}; + float x_vec[3]={1.0, 0.0, 0.0}, utan[3]={0.0, 1.0, 0.0}, vtan[3]={0.0, 0.0, 1.0}, rot_vec[3]={0.0, 0.0, 0.0}; float q_phase[4]; int p = pa - psys->particles; part=psys->part; /* get birth location from object */ if (part->tanfac != 0.f) - psys_particle_on_emitter(sim->psmd, part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0); + psys_particle_on_emitter(sim->psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, nor, utan, vtan, 0, 0); else - psys_particle_on_emitter(sim->psmd, part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,0,0,0,0); + psys_particle_on_emitter(sim->psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, nor, 0, 0, 0, 0); /* get possible textural influence */ psys_get_texture(sim, pa, &ptex, PAMAP_IVEL, cfra); @@ -1646,16 +1647,16 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P /* -tangent */ if (part->tanfac!=0.0f) { - //float phase=vg_rot?2.0f*(psys_particle_value_from_verts(sim->psmd->dm,part->from,pa,vg_rot)-0.5f):0.0f; + //float phase=vg_rot?2.0f*(psys_particle_value_from_verts(sim->psmd->dm, part->from, pa, vg_rot)-0.5f):0.0f; float phase=0.0f; - mul_v3_fl(vtan,-cosf((float)M_PI*(part->tanphase+phase))); + mul_v3_fl(vtan, -cosf((float)M_PI*(part->tanphase+phase))); fac= -sinf((float)M_PI*(part->tanphase+phase)); madd_v3_v3fl(vtan, utan, fac); - mul_mat3_m4_v3(ob->obmat,vtan); + mul_mat3_m4_v3(ob->obmat, vtan); copy_v3_v3(utan, nor); - mul_v3_fl(utan,dot_v3v3(vtan,nor)); + mul_v3_fl(utan, dot_v3v3(vtan, nor)); sub_v3_v3(vtan, utan); normalize_v3(vtan); @@ -1678,7 +1679,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P r_ave[1] = 2.0f * (PSYS_FRAND(p + 14) - 0.5f); r_ave[2] = 2.0f * (PSYS_FRAND(p + 15) - 0.5f); - mul_mat3_m4_v3(ob->obmat,r_ave); + mul_mat3_m4_v3(ob->obmat, r_ave); normalize_v3(r_ave); } @@ -1690,14 +1691,14 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P r_rot[3] = 2.0f * (PSYS_FRAND(p + 19) - 0.5f); normalize_qt(r_rot); - mat4_to_quat(rot,ob->obmat); - mul_qt_qtqt(r_rot,r_rot,rot); + mat4_to_quat(rot, ob->obmat); + mul_qt_qtqt(r_rot, r_rot, rot); } if (part->phystype==PART_PHYS_BOIDS && pa->boid) { float dvec[3], q[4], mat[3][3]; - copy_v3_v3(state->co,loc); + copy_v3_v3(state->co, loc); /* boids don't get any initial velocity */ zero_v3(state->vel); @@ -1720,7 +1721,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P cross_v3_v3v3(mat[1], mat[2], mat[0]); /* apply rotation */ - mat3_to_quat_is_ok( q,mat); + mat3_to_quat_is_ok(q, mat); copy_qt_qt(state->rot, q); } else { @@ -1774,7 +1775,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P mul_v3_v3fl(state->vel, vel, ptex.ivel); /* -location from emitter */ - copy_v3_v3(state->co,loc); + copy_v3_v3(state->co, loc); /* -rotation */ unit_qt(state->rot); @@ -1802,19 +1803,19 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P /* create rotation quat */ negate_v3(rot_vec); - vec_to_quat( q2,rot_vec, OB_POSX, OB_POSZ); + vec_to_quat(q2, rot_vec, OB_POSX, OB_POSZ); /* randomize rotation quat */ if (part->randrotfac!=0.0f) interp_qt_qtqt(rot, q2, r_rot, part->randrotfac); else - copy_qt_qt(rot,q2); + copy_qt_qt(rot, q2); /* rotation phase */ phasefac = part->phasefac; if (part->randphasefac != 0.0f) phasefac += part->randphasefac * PSYS_FRAND(p + 20); - axis_angle_to_quat( q_phase,x_vec, phasefac*(float)M_PI); + axis_angle_to_quat(q_phase, x_vec, phasefac*(float)M_PI); /* combine base rotation & phase */ mul_qt_qtqt(state->rot, rot, q_phase); @@ -2132,7 +2133,7 @@ static void psys_update_effectors(ParticleSimulationData *sim) static void integrate_particle(ParticleSettings *part, ParticleData *pa, float dtime, float *external_acceleration, void (*force_func)(void *forcedata, ParticleKey *state, float *force, float *impulse), void *forcedata) { ParticleKey states[5]; - float force[3],acceleration[3],impulse[3],dx[4][3],dv[4][3],oldpos[3]; + float force[3], acceleration[3], impulse[3], dx[4][3], dv[4][3], oldpos[3]; float pa_mass= (part->flag & PART_SIZEMASS ? part->mass * pa->size : part->mass); int i, steps=1; int integrator = part->integrator; @@ -2537,10 +2538,10 @@ static void sph_force_cb(void *sphdata_v, ParticleKey *state, float *force, floa u = dot_v3v3(vec, dv); if (u < 0.f && visc > 0.f) - madd_v3_v3fl(force, vec, 0.5f * q * visc * u ); + madd_v3_v3fl(force, vec, 0.5f * q * visc * u); if (u > 0.f && stiff_visc > 0.f) - madd_v3_v3fl(force, vec, 0.5f * q * stiff_visc * u ); + madd_v3_v3fl(force, vec, 0.5f * q * stiff_visc * u); } if (spring_constant > 0.f) { @@ -2713,23 +2714,23 @@ static void basic_integrate(ParticleSimulationData *sim, int p, float dfra, floa time=(cfra-pa->time)/pa->lifetime; CLAMP(time, 0.0f, 1.0f); - copy_v3_v3(tkey.co,pa->state.co); - copy_v3_v3(tkey.vel,pa->state.vel); + copy_v3_v3(tkey.co, pa->state.co); + copy_v3_v3(tkey.vel, pa->state.vel); tkey.time=pa->state.time; if (part->type != PART_HAIR) { if (do_guides(sim->psys->effectors, &tkey, p, time)) { - copy_v3_v3(pa->state.co,tkey.co); + copy_v3_v3(pa->state.co, tkey.co); /* guides don't produce valid velocity */ sub_v3_v3v3(pa->state.vel, tkey.co, pa->prev_state.co); - mul_v3_fl(pa->state.vel,1.0f/dtime); + mul_v3_fl(pa->state.vel, 1.0f/dtime); pa->state.time=tkey.time; } } } static void basic_rotate(ParticleSettings *part, ParticleData *pa, float dfra, float timestep) { - float rotfac, rot1[4], rot2[4]={1.0,0.0,0.0,0.0}, dtime=dfra*timestep; + float rotfac, rot1[4], rot2[4]={1.0, 0.0, 0.0, 0.0}, dtime=dfra*timestep; if ((part->flag & PART_ROTATIONS)==0) { pa->state.rot[0]=1.0f; @@ -2757,15 +2758,15 @@ static void basic_rotate(ParticleSettings *part, ParticleData *pa, float dfra, f } rotfac = len_v3(pa->state.ave); - if (rotfac == 0.0f) { /* unit_qt(in VecRotToQuat) doesn't give unit quat [1,0,0,0]?? */ + if (rotfac == 0.0f) { /* unit_qt(in VecRotToQuat) doesn't give unit quat [1, 0, 0, 0]?? */ rot1[0]=1.0f; rot1[1]=rot1[2]=rot1[3]=0; } else { - axis_angle_to_quat(rot1,pa->state.ave,rotfac*dtime); + axis_angle_to_quat(rot1, pa->state.ave, rotfac*dtime); } - mul_qt_qtqt(pa->state.rot,rot1,pa->prev_state.rot); - mul_qt_qtqt(pa->state.rot,rot2,pa->state.rot); + mul_qt_qtqt(pa->state.rot, rot1, pa->prev_state.rot); + mul_qt_qtqt(pa->state.rot, rot2, pa->state.rot); /* keep rotation quat in good health */ normalize_qt(pa->state.rot); @@ -3256,8 +3257,8 @@ static int collision_response(ParticleData *pa, ParticleCollision *col, BVHTreeR float frict = pd->pdef_frict + pd->pdef_rfrict * 2 * (BLI_frand() - 0.5f); float distance, nor[3], dot; - CLAMP(damp,0.0f, 1.0f); - CLAMP(frict,0.0f, 1.0f); + CLAMP(damp, 0.0f, 1.0f); + CLAMP(frict, 0.0f, 1.0f); /* get exact velocity right before collision */ madd_v3_v3v3fl(v0, col->ve1, col->acc, dt1); @@ -3603,7 +3604,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim) psys_mat_hair_to_object(sim->ob, sim->psmd->dm, psys->part->from, pa, hairmat); - for (k=0, key=pa->hair; k<pa->totkey; k++,key++) { + for (k=0, key=pa->hair; k<pa->totkey; k++, key++) { /* create fake root before actual root to resist bending */ if (k==0) { @@ -3869,7 +3870,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra) } /* initialize all particles for dynamics */ LOOP_SHOWN_PARTICLES { - copy_particle_key(&pa->prev_state,&pa->state,1); + copy_particle_key(&pa->prev_state, &pa->state, 1); psys_get_texture(sim, pa, &ptex, PAMAP_SIZE, cfra); @@ -3948,7 +3949,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra) SPHData sphdata; sph_solver_init(sim, &sphdata); - #pragma omp parallel for firstprivate (sphdata) private (pa) schedule(dynamic,5) + #pragma omp parallel for firstprivate (sphdata) private (pa) schedule(dynamic, 5) LOOP_DYNAMIC_PARTICLES { /* do global forces & effectors */ basic_integrate(sim, p, pa->state.time, cfra); @@ -4085,7 +4086,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra)) gzf = BLI_gzopen(filename, "rb"); if (!gzf) { - BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer),"readFsPartData::error - Unable to open file for reading '%s'\n", filename); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "readFsPartData::error - Unable to open file for reading '%s'\n", filename); // XXX bad level call elbeemDebugOut(debugStrBuffer); return; } @@ -4106,23 +4107,23 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra)) for (p=0, pa=psys->particles; p<totpart; p++, pa++) { int ptype=0; - gzread(gzf, &ptype, sizeof( ptype )); + gzread(gzf, &ptype, sizeof(ptype)); if (ptype&readMask) { activeParts++; - gzread(gzf, &(pa->size), sizeof( float )); + gzread(gzf, &(pa->size), sizeof(float)); pa->size /= 10.0f; for (j=0; j<3; j++) { float wrf; - gzread(gzf, &wrf, sizeof( wrf )); + gzread(gzf, &wrf, sizeof(wrf)); pa->state.co[j] = wrf; - //fprintf(stderr,"Rj%d ",j); + //fprintf(stderr, "Rj%d ", j); } for (j=0; j<3; j++) { float wrf; - gzread(gzf, &wrf, sizeof( wrf )); + gzread(gzf, &wrf, sizeof(wrf)); pa->state.vel[j] = wrf; } @@ -4134,7 +4135,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra)) pa->dietime = sim->scene->r.efra + 1; pa->lifetime = sim->scene->r.efra; pa->alive = PARS_ALIVE; - //if (a < 25) fprintf(stderr,"FSPARTICLE debug set %s , a%d = %f,%f,%f , life=%f\n", filename, a, pa->co[0],pa->co[1],pa->co[2], pa->lifetime ); + //if (a < 25) fprintf(stderr, "FSPARTICLE debug set %s, a%d = %f, %f, %f, life=%f\n", filename, a, pa->co[0], pa->co[1], pa->co[2], pa->lifetime ); } else { // skip... @@ -4147,7 +4148,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra)) gzclose(gzf); totpart = psys->totpart = activeParts; - BLI_snprintf(debugStrBuffer,sizeof(debugStrBuffer),"readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d\n", psys->totpart,activeParts,fileParts,readMask); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d\n", psys->totpart, activeParts, fileParts, readMask); // bad level call // XXX elbeemDebugOut(debugStrBuffer); @@ -4302,7 +4303,7 @@ static void system_step(ParticleSimulationData *sim, float cfra) dynamics_step(sim, cfra+dframe+t_frac - 1.f); psys->cfra = cfra+dframe+t_frac - 1.f; #if 0 - printf("%f,%f,%f,%f\n", cfra+dframe+t_frac - 1.f, t_frac, dt_frac, sim->courant_num); + printf("%f, %f, %f, %f\n", cfra+dframe+t_frac - 1.f, t_frac, dt_frac, sim->courant_num); #endif if (part->time_flag & PART_TIME_AUTOSF) dt_frac = update_timestep(psys, sim, t_frac); @@ -4589,7 +4590,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) if (part->phystype == PART_PHYS_KEYED) { psys_count_keyed_targets(&sim); set_keyed_keys(&sim); - psys_update_path_cache(&sim,(int)cfra); + psys_update_path_cache(&sim, (int)cfra); } break; } diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 39293084dc0..1e80f1e6d1e 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -222,7 +222,7 @@ void BKE_ptcache_make_particle_key(ParticleKey *key, int index, void **data, flo /* no rotation info, so make something nice up */ if (data[BPHYS_DATA_ROTATION]==NULL) { - vec_to_quat( key->rot, key->vel, OB_NEGX, OB_POSZ); + vec_to_quat(key->rot, key->vel, OB_NEGX, OB_POSZ); } else { PTCACHE_DATA_TO(data, BPHYS_DATA_ROTATION, index, key->rot); @@ -366,7 +366,7 @@ static void ptcache_particle_interpolate(int index, void *psys_v, void **data, f /* determine rotation from velocity */ if (data[BPHYS_DATA_LOCATION] && !data[BPHYS_DATA_ROTATION]) { - vec_to_quat( keys[2].rot,keys[2].vel, OB_NEGX, OB_POSZ); + vec_to_quat(keys[2].rot, keys[2].vel, OB_NEGX, OB_POSZ); } if (cfra > pa->time) @@ -400,7 +400,7 @@ static int ptcache_particle_totwrite(void *psys_v, int cfra) if (cfra == 0) return psys->totpart; - for (p=0; p<psys->totpart; p++,pa++) + for (p=0; p<psys->totpart; p++, pa++) totwrite += (cfra >= pa->time - step && cfra <= pa->dietime + step); return totwrite; @@ -720,7 +720,7 @@ static int ptcache_dynamicpaint_read(PTCacheFile *pf, void *dp_v) /* version header */ ptcache_file_read(pf, version, 1, sizeof(char)*4); - if (strncmp(version, DPAINT_CACHE_VERSION,4)) {printf("Dynamic Paint: Invalid cache version: %s!\n",version); return 0;} + if (strncmp(version, DPAINT_CACHE_VERSION, 4)) {printf("Dynamic Paint: Invalid cache version: %s!\n", version); return 0;} if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && surface->data) { unsigned int data_len; @@ -1260,7 +1260,7 @@ static int ptcache_file_compressed_write(PTCacheFile *pf, unsigned char *in, uns #ifdef WITH_LZMA if (mode == 2) { - r = LzmaCompress(out, &out_len, in, in_len,//assume sizeof(char)==1.... + r = LzmaCompress(out, &out_len, in, in_len, //assume sizeof(char)==1.... props, &sizeOfIt, 5, 1 << 24, 3, 0, 2, 32, 2); if (!(r == SZ_OK) || (out_len >= in_len)) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index f1caa6ba272..2d3c18ff03b 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -236,7 +236,7 @@ Scene *copy_scene(Scene *sce, int type) } if (sce->ed) { - scen->ed= MEM_callocN( sizeof(Editing), "addseq"); + scen->ed= MEM_callocN(sizeof(Editing), "addseq"); scen->ed->seqbasep= &scen->ed->seqbase; seqbase_dupli_recursive(sce, scen, &scen->ed->seqbase, &sce->ed->seqbase, SEQ_DUPE_ALL); } @@ -415,7 +415,7 @@ Scene *add_scene(const char *name) sce->r.border.xmax = 1.0f; sce->r.border.ymax = 1.0f; - sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings),"Tool Settings Struct"); + sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings), "Tool Settings Struct"); sce->toolsettings->cornertype=1; sce->toolsettings->degr = 90; sce->toolsettings->step = 9; @@ -895,8 +895,6 @@ void scene_deselect_all(Scene *sce) void scene_select_base(Scene *sce, Base *selbase) { - scene_deselect_all(sce); - selbase->flag |= SELECT; selbase->object->flag= selbase->flag; @@ -1016,7 +1014,7 @@ static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scen void scene_update_tagged(Main *bmain, Scene *scene) { /* keep this first */ - BLI_exec_cb(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE); + BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE); /* flush recalc flags to dependencies */ DAG_ids_flush_tagged(bmain); @@ -1044,7 +1042,7 @@ void scene_update_tagged(Main *bmain, Scene *scene) BKE_ptcache_quick_cache_all(bmain, scene); /* notify editors and python about recalc */ - BLI_exec_cb(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_POST); + BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_POST); DAG_ids_check_recalc(bmain, scene, FALSE); /* clear recalc flags */ @@ -1058,8 +1056,8 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay) Scene *sce_iter; /* keep this first */ - BLI_exec_cb(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE); - BLI_exec_cb(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE); + BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE); + BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE); sound_set_cfra(sce->r.cfra); @@ -1093,8 +1091,8 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay) scene_update_tagged_recursive(bmain, sce, sce); /* notify editors and python about recalc */ - BLI_exec_cb(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_POST); - BLI_exec_cb(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_POST); + BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_POST); + BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_POST); DAG_ids_check_recalc(bmain, sce, TRUE); diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index af0c5eae9a8..f69495483ea 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index d3eade834e6..5983beac4ef 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -294,7 +294,7 @@ static struct ImBuf * do_plugin_effect( * old plugins) do very bad stuff * with imbuf-internals */ - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); int x = context.rectx; int y = context.recty; @@ -548,7 +548,7 @@ static struct ImBuf * do_alphaover_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); if (out->rect_float) { do_alphaover_effect_float( @@ -937,7 +937,7 @@ static float gammaCorrect(float c) float res = 0.0; i = floor(c * inv_color_step); - /* Clip to range [0,1]: outside, just do the complete calculation. */ + /* Clip to range [0, 1]: outside, just do the complete calculation. */ /* We may have some performance problems here. Stretching up the LUT */ /* may help solve that, by exchanging LUT size for the interpolation. */ /* Negative colors are explicitly handled. */ @@ -1121,7 +1121,7 @@ static struct ImBuf * do_gammacross_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); build_gammatabs(); @@ -1240,7 +1240,7 @@ static struct ImBuf * do_add_effect(SeqRenderData context, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); if (out->rect_float) { do_add_effect_float( @@ -1357,7 +1357,7 @@ static struct ImBuf * do_sub_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); if (out->rect_float) { do_sub_effect_float( @@ -1571,7 +1571,7 @@ static struct ImBuf * do_mul_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); if (out->rect_float) { do_mul_effect_float( @@ -1612,7 +1612,7 @@ static void precalc_wipe_zone(WipeZone *wipezone, WipeVars *wipe, int xo, int yo } // This function calculates the blur band for the wipe effects -static float in_band(float width,float dist,int side,int dir) +static float in_band(float width, float dist, int side, int dir) { float alpha; @@ -1636,15 +1636,15 @@ static float in_band(float width,float dist,int side,int dir) static float check_zone(WipeZone *wipezone, int x, int y, Sequence *seq, float facf0) { - float posx, posy,hyp,hyp2,angle,hwidth,b1,b2,b3,pointdist; + float posx, posy, hyp, hyp2, angle, hwidth, b1, b2, b3, pointdist; /* some future stuff */ - // float hyp3,hyp4,b4,b5 - float temp1,temp2,temp3,temp4; //some placeholder variables + // float hyp3, hyp4, b4, b5 + float temp1, temp2, temp3, temp4; //some placeholder variables int xo = wipezone->xo; int yo = wipezone->yo; float halfx = xo*0.5f; float halfy = yo*0.5f; - float widthf,output=0; + float widthf, output=0; WipeVars *wipe = (WipeVars *)seq->effectdata; int width; @@ -1683,15 +1683,15 @@ static float check_zone(WipeZone *wipezone, int x, int y, if (wipe->forward) { if (b1 < b2) - output = in_band(width,hyp,1,1); + output = in_band(width, hyp, 1, 1); else - output = in_band(width,hyp,0,1); + output = in_band(width, hyp, 0, 1); } else { if (b1 < b2) - output = in_band(width,hyp,0,1); + output = in_band(width, hyp, 0, 1); else - output = in_band(width,hyp,1,1); + output = in_band(width, hyp, 1, 1); } break; @@ -1721,25 +1721,25 @@ static float check_zone(WipeZone *wipezone, int x, int y, hwidth = minf(hwidth, fabsf(b3-b1)/2.0f); if (b2 < b1 && b2 < b3 ) { - output = in_band(hwidth,hyp,0,1); + output = in_band(hwidth, hyp, 0, 1); } else if (b2 > b1 && b2 > b3 ) { - output = in_band(hwidth,hyp2,0,1); + output = in_band(hwidth, hyp2, 0, 1); } else { if ( hyp < hwidth && hyp2 > hwidth ) - output = in_band(hwidth,hyp,1,1); + output = in_band(hwidth, hyp, 1, 1); else if ( hyp > hwidth && hyp2 < hwidth ) - output = in_band(hwidth,hyp2,1,1); + output = in_band(hwidth, hyp2, 1, 1); else - output = in_band(hwidth,hyp2,1,1) * in_band(hwidth,hyp,1,1); + output = in_band(hwidth, hyp2, 1, 1) * in_band(hwidth, hyp, 1, 1); } if (!wipe->forward)output = 1-output; break; case DO_CLOCK_WIPE: /* * temp1: angle of effect center in rads - * temp2: angle of line through (halfx,halfy) and (x,y) in rads + * temp2: angle of line through (halfx, halfy) and (x, y) in rads * temp3: angle of low side of blur * temp4: angle of high side of blur */ @@ -1801,19 +1801,19 @@ static float check_zone(WipeZone *wipezone, int x, int y, if (b2 < b1 && b2 < b3 ) { if (hwidth < pointdist) - output = in_band(wipezone,hwidth,hyp,facf0,0,1); + output = in_band(wipezone, hwidth, hyp, facf0, 0, 1); } else if (b2 > b1 && b2 > b3 ) { if (hwidth < pointdist) - output = in_band(wipezone,hwidth,hyp2,facf0,0,1); + output = in_band(wipezone, hwidth, hyp2, facf0, 0, 1); } else { if ( hyp < hwidth && hyp2 > hwidth ) - output = in_band(wipezone,hwidth,hyp,facf0,1,1); + output = in_band(wipezone, hwidth, hyp, facf0, 1, 1); else if ( hyp > hwidth && hyp2 < hwidth ) - output = in_band(wipezone,hwidth,hyp2,facf0,1,1); + output = in_band(wipezone, hwidth, hyp2, facf0, 1, 1); else - output = in_band(wipezone,hwidth,hyp2,facf0,1,1) * in_band(wipezone,hwidth,hyp,facf0,1,1); + output = in_band(wipezone, hwidth, hyp2, facf0, 1, 1) * in_band(wipezone, hwidth, hyp, facf0, 1, 1); } if (invert)facf0 = 1-facf0; @@ -1827,19 +1827,19 @@ static float check_zone(WipeZone *wipezone, int x, int y, if (b2 < b1 && b2 < b3 ) { if (hwidth < pointdist) - output *= in_band(wipezone,hwidth,hyp,facf0,0,1); + output *= in_band(wipezone, hwidth, hyp, facf0, 0, 1); } else if (b2 > b1 && b2 > b3 ) { if (hwidth < pointdist) - output *= in_band(wipezone,hwidth,hyp2,facf0,0,1); + output *= in_band(wipezone, hwidth, hyp2, facf0, 0, 1); } else { if ( hyp < hwidth && hyp2 > hwidth ) - output *= in_band(wipezone,hwidth,hyp,facf0,1,1); + output *= in_band(wipezone, hwidth, hyp, facf0, 1, 1); else if ( hyp > hwidth && hyp2 < hwidth ) - output *= in_band(wipezone,hwidth,hyp2,facf0,1,1); + output *= in_band(wipezone, hwidth, hyp2, facf0, 1, 1); else - output *= in_band(wipezone,hwidth,hyp2,facf0,1,1) * in_band(wipezone,hwidth,hyp,facf0,1,1); + output *= in_band(wipezone, hwidth, hyp2, facf0, 1, 1) * in_band(wipezone, hwidth, hyp, facf0, 1, 1); } break; @@ -1857,8 +1857,8 @@ static float check_zone(WipeZone *wipezone, int x, int y, pointdist = sqrt(temp1*temp1 + temp1*temp1); temp2 = sqrt((halfx-x)*(halfx-x) + (halfy-y)*(halfy-y)); - if (temp2 > pointdist) output = in_band(hwidth,fabs(temp2-pointdist),0,1); - else output = in_band(hwidth,fabs(temp2-pointdist),1,1); + if (temp2 > pointdist) output = in_band(hwidth, fabs(temp2-pointdist), 0, 1); + else output = in_band(hwidth, fabs(temp2-pointdist), 1, 1); if (!wipe->forward) output = 1-output; @@ -1911,7 +1911,7 @@ static void do_wipe_effect_byte(Sequence *seq, float facf0, float UNUSED(facf1), yo = y; for (y=0;y<yo;y++) { for (x=0;x<xo;x++) { - float check = check_zone(&wipezone,x,y,seq,facf0); + float check = check_zone(&wipezone, x, y, seq, facf0); if (check) { if (rt1) { rt[0] = (int)(rt1[0]*check)+ (int)(rt2[0]*(1-check)); @@ -1972,7 +1972,7 @@ static void do_wipe_effect_float(Sequence *seq, float facf0, float UNUSED(facf1) yo = y; for (y=0;y<yo;y++) { for (x=0;x<xo;x++) { - float check = check_zone(&wipezone,x,y,seq,facf0); + float check = check_zone(&wipezone, x, y, seq, facf0); if (check) { if (rt1) { rt[0] = rt1[0]*check+ rt2[0]*(1-check); @@ -2019,7 +2019,7 @@ static struct ImBuf * do_wipe_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); if (out->rect_float) { do_wipe_effect_float(seq, @@ -2083,7 +2083,7 @@ static void transform_image(int x, int y, struct ImBuf *ibuf1, struct ImBuf *out { int xo, yo, xi, yi; float xt, yt, xr, yr; - float s,c; + float s, c; xo = x; yo = y; @@ -2114,13 +2114,13 @@ static void transform_image(int x, int y, struct ImBuf *ibuf1, struct ImBuf *out //interpolate switch (interpolation) { case 0: - neareast_interpolation(ibuf1,out, xt,yt,xi,yi); + neareast_interpolation(ibuf1, out, xt, yt, xi, yi); break; case 1: - bilinear_interpolation(ibuf1,out, xt,yt,xi,yi); + bilinear_interpolation(ibuf1, out, xt, yt, xi, yi); break; case 2: - bicubic_interpolation(ibuf1,out, xt,yt,xi,yi); + bicubic_interpolation(ibuf1, out, xt, yt, xi, yi); break; } } @@ -2128,7 +2128,7 @@ static void transform_image(int x, int y, struct ImBuf *ibuf1, struct ImBuf *out } static void do_transform(Scene *scene, Sequence *seq, float UNUSED(facf0), int x, int y, - struct ImBuf *ibuf1,struct ImBuf *out) + struct ImBuf *ibuf1, struct ImBuf *out) { TransformVars *transform = (TransformVars *)seq->effectdata; float scale_x, scale_y, translate_x, translate_y, rotate_radians; @@ -2157,17 +2157,17 @@ static void do_transform(Scene *scene, Sequence *seq, float UNUSED(facf0), int x // Rotate rotate_radians = DEG2RADF(transform->rotIni); - transform_image(x,y, ibuf1, out, scale_x, scale_y, translate_x, translate_y, rotate_radians, transform->interpolation); + transform_image(x, y, ibuf1, out, scale_x, scale_y, translate_x, translate_y, rotate_radians, transform->interpolation); } static struct ImBuf * do_transform_effect( - SeqRenderData context, Sequence *seq,float UNUSED(cfra), + SeqRenderData context, Sequence *seq, float UNUSED(cfra), float facf0, float UNUSED(facf1), struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); do_transform(context.scene, seq, facf0, context.rectx, context.recty, ibuf1, out); @@ -2180,9 +2180,9 @@ static struct ImBuf * do_transform_effect( * GLOW * ********************************************************************** */ -static void RVBlurBitmap2_byte ( unsigned char* map, int width,int height, - float blur, - int quality) +static void RVBlurBitmap2_byte(unsigned char* map, int width, int height, + float blur, + int quality) /* MUUUCCH better than the previous blur. */ /* We do the blurring in two passes which is a whole lot faster. */ /* I changed the math arount to implement an actual Gaussian */ @@ -2192,9 +2192,9 @@ static void RVBlurBitmap2_byte ( unsigned char* map, int width,int height, /* a small bitmap. Avoid avoid avoid. */ /*=============================== */ { - unsigned char* temp=NULL,*swap; + unsigned char* temp=NULL, *swap; float *filter=NULL; - int x,y,i,fx,fy; + int x, y, i, fx, fy; int index, ix, halfWidth; float fval, k, curColor[3], curColor2[3], weight=0; @@ -2203,7 +2203,7 @@ static void RVBlurBitmap2_byte ( unsigned char* map, int width,int height, return; /* Allocate memory for the tempmap and the blur filter matrix */ - temp= MEM_mallocN( (width*height*4), "blurbitmaptemp"); + temp= MEM_mallocN((width*height*4), "blurbitmaptemp"); if (!temp) return; @@ -2349,7 +2349,7 @@ static void RVBlurBitmap2_byte ( unsigned char* map, int width,int height, MEM_freeN (temp); } -static void RVBlurBitmap2_float ( float* map, int width,int height, +static void RVBlurBitmap2_float ( float* map, int width, int height, float blur, int quality) /* MUUUCCH better than the previous blur. */ @@ -2361,9 +2361,9 @@ static void RVBlurBitmap2_float ( float* map, int width,int height, /* a small bitmap. Avoid avoid avoid. */ /*=============================== */ { - float* temp=NULL,*swap; + float* temp=NULL, *swap; float *filter=NULL; - int x,y,i,fx,fy; + int x, y, i, fx, fy; int index, ix, halfWidth; float fval, k, curColor[3], curColor2[3], weight=0; @@ -2372,7 +2372,7 @@ static void RVBlurBitmap2_float ( float* map, int width,int height, return; /* Allocate memory for the tempmap and the blur filter matrix */ - temp= MEM_mallocN( (width*height*4*sizeof(float)), "blurbitmaptemp"); + temp= MEM_mallocN((width*height*4*sizeof(float)), "blurbitmaptemp"); if (!temp) return; @@ -2526,15 +2526,15 @@ static void RVBlurBitmap2_float ( float* map, int width,int height, /*=============================== */ static void RVAddBitmaps_byte (unsigned char* a, unsigned char* b, unsigned char* c, int width, int height) { - int x,y,index; + int x, y, index; for (y=0;y<height;y++) { for (x=0;x<width;x++) { index=(x+y*width)*4; - c[index+GlowR]=MIN2(255,a[index+GlowR]+b[index+GlowR]); - c[index+GlowG]=MIN2(255,a[index+GlowG]+b[index+GlowG]); - c[index+GlowB]=MIN2(255,a[index+GlowB]+b[index+GlowB]); - c[index+GlowA]=MIN2(255,a[index+GlowA]+b[index+GlowA]); + c[index+GlowR]=MIN2(255, a[index+GlowR]+b[index+GlowR]); + c[index+GlowG]=MIN2(255, a[index+GlowG]+b[index+GlowG]); + c[index+GlowB]=MIN2(255, a[index+GlowB]+b[index+GlowB]); + c[index+GlowA]=MIN2(255, a[index+GlowA]+b[index+GlowA]); } } } @@ -2542,7 +2542,7 @@ static void RVAddBitmaps_byte (unsigned char* a, unsigned char* b, unsigned char static void RVAddBitmaps_float (float* a, float* b, float* c, int width, int height) { - int x,y,index; + int x, y, index; for (y=0;y<height;y++) { for (x=0;x<width;x++) { @@ -2561,7 +2561,7 @@ static void RVIsolateHighlights_byte (unsigned char* in, unsigned char* out, int width, int height, int threshold, float boost, float clamp) { - int x,y,index; + int x, y, index; int intensity; @@ -2591,7 +2591,7 @@ static void RVIsolateHighlights_float (float* in, float* out, int width, int height, float threshold, float boost, float clamp) { - int x,y,index; + int x, y, index; float intensity; @@ -2658,10 +2658,10 @@ static void do_glow_effect_byte(Sequence *seq, int render_size, float facf0, flo unsigned char *inbuf=(unsigned char *)rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - RVIsolateHighlights_byte(inbuf, outbuf , x, y, glow->fMini*765, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); + RVIsolateHighlights_byte(inbuf, outbuf, x, y, glow->fMini*765, glow->fBoost * facf0, glow->fClamp); + RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (render_size / 100.0f), glow->dQuality); if (!glow->bNoComp) - RVAddBitmaps_byte (inbuf , outbuf, outbuf, x, y); + RVAddBitmaps_byte (inbuf, outbuf, outbuf, x, y); } static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, float UNUSED(facf1), @@ -2672,10 +2672,10 @@ static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, fl float *inbuf = rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - RVIsolateHighlights_float(inbuf, outbuf , x, y, glow->fMini*3.0f, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); + RVIsolateHighlights_float(inbuf, outbuf, x, y, glow->fMini*3.0f, glow->fBoost * facf0, glow->fClamp); + RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (render_size / 100.0f), glow->dQuality); if (!glow->bNoComp) - RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y); + RVAddBitmaps_float (inbuf, outbuf, outbuf, x, y); } static struct ImBuf * do_glow_effect( @@ -2684,7 +2684,7 @@ static struct ImBuf * do_glow_effect( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); int render_size = 100*context.rectx/context.scene->r.xsch; @@ -2749,7 +2749,7 @@ static struct ImBuf * do_solid_color( struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); SolidColorVars *cv = (SolidColorVars *)seq->effectdata; @@ -3234,7 +3234,7 @@ static struct ImBuf * do_overdrop_effect(SeqRenderData context, struct ImBuf * ibuf2, struct ImBuf * ibuf3) { - struct ImBuf * out = prepare_effect_imbufs(context,ibuf1, ibuf2, ibuf3); + struct ImBuf * out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3); int x = context.rectx; int y = context.recty; diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 9291cb90dff..395214b1609 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -259,7 +259,8 @@ void seq_free_editing(Scene *scene) if (ed == NULL) return; - SEQ_BEGIN (ed, seq) { + SEQ_BEGIN (ed, seq) + { seq_free_sequence(scene, seq); } SEQ_END diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index e201209ec3f..d6fea87397d 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -121,7 +121,7 @@ void space_transform_invert(const SpaceTransform *data, float *co) static void space_transform_apply_normal(const SpaceTransform *data, float *no) { - mul_mat3_m4_v3( ((SpaceTransform*)data)->local2target, no); + mul_mat3_m4_v3(((SpaceTransform *)data)->local2target, no); normalize_v3(no); // TODO: could we just determine de scale value from the matrix? } @@ -218,19 +218,19 @@ int normal_projection_project_vertex(char options, const float *vert, const floa BVHTreeRayHit hit_tmp; //Copy from hit (we need to convert hit rays from one space coordinates to the other - memcpy( &hit_tmp, hit, sizeof(hit_tmp) ); + memcpy(&hit_tmp, hit, sizeof(hit_tmp)); //Apply space transform (TODO readjust dist) if (transf) { - copy_v3_v3( tmp_co, vert ); - space_transform_apply( transf, tmp_co ); + copy_v3_v3(tmp_co, vert); + space_transform_apply(transf, tmp_co); co = tmp_co; - copy_v3_v3( tmp_no, dir ); - space_transform_apply_normal( transf, tmp_no ); + copy_v3_v3(tmp_no, dir); + space_transform_apply_normal(transf, tmp_no); no = tmp_no; - hit_tmp.dist *= mat4_to_scale( ((SpaceTransform*)transf)->local2target ); + hit_tmp.dist *= mat4_to_scale(((SpaceTransform*)transf)->local2target); } else { co = vert; @@ -263,7 +263,7 @@ int normal_projection_project_vertex(char options, const float *vert, const floa hit_tmp.dist = len_v3v3((float *)vert, hit_tmp.co); } - memcpy(hit, &hit_tmp, sizeof(hit_tmp) ); + memcpy(hit, &hit_tmp, sizeof(hit_tmp)); return TRUE; } return FALSE; @@ -315,7 +315,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) auxMesh = object_get_derived_final(calc->smd->auxTarget); if (!auxMesh) return; - space_transform_setup( &local2aux, calc->ob, calc->smd->auxTarget); + space_transform_setup(&local2aux, calc->ob, calc->smd->auxTarget); } //After sucessufuly build the trees, start projection vertexs @@ -456,7 +456,7 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) if (dist > FLT_EPSILON) interp_v3_v3v3(tmp_co, tmp_co, nearest.co, (dist - calc->keepDist)/dist); //linear interpolation else - copy_v3_v3( tmp_co, nearest.co ); + copy_v3_v3(tmp_co, nearest.co); } //Convert the coordinates back to mesh coordinates diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index f3939a2ebfc..f98b6366e97 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -120,7 +120,7 @@ static void tend ( void ) gettimeofday ( &_tend,&tz ); } -static double tval() +static double tval( void ) { double t1, t2; t1 = ( double ) _tstart.tv_sec*1000 + ( double ) _tstart.tv_usec/ ( 1000 ); @@ -481,7 +481,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) } -static void fill_scs_points_anim(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) +static void fill_scs_points_anim(Object *UNUSED(ob), DerivedMesh *dm, SmokeCollSettings *scs) { MVert *mvert = dm->getVertArray(dm); MFace *mface = dm->getTessFaceArray(dm); @@ -899,7 +899,7 @@ void smokeModifier_reset(struct SmokeModifierData *smd) } } -void smokeModifier_free (SmokeModifierData *smd) +void smokeModifier_free(SmokeModifierData *smd) { if(smd) { @@ -1066,7 +1066,7 @@ static int get_lamp(Scene *scene, float *light) return found_lamp; } -static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd) +static void smoke_calc_domain(Scene *UNUSED(scene), Object *UNUSED(ob), SmokeModifierData *UNUSED(smd)) { #if 0 SmokeDomainSettings *sds = smd->domain; @@ -1546,7 +1546,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd MEM_freeN(flowobjs); } -static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt) +static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float UNUSED(dt)) { ListBase *effectors = pdInitEffectors(scene, ob, NULL, sds->effector_weights); @@ -1568,7 +1568,7 @@ static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, for(z = 0; z < sds->res[2]; z++) { EffectedPoint epoint; - float voxelCenter[3] = {0,0,0} , vel[3] = {0,0,0} , retvel[3] = {0,0,0}; + float voxelCenter[3] = {0,0,0}, vel[3] = {0,0,0}, retvel[3] = {0,0,0}; unsigned int index = smoke_get_index(x, sds->res[0], y, sds->res[1], z); if((density[index] < FLT_EPSILON) || obstacle[index]) diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 5d8a4955e58..690b6c83870 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -90,18 +90,18 @@ static int (*SB_localInterruptCallBack)(void) = NULL; /* ********** soft body engine ******* */ -typedef enum {SB_EDGE=1,SB_BEND=2,SB_STIFFQUAD=3,SB_HANDLE=4} type_spring; +typedef enum {SB_EDGE=1, SB_BEND=2, SB_STIFFQUAD=3, SB_HANDLE=4} type_spring; typedef struct BodySpring { int v1, v2; - float len,cf,load; + float len, cf, load; float ext_force[3]; /* edges colliding and sailing */ type_spring springtype; short flag; } BodySpring; typedef struct BodyFace { - int v1, v2, v3 ,v4; + int v1, v2, v3, v4; float ext_force[3]; /* faces colliding */ short flag; } BodyFace; @@ -124,7 +124,7 @@ typedef struct SBScratch { short flag; BodyFace *bodyface; int totface; - float aabbmin[3],aabbmax[3]; + float aabbmin[3], aabbmax[3]; ReferenceState Ref; } SBScratch; @@ -150,8 +150,8 @@ typedef struct SB_thread_context { #define SOFTGOALSNAP 0.999f /* if bp-> goal is above make it a *forced follow original* and skip all ODE stuff for this bp - removes *unnecessary* stiffnes from ODE system -*/ + * removes *unnecessary* stiffnes from ODE system + */ #define HEUNWARNLIMIT 1 /* 500 would be fine i think for detecting severe *stiff* stuff */ @@ -179,16 +179,16 @@ static void Vec3PlusStVec(float *v, float s, float *v1); static float sb_grav_force_scale(Object *UNUSED(ob)) /* since unit of g is [m/sec^2] and F = mass * g we rescale unit mass of node to 1 gramm - put it to a function here, so we can add user options later without touching simulation code -*/ + * put it to a function here, so we can add user options later without touching simulation code + */ { return (0.001f); } static float sb_fric_force_scale(Object *UNUSED(ob)) /* rescaling unit of drag [1 / sec] to somehow reasonable - put it to a function here, so we can add user options later without touching simulation code -*/ + * put it to a function here, so we can add user options later without touching simulation code + */ { return (0.01f); } @@ -216,15 +216,15 @@ static float sb_time_scale(Object *ob) /* helper functions for everything is animatable jow_go_for2_5 +++++++*/ /* introducing them here, because i know: steps in properties ( at frame timing ) - will cause unwanted responses of the softbody system (which does inter frame calculations ) - so first 'cure' would be: interpolate linear in time .. - Q: why do i write this? - A: because it happend once, that some eger coder 'streamlined' code to fail. - We DO linear interpolation for goals .. and i think we should do on animated properties as well -*/ + * will cause unwanted responses of the softbody system (which does inter frame calculations ) + * so first 'cure' would be: interpolate linear in time .. + * Q: why do i write this? + * A: because it happend once, that some eger coder 'streamlined' code to fail. + * We DO linear interpolation for goals .. and i think we should do on animated properties as well + */ -/* animate sb->maxgoal,sb->mingoal */ -static float _final_goal(Object *ob,BodyPoint *bp)/*jow_go_for2_5 */ +/* animate sb->maxgoal, sb->mingoal */ +static float _final_goal(Object *ob, BodyPoint *bp)/*jow_go_for2_5 */ { float f = -1999.99f; if (ob) { @@ -237,11 +237,11 @@ static float _final_goal(Object *ob,BodyPoint *bp)/*jow_go_for2_5 */ return (f); } } - printf("_final_goal failed! sb or bp ==NULL\n" ); + printf("_final_goal failed! sb or bp ==NULL\n"); return f; /*using crude but spot able values some times helps debuggin */ } -static float _final_mass(Object *ob,BodyPoint *bp) +static float _final_mass(Object *ob, BodyPoint *bp) { if (ob) { SoftBody *sb= ob->soft; /* is supposed to be there */ @@ -249,7 +249,7 @@ static float _final_mass(Object *ob,BodyPoint *bp) return(bp->mass*sb->nodemass); } } - printf("_final_mass failed! sb or bp ==NULL\n" ); + printf("_final_mass failed! sb or bp ==NULL\n"); return 1.0f; } /* helper functions for everything is animateble jow_go_for2_5 ------*/ @@ -259,7 +259,7 @@ static float _final_mass(Object *ob,BodyPoint *bp) /******************** for each target object/face the axis aligned bounding box (AABB) is stored faces parallel to global axes -so only simple "value" in [min,max] ckecks are used +so only simple "value" in [min, max] ckecks are used float operations still */ @@ -295,7 +295,7 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) ccd_Mesh *pccd_M = NULL; ccdf_minmax *mima = NULL; MFace *mface=NULL; - float v[3],hull; + float v[3], hull; int i; cmd =(CollisionModifierData *)modifiers_findByType(ob, eModifierType_Collision); @@ -304,7 +304,7 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) if (!cmd) return NULL; if (!cmd->numverts || !cmd->numfaces) return NULL; - pccd_M = MEM_mallocN(sizeof(ccd_Mesh),"ccd_Mesh"); + pccd_M = MEM_mallocN(sizeof(ccd_Mesh), "ccd_Mesh"); pccd_M->totvert = cmd->numverts; pccd_M->totface = cmd->numfaces; pccd_M->savety = CCD_SAVETY; @@ -314,7 +314,7 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) /* blow it up with forcefield ranges */ - hull = MAX2(ob->pd->pdef_sbift,ob->pd->pdef_sboft); + hull = MAX2(ob->pd->pdef_sbift, ob->pd->pdef_sboft); /* alloc and copy verts*/ pccd_M->mvert = MEM_dupallocN(cmd->xnew); @@ -322,21 +322,21 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) /* determine the ortho BB */ for (i=0; i < pccd_M->totvert; i++) { /* evaluate limits */ - copy_v3_v3(v,pccd_M->mvert[i].co); - pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0],v[0]-hull); - pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1],v[1]-hull); - pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2],v[2]-hull); + copy_v3_v3(v, pccd_M->mvert[i].co); + pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0], v[0]-hull); + pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1], v[1]-hull); + pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2], v[2]-hull); - pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0],v[0]+hull); - pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1],v[1]+hull); - pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2],v[2]+hull); + pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0], v[0]+hull); + pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1], v[1]+hull); + pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2], v[2]+hull); } /* alloc and copy faces*/ pccd_M->mface = MEM_dupallocN(cmd->mfaces); /* OBBs for idea1 */ - pccd_M->mima = MEM_mallocN(sizeof(ccdf_minmax)*pccd_M->totface,"ccd_Mesh_Faces_mima"); + pccd_M->mima = MEM_mallocN(sizeof(ccdf_minmax)*pccd_M->totface, "ccd_Mesh_Faces_mima"); mima = pccd_M->mima; mface = pccd_M->mface; @@ -346,38 +346,38 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) mima->minx=mima->miny=mima->minz=1e30f; mima->maxx=mima->maxy=mima->maxz=-1e30f; - copy_v3_v3(v,pccd_M->mvert[mface->v1].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mvert[mface->v2].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mvert[mface->v3].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mvert[mface->v1].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mvert[mface->v2].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mvert[mface->v3].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); if (mface->v4) { - copy_v3_v3(v,pccd_M->mvert[mface->v4].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mvert[mface->v4].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); } @@ -387,12 +387,12 @@ static ccd_Mesh *ccd_mesh_make(Object *ob) } return pccd_M; } -static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M) +static void ccd_mesh_update(Object *ob, ccd_Mesh *pccd_M) { CollisionModifierData *cmd; ccdf_minmax *mima = NULL; MFace *mface=NULL; - float v[3],hull; + float v[3], hull; int i; cmd =(CollisionModifierData *)modifiers_findByType(ob, eModifierType_Collision); @@ -412,7 +412,7 @@ static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M) /* blow it up with forcefield ranges */ - hull = MAX2(ob->pd->pdef_sbift,ob->pd->pdef_sboft); + hull = MAX2(ob->pd->pdef_sbift, ob->pd->pdef_sboft); /* rotate current to previous */ if (pccd_M->mprevvert) MEM_freeN(pccd_M->mprevvert); @@ -423,24 +423,24 @@ static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M) /* determine the ortho BB */ for (i=0; i < pccd_M->totvert; i++) { /* evaluate limits */ - copy_v3_v3(v,pccd_M->mvert[i].co); - pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0],v[0]-hull); - pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1],v[1]-hull); - pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2],v[2]-hull); + copy_v3_v3(v, pccd_M->mvert[i].co); + pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0], v[0]-hull); + pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1], v[1]-hull); + pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2], v[2]-hull); - pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0],v[0]+hull); - pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1],v[1]+hull); - pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2],v[2]+hull); + pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0], v[0]+hull); + pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1], v[1]+hull); + pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2], v[2]+hull); /* evaluate limits */ - copy_v3_v3(v,pccd_M->mprevvert[i].co); - pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0],v[0]-hull); - pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1],v[1]-hull); - pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2],v[2]-hull); + copy_v3_v3(v, pccd_M->mprevvert[i].co); + pccd_M->bbmin[0] = MIN2(pccd_M->bbmin[0], v[0]-hull); + pccd_M->bbmin[1] = MIN2(pccd_M->bbmin[1], v[1]-hull); + pccd_M->bbmin[2] = MIN2(pccd_M->bbmin[2], v[2]-hull); - pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0],v[0]+hull); - pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1],v[1]+hull); - pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2],v[2]+hull); + pccd_M->bbmax[0] = MAX2(pccd_M->bbmax[0], v[0]+hull); + pccd_M->bbmax[1] = MAX2(pccd_M->bbmax[1], v[1]+hull); + pccd_M->bbmax[2] = MAX2(pccd_M->bbmax[2], v[2]+hull); } @@ -453,73 +453,73 @@ static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M) mima->minx=mima->miny=mima->minz=1e30f; mima->maxx=mima->maxy=mima->maxz=-1e30f; - copy_v3_v3(v,pccd_M->mvert[mface->v1].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mvert[mface->v2].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mvert[mface->v3].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mvert[mface->v1].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mvert[mface->v2].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mvert[mface->v3].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); if (mface->v4) { - copy_v3_v3(v,pccd_M->mvert[mface->v4].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mvert[mface->v4].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); } - copy_v3_v3(v,pccd_M->mprevvert[mface->v1].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mprevvert[mface->v2].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); - - copy_v3_v3(v,pccd_M->mprevvert[mface->v3].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mprevvert[mface->v1].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mprevvert[mface->v2].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); + + copy_v3_v3(v, pccd_M->mprevvert[mface->v3].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); if (mface->v4) { - copy_v3_v3(v,pccd_M->mprevvert[mface->v4].co); - mima->minx = MIN2(mima->minx,v[0]-hull); - mima->miny = MIN2(mima->miny,v[1]-hull); - mima->minz = MIN2(mima->minz,v[2]-hull); - mima->maxx = MAX2(mima->maxx,v[0]+hull); - mima->maxy = MAX2(mima->maxy,v[1]+hull); - mima->maxz = MAX2(mima->maxz,v[2]+hull); + copy_v3_v3(v, pccd_M->mprevvert[mface->v4].co); + mima->minx = MIN2(mima->minx, v[0]-hull); + mima->miny = MIN2(mima->miny, v[1]-hull); + mima->minz = MIN2(mima->minz, v[2]-hull); + mima->maxx = MAX2(mima->maxx, v[0]+hull); + mima->maxy = MAX2(mima->maxy, v[1]+hull); + mima->maxz = MAX2(mima->maxz, v[2]+hull); } @@ -587,9 +587,9 @@ static void ccd_update_deflector_hash(Scene *scene, Object *vertexowner, GHash * /*+++ only with deflecting set */ if (ob->pd && ob->pd->deflect) { - ccd_Mesh *ccdmesh = BLI_ghash_lookup(hash,ob); + ccd_Mesh *ccdmesh = BLI_ghash_lookup(hash, ob); if (ccdmesh) - ccd_mesh_update(ob,ccdmesh); + ccd_mesh_update(ob, ccdmesh); }/*--- only with deflecting set */ }/* mesh && layer*/ @@ -605,7 +605,7 @@ static void ccd_update_deflector_hash(Scene *scene, Object *vertexowner, GHash * static int count_mesh_quads(Mesh *me) { - int a,result = 0; + int a, result = 0; MFace *mface= me->mface; if (mface) { @@ -631,8 +631,8 @@ static void add_mesh_quad_diag_springs(Object *ob) nofquads = count_mesh_quads(me); if (nofquads) { /* resize spring-array to hold additional quad springs */ - bs_new= MEM_callocN( (ob->soft->totspring + nofquads *2 )*sizeof(BodySpring), "bodyspring"); - memcpy(bs_new,ob->soft->bspring,(ob->soft->totspring )*sizeof(BodySpring)); + bs_new= MEM_callocN((ob->soft->totspring + nofquads *2 )*sizeof(BodySpring), "bodyspring"); + memcpy(bs_new, ob->soft->bspring, (ob->soft->totspring )*sizeof(BodySpring)); if (ob->soft->bspring) MEM_freeN(ob->soft->bspring); /* do this before reassigning the pointer or have a 1st class memory leak */ @@ -664,13 +664,13 @@ static void add_mesh_quad_diag_springs(Object *ob) } } -static void add_2nd_order_roller(Object *ob,float UNUSED(stiffness), int *counter, int addsprings) +static void add_2nd_order_roller(Object *ob, float UNUSED(stiffness), int *counter, int addsprings) { /*assume we have a softbody*/ SoftBody *sb= ob->soft; /* is supposed to be there */ - BodyPoint *bp,*bpo; - BodySpring *bs,*bs2,*bs3= NULL; - int a,b,c,notthis= 0,v0; + BodyPoint *bp, *bpo; + BodySpring *bs, *bs2, *bs3= NULL; + int a, b, c, notthis= 0, v0; if (!sb->bspring) {return;} /* we are 2nd order here so 1rst should have been build :) */ /* first run counting second run adding */ *counter = 0; @@ -726,40 +726,40 @@ static void add_2nd_order_roller(Object *ob,float UNUSED(stiffness), int *counte } -static void add_2nd_order_springs(Object *ob,float stiffness) +static void add_2nd_order_springs(Object *ob, float stiffness) { int counter = 0; BodySpring *bs_new; stiffness *=stiffness; - add_2nd_order_roller(ob,stiffness,&counter,0); /* counting */ + add_2nd_order_roller(ob, stiffness, &counter, 0); /* counting */ if (counter) { /* resize spring-array to hold additional springs */ - bs_new= MEM_callocN( (ob->soft->totspring + counter )*sizeof(BodySpring), "bodyspring"); - memcpy(bs_new,ob->soft->bspring,(ob->soft->totspring )*sizeof(BodySpring)); + bs_new= MEM_callocN((ob->soft->totspring + counter )*sizeof(BodySpring), "bodyspring"); + memcpy(bs_new, ob->soft->bspring, (ob->soft->totspring )*sizeof(BodySpring)); if (ob->soft->bspring) MEM_freeN(ob->soft->bspring); ob->soft->bspring = bs_new; - add_2nd_order_roller(ob,stiffness,&counter,1); /* adding */ + add_2nd_order_roller(ob, stiffness, &counter, 1); /* adding */ ob->soft->totspring += counter; } } -static void add_bp_springlist(BodyPoint *bp,int springID) +static void add_bp_springlist(BodyPoint *bp, int springID) { int *newlist; if (bp->springs == NULL) { - bp->springs = MEM_callocN( sizeof(int), "bpsprings"); + bp->springs = MEM_callocN(sizeof(int), "bpsprings"); bp->springs[0] = springID; bp->nofsprings = 1; } else { bp->nofsprings++; newlist = MEM_callocN(bp->nofsprings * sizeof(int), "bpsprings"); - memcpy(newlist,bp->springs,(bp->nofsprings-1)* sizeof(int)); + memcpy(newlist, bp->springs, (bp->nofsprings-1)* sizeof(int)); MEM_freeN(bp->springs); bp->springs = newlist; bp->springs[bp->nofsprings-1] = springID; @@ -774,7 +774,7 @@ static void build_bps_springlist(Object *ob) SoftBody *sb= ob->soft; /* is supposed to be there */ BodyPoint *bp; BodySpring *bs; - int a,b; + int a, b; if (sb==NULL) return; /* paranoya check */ @@ -787,10 +787,10 @@ static void build_bps_springlist(Object *ob) /* scan for attached inner springs */ for (b=sb->totspring, bs= sb->bspring; b>0; b--, bs++) { if (( (sb->totpoint-a) == bs->v1) ) { - add_bp_springlist(bp,sb->totspring -b); + add_bp_springlist(bp, sb->totspring -b); } if (( (sb->totpoint-a) == bs->v2) ) { - add_bp_springlist(bp,sb->totspring -b); + add_bp_springlist(bp, sb->totspring -b); } }/*for springs*/ }/*for bp*/ @@ -801,8 +801,8 @@ static void calculate_collision_balls(Object *ob) SoftBody *sb= ob->soft; /* is supposed to be there */ BodyPoint *bp; BodySpring *bs; - int a,b,akku_count; - float min,max,akku; + int a, b, akku_count; + float min, max, akku; if (sb==NULL) return; /* paranoya check */ @@ -818,8 +818,8 @@ static void calculate_collision_balls(Object *ob) if (bs->springtype == SB_EDGE) { akku += bs->len; akku_count++, - min = MIN2(bs->len,min); - max = MAX2(bs->len,max); + min = MIN2(bs->len, min); + max = MAX2(bs->len, max); } } @@ -860,9 +860,9 @@ static void renew_softbody(Scene *scene, Object *ob, int totpoint, int totspring sb->totpoint= totpoint; sb->totspring= totspring; - sb->bpoint= MEM_mallocN( totpoint*sizeof(BodyPoint), "bodypoint"); + sb->bpoint= MEM_mallocN(totpoint*sizeof(BodyPoint), "bodypoint"); if (totspring) - sb->bspring= MEM_mallocN( totspring*sizeof(BodySpring), "bodyspring"); + sb->bspring= MEM_mallocN(totspring*sizeof(BodySpring), "bodyspring"); /* initialize BodyPoint array */ for (i=0; i<totpoint; i++) { @@ -1015,21 +1015,21 @@ static int query_external_colliders(Scene *scene, Object *me) /* +++ the aabb "force" section*/ -static int sb_detect_aabb_collisionCached( float UNUSED(force[3]), unsigned int UNUSED(par_layer),struct Object *vertexowner,float UNUSED(time)) +static int sb_detect_aabb_collisionCached(float UNUSED(force[3]), unsigned int UNUSED(par_layer), struct Object *vertexowner, float UNUSED(time)) { Object *ob; SoftBody *sb=vertexowner->soft; GHash *hash; GHashIterator *ihash; - float aabbmin[3],aabbmax[3]; + float aabbmin[3], aabbmax[3]; int deflected=0; #if 0 int a; #endif if ((sb == NULL) || (sb->scratch ==NULL)) return 0; - copy_v3_v3(aabbmin,sb->scratch->aabbmin); - copy_v3_v3(aabbmax,sb->scratch->aabbmax); + copy_v3_v3(aabbmin, sb->scratch->aabbmin); + copy_v3_v3(aabbmax, sb->scratch->aabbmax); hash = vertexowner->soft->scratch->colliderhash; ihash = BLI_ghashIterator_new(hash); @@ -1085,22 +1085,22 @@ static int sb_detect_aabb_collisionCached( float UNUSED(force[3]), unsigned int /* +++ the face external section*/ -static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp, - float force[3], unsigned int UNUSED(par_layer),struct Object *vertexowner,float time) - { +static int sb_detect_face_pointCached(float face_v1[3], float face_v2[3], float face_v3[3], float *damp, + float force[3], unsigned int UNUSED(par_layer), struct Object *vertexowner, float time) +{ Object *ob; GHash *hash; GHashIterator *ihash; - float nv1[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3],aabbmax[3]; - float facedist,outerfacethickness,tune = 10.f; + float nv1[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3], aabbmax[3]; + float facedist, outerfacethickness, tune = 10.f; int a, deflected=0; - aabbmin[0] = MIN3(face_v1[0],face_v2[0],face_v3[0]); - aabbmin[1] = MIN3(face_v1[1],face_v2[1],face_v3[1]); - aabbmin[2] = MIN3(face_v1[2],face_v2[2],face_v3[2]); - aabbmax[0] = MAX3(face_v1[0],face_v2[0],face_v3[0]); - aabbmax[1] = MAX3(face_v1[1],face_v2[1],face_v3[1]); - aabbmax[2] = MAX3(face_v1[2],face_v2[2],face_v3[2]); + aabbmin[0] = MIN3(face_v1[0], face_v2[0], face_v3[0]); + aabbmin[1] = MIN3(face_v1[1], face_v2[1], face_v3[1]); + aabbmin[2] = MIN3(face_v1[2], face_v2[2], face_v3[2]); + aabbmax[0] = MAX3(face_v1[0], face_v2[0], face_v3[0]); + aabbmax[1] = MAX3(face_v1[1], face_v2[1], face_v3[1]); + aabbmax[2] = MAX3(face_v1[2], face_v2[2], face_v3[2]); /* calculate face normal once again SIGH */ sub_v3_v3v3(edge1, face_v1, face_v2); @@ -1147,16 +1147,16 @@ static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float fa /* use mesh*/ if (mvert) { while (a) { - copy_v3_v3(nv1,mvert[a-1].co); + copy_v3_v3(nv1, mvert[a-1].co); if (mprevvert) { - mul_v3_fl(nv1,time); - Vec3PlusStVec(nv1,(1.0f-time),mprevvert[a-1].co); + mul_v3_fl(nv1, time); + Vec3PlusStVec(nv1, (1.0f-time), mprevvert[a-1].co); } /* origin to face_v2*/ sub_v3_v3(nv1, face_v2); - facedist = dot_v3v3(nv1,d_nvect); + facedist = dot_v3v3(nv1, d_nvect); if (ABS(facedist)<outerfacethickness) { - if (isect_point_tri_prism_v3(nv1, face_v1,face_v2,face_v3) ) { + if (isect_point_tri_prism_v3(nv1, face_v1, face_v2, face_v3) ) { float df; if (facedist > 0) { df = (outerfacethickness-facedist)/outerfacethickness; @@ -1168,7 +1168,7 @@ static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float fa *damp=df*tune*ob->pd->pdef_sbdamp; df = 0.01f*exp(- 100.0f*df); - Vec3PlusStVec(force,-df,d_nvect); + Vec3PlusStVec(force, -df, d_nvect); deflected = 3; } } @@ -1183,22 +1183,22 @@ static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float fa } -static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp, - float force[3], unsigned int UNUSED(par_layer),struct Object *vertexowner,float time) +static int sb_detect_face_collisionCached(float face_v1[3], float face_v2[3], float face_v3[3], float *damp, + float force[3], unsigned int UNUSED(par_layer), struct Object *vertexowner, float time) { Object *ob; GHash *hash; GHashIterator *ihash; - float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3],aabbmax[3]; - float t,tune = 10.0f; + float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3], aabbmax[3]; + float t, tune = 10.0f; int a, deflected=0; - aabbmin[0] = MIN3(face_v1[0],face_v2[0],face_v3[0]); - aabbmin[1] = MIN3(face_v1[1],face_v2[1],face_v3[1]); - aabbmin[2] = MIN3(face_v1[2],face_v2[2],face_v3[2]); - aabbmax[0] = MAX3(face_v1[0],face_v2[0],face_v3[0]); - aabbmax[1] = MAX3(face_v1[1],face_v2[1],face_v3[1]); - aabbmax[2] = MAX3(face_v1[2],face_v2[2],face_v3[2]); + aabbmin[0] = MIN3(face_v1[0], face_v2[0], face_v3[0]); + aabbmin[1] = MIN3(face_v1[1], face_v2[1], face_v3[1]); + aabbmin[2] = MIN3(face_v1[2], face_v2[2], face_v3[2]); + aabbmax[0] = MAX3(face_v1[0], face_v2[0], face_v3[0]); + aabbmax[1] = MAX3(face_v1[1], face_v2[1], face_v3[1]); + aabbmax[2] = MAX3(face_v1[2], face_v2[2], face_v3[2]); hash = vertexowner->soft->scratch->colliderhash; ihash = BLI_ghashIterator_new(hash); @@ -1257,25 +1257,25 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa if (mvert) { - copy_v3_v3(nv1,mvert[mface->v1].co); - copy_v3_v3(nv2,mvert[mface->v2].co); - copy_v3_v3(nv3,mvert[mface->v3].co); + copy_v3_v3(nv1, mvert[mface->v1].co); + copy_v3_v3(nv2, mvert[mface->v2].co); + copy_v3_v3(nv3, mvert[mface->v3].co); if (mface->v4) { - copy_v3_v3(nv4,mvert[mface->v4].co); + copy_v3_v3(nv4, mvert[mface->v4].co); } if (mprevvert) { - mul_v3_fl(nv1,time); - Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); + mul_v3_fl(nv1, time); + Vec3PlusStVec(nv1, (1.0f-time), mprevvert[mface->v1].co); - mul_v3_fl(nv2,time); - Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); + mul_v3_fl(nv2, time); + Vec3PlusStVec(nv2, (1.0f-time), mprevvert[mface->v2].co); - mul_v3_fl(nv3,time); - Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); + mul_v3_fl(nv3, time); + Vec3PlusStVec(nv3, (1.0f-time), mprevvert[mface->v3].co); if (mface->v4) { - mul_v3_fl(nv4,time); - Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); + mul_v3_fl(nv4, time); + Vec3PlusStVec(nv4, (1.0f-time), mprevvert[mface->v4].co); } } } @@ -1289,7 +1289,7 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa isect_line_tri_v3(nv1, nv2, face_v1, face_v2, face_v3, &t, NULL) || isect_line_tri_v3(nv2, nv3, face_v1, face_v2, face_v3, &t, NULL) || isect_line_tri_v3(nv3, nv1, face_v1, face_v2, face_v3, &t, NULL) ) { - Vec3PlusStVec(force,-0.5f,d_nvect); + Vec3PlusStVec(force, -0.5f, d_nvect); *damp=tune*ob->pd->pdef_sbdamp; deflected = 2; } @@ -1304,7 +1304,7 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa we did that edge already */ isect_line_tri_v3(nv3, nv4, face_v1, face_v2, face_v3, &t, NULL) || isect_line_tri_v3(nv4, nv1, face_v1, face_v2, face_v3, &t, NULL) ) { - Vec3PlusStVec(force,-0.5f,d_nvect); + Vec3PlusStVec(force, -0.5f, d_nvect); *damp=tune*ob->pd->pdef_sbdamp; deflected = 2; } @@ -1321,12 +1321,12 @@ static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],floa -static void scan_for_ext_face_forces(Object *ob,float timenow) +static void scan_for_ext_face_forces(Object *ob, float timenow) { SoftBody *sb = ob->soft; BodyFace *bf; int a; - float damp=0.0f,choke=1.0f; + float damp=0.0f, choke=1.0f; float tune = -10.0f; float feedback[3]; @@ -1339,25 +1339,25 @@ static void scan_for_ext_face_forces(Object *ob,float timenow) /*+++edges intruding*/ bf->flag &= ~BFF_INTERSECT; feedback[0]=feedback[1]=feedback[2]=0.0f; - if (sb_detect_face_collisionCached(sb->bpoint[bf->v1].pos,sb->bpoint[bf->v2].pos, sb->bpoint[bf->v3].pos, - &damp, feedback, ob->lay ,ob , timenow)) { - Vec3PlusStVec(sb->bpoint[bf->v1].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v2].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v3].force,tune,feedback); -// Vec3PlusStVec(bf->ext_force,tune,feedback); + if (sb_detect_face_collisionCached(sb->bpoint[bf->v1].pos, sb->bpoint[bf->v2].pos, sb->bpoint[bf->v3].pos, + &damp, feedback, ob->lay, ob, timenow)) { + Vec3PlusStVec(sb->bpoint[bf->v1].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v2].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v3].force, tune, feedback); +// Vec3PlusStVec(bf->ext_force, tune, feedback); bf->flag |= BFF_INTERSECT; - choke = MIN2(MAX2(damp,choke),1.0f); + choke = MIN2(MAX2(damp, choke), 1.0f); } feedback[0]=feedback[1]=feedback[2]=0.0f; - if ((bf->v4) && (sb_detect_face_collisionCached(sb->bpoint[bf->v1].pos,sb->bpoint[bf->v3].pos, sb->bpoint[bf->v4].pos, - &damp, feedback, ob->lay ,ob , timenow))) { - Vec3PlusStVec(sb->bpoint[bf->v1].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v3].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v4].force,tune,feedback); -// Vec3PlusStVec(bf->ext_force,tune,feedback); + if ((bf->v4) && (sb_detect_face_collisionCached(sb->bpoint[bf->v1].pos, sb->bpoint[bf->v3].pos, sb->bpoint[bf->v4].pos, + &damp, feedback, ob->lay, ob, timenow))) { + Vec3PlusStVec(sb->bpoint[bf->v1].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v3].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v4].force, tune, feedback); +// Vec3PlusStVec(bf->ext_force, tune, feedback); bf->flag |= BFF_INTERSECT; - choke = MIN2(MAX2(damp,choke),1.0f); + choke = MIN2(MAX2(damp, choke), 1.0f); } /*---edges intruding*/ @@ -1366,25 +1366,25 @@ static void scan_for_ext_face_forces(Object *ob,float timenow) bf->flag &= ~BFF_CLOSEVERT; tune = -1.0f; feedback[0]=feedback[1]=feedback[2]=0.0f; - if (sb_detect_face_pointCached(sb->bpoint[bf->v1].pos,sb->bpoint[bf->v2].pos, sb->bpoint[bf->v3].pos, - &damp, feedback, ob->lay ,ob , timenow)) { - Vec3PlusStVec(sb->bpoint[bf->v1].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v2].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v3].force,tune,feedback); -// Vec3PlusStVec(bf->ext_force,tune,feedback); + if (sb_detect_face_pointCached(sb->bpoint[bf->v1].pos, sb->bpoint[bf->v2].pos, sb->bpoint[bf->v3].pos, + &damp, feedback, ob->lay, ob, timenow)) { + Vec3PlusStVec(sb->bpoint[bf->v1].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v2].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v3].force, tune, feedback); +// Vec3PlusStVec(bf->ext_force, tune, feedback); bf->flag |= BFF_CLOSEVERT; - choke = MIN2(MAX2(damp,choke),1.0f); + choke = MIN2(MAX2(damp, choke), 1.0f); } feedback[0]=feedback[1]=feedback[2]=0.0f; - if ((bf->v4) && (sb_detect_face_pointCached(sb->bpoint[bf->v1].pos,sb->bpoint[bf->v3].pos, sb->bpoint[bf->v4].pos, - &damp, feedback, ob->lay ,ob , timenow))) { - Vec3PlusStVec(sb->bpoint[bf->v1].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v3].force,tune,feedback); - Vec3PlusStVec(sb->bpoint[bf->v4].force,tune,feedback); -// Vec3PlusStVec(bf->ext_force,tune,feedback); + if ((bf->v4) && (sb_detect_face_pointCached(sb->bpoint[bf->v1].pos, sb->bpoint[bf->v3].pos, sb->bpoint[bf->v4].pos, + &damp, feedback, ob->lay, ob, timenow))) { + Vec3PlusStVec(sb->bpoint[bf->v1].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v3].force, tune, feedback); + Vec3PlusStVec(sb->bpoint[bf->v4].force, tune, feedback); +// Vec3PlusStVec(bf->ext_force, tune, feedback); bf->flag |= BFF_CLOSEVERT; - choke = MIN2(MAX2(damp,choke),1.0f); + choke = MIN2(MAX2(damp, choke), 1.0f); } } /*--- close vertices*/ @@ -1392,11 +1392,11 @@ static void scan_for_ext_face_forces(Object *ob,float timenow) bf = sb->scratch->bodyface; for (a=0; a<sb->scratch->totface; a++, bf++) { if (( bf->flag & BFF_INTERSECT) || ( bf->flag & BFF_CLOSEVERT)) { - sb->bpoint[bf->v1].choke2=MAX2(sb->bpoint[bf->v1].choke2,choke); - sb->bpoint[bf->v2].choke2=MAX2(sb->bpoint[bf->v2].choke2,choke); - sb->bpoint[bf->v3].choke2=MAX2(sb->bpoint[bf->v3].choke2,choke); + sb->bpoint[bf->v1].choke2=MAX2(sb->bpoint[bf->v1].choke2, choke); + sb->bpoint[bf->v2].choke2=MAX2(sb->bpoint[bf->v2].choke2, choke); + sb->bpoint[bf->v3].choke2=MAX2(sb->bpoint[bf->v3].choke2, choke); if (bf->v4) { - sb->bpoint[bf->v2].choke2=MAX2(sb->bpoint[bf->v2].choke2,choke); + sb->bpoint[bf->v2].choke2=MAX2(sb->bpoint[bf->v2].choke2, choke); } } } @@ -1408,24 +1408,24 @@ static void scan_for_ext_face_forces(Object *ob,float timenow) /* +++ the spring external section*/ -static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],float *damp, - float force[3], unsigned int UNUSED(par_layer),struct Object *vertexowner,float time) +static int sb_detect_edge_collisionCached(float edge_v1[3], float edge_v2[3], float *damp, + float force[3], unsigned int UNUSED(par_layer), struct Object *vertexowner, float time) { Object *ob; GHash *hash; GHashIterator *ihash; - float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3],aabbmax[3]; - float t,el; + float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3], d_nvect[3], aabbmin[3], aabbmax[3]; + float t, el; int a, deflected=0; - aabbmin[0] = MIN2(edge_v1[0],edge_v2[0]); - aabbmin[1] = MIN2(edge_v1[1],edge_v2[1]); - aabbmin[2] = MIN2(edge_v1[2],edge_v2[2]); - aabbmax[0] = MAX2(edge_v1[0],edge_v2[0]); - aabbmax[1] = MAX2(edge_v1[1],edge_v2[1]); - aabbmax[2] = MAX2(edge_v1[2],edge_v2[2]); + aabbmin[0] = MIN2(edge_v1[0], edge_v2[0]); + aabbmin[1] = MIN2(edge_v1[1], edge_v2[1]); + aabbmin[2] = MIN2(edge_v1[2], edge_v2[2]); + aabbmax[0] = MAX2(edge_v1[0], edge_v2[0]); + aabbmax[1] = MAX2(edge_v1[1], edge_v2[1]); + aabbmax[2] = MAX2(edge_v1[2], edge_v2[2]); - el = len_v3v3(edge_v1,edge_v2); + el = len_v3v3(edge_v1, edge_v2); hash = vertexowner->soft->scratch->colliderhash; ihash = BLI_ghashIterator_new(hash); @@ -1484,25 +1484,25 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa if (mvert) { - copy_v3_v3(nv1,mvert[mface->v1].co); - copy_v3_v3(nv2,mvert[mface->v2].co); - copy_v3_v3(nv3,mvert[mface->v3].co); + copy_v3_v3(nv1, mvert[mface->v1].co); + copy_v3_v3(nv2, mvert[mface->v2].co); + copy_v3_v3(nv3, mvert[mface->v3].co); if (mface->v4) { - copy_v3_v3(nv4,mvert[mface->v4].co); + copy_v3_v3(nv4, mvert[mface->v4].co); } if (mprevvert) { - mul_v3_fl(nv1,time); - Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); + mul_v3_fl(nv1, time); + Vec3PlusStVec(nv1, (1.0f-time), mprevvert[mface->v1].co); - mul_v3_fl(nv2,time); - Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); + mul_v3_fl(nv2, time); + Vec3PlusStVec(nv2, (1.0f-time), mprevvert[mface->v2].co); - mul_v3_fl(nv3,time); - Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); + mul_v3_fl(nv3, time); + Vec3PlusStVec(nv3, (1.0f-time), mprevvert[mface->v3].co); if (mface->v4) { - mul_v3_fl(nv4,time); - Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); + mul_v3_fl(nv4, time); + Vec3PlusStVec(nv4, (1.0f-time), mprevvert[mface->v4].co); } } } @@ -1514,14 +1514,14 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa cross_v3_v3v3(d_nvect, edge2, edge1); normalize_v3(d_nvect); if ( isect_line_tri_v3(edge_v1, edge_v2, nv1, nv2, nv3, &t, NULL)) { - float v1[3],v2[3]; - float intrusiondepth,i1,i2; + float v1[3], v2[3]; + float intrusiondepth, i1, i2; sub_v3_v3v3(v1, edge_v1, nv2); sub_v3_v3v3(v2, edge_v2, nv2); - i1 = dot_v3v3(v1,d_nvect); - i2 = dot_v3v3(v2,d_nvect); - intrusiondepth = -MIN2(i1,i2)/el; - Vec3PlusStVec(force,intrusiondepth,d_nvect); + i1 = dot_v3v3(v1, d_nvect); + i2 = dot_v3v3(v2, d_nvect); + intrusiondepth = -MIN2(i1, i2)/el; + Vec3PlusStVec(force, intrusiondepth, d_nvect); *damp=ob->pd->pdef_sbdamp; deflected = 2; } @@ -1532,17 +1532,17 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa cross_v3_v3v3(d_nvect, edge2, edge1); normalize_v3(d_nvect); - if (isect_line_tri_v3( edge_v1, edge_v2,nv1, nv3, nv4, &t, NULL)) { - float v1[3],v2[3]; - float intrusiondepth,i1,i2; + if (isect_line_tri_v3( edge_v1, edge_v2, nv1, nv3, nv4, &t, NULL)) { + float v1[3], v2[3]; + float intrusiondepth, i1, i2; sub_v3_v3v3(v1, edge_v1, nv4); sub_v3_v3v3(v2, edge_v2, nv4); - i1 = dot_v3v3(v1,d_nvect); - i2 = dot_v3v3(v2,d_nvect); - intrusiondepth = -MIN2(i1,i2)/el; + i1 = dot_v3v3(v1, d_nvect); + i2 = dot_v3v3(v2, d_nvect); + intrusiondepth = -MIN2(i1, i2)/el; - Vec3PlusStVec(force,intrusiondepth,d_nvect); + Vec3PlusStVec(force, intrusiondepth, d_nvect); *damp=ob->pd->pdef_sbdamp; deflected = 2; } @@ -1574,8 +1574,8 @@ static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow, if (bs->springtype == SB_EDGE) { /* +++ springs colliding */ if (ob->softflag & OB_SB_EDGECOLL) { - if ( sb_detect_edge_collisionCached (sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos, - &damp,feedback,ob->lay,ob,timenow)) { + if ( sb_detect_edge_collisionCached (sb->bpoint[bs->v1].pos, sb->bpoint[bs->v2].pos, + &damp, feedback, ob->lay, ob, timenow)) { add_v3_v3(bs->ext_force, feedback); bs->flag |= BSF_INTERSECT; //bs->cf=damp; @@ -1588,40 +1588,40 @@ static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow, /* +++ springs seeing wind ... n stuff depending on their orientation*/ /* note we don't use sb->mediafrict but use sb->aeroedge for magnitude of effect*/ if (sb->aeroedge) { - float vel[3],sp[3],pr[3],force[3]; - float f,windfactor = 0.25f; + float vel[3], sp[3], pr[3], force[3]; + float f, windfactor = 0.25f; /*see if we have wind*/ if (do_effector) { EffectedPoint epoint; - float speed[3]={0.0f,0.0f,0.0f}; + float speed[3]={0.0f, 0.0f, 0.0f}; float pos[3]; - mid_v3_v3v3(pos, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos); - mid_v3_v3v3(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec); + mid_v3_v3v3(pos, sb->bpoint[bs->v1].pos, sb->bpoint[bs->v2].pos); + mid_v3_v3v3(vel, sb->bpoint[bs->v1].vec, sb->bpoint[bs->v2].vec); pd_point_from_soft(scene, pos, vel, -1, &epoint); pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); - mul_v3_fl(speed,windfactor); + mul_v3_fl(speed, windfactor); add_v3_v3(vel, speed); } /* media in rest */ else { - add_v3_v3v3(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec); + add_v3_v3v3(vel, sb->bpoint[bs->v1].vec, sb->bpoint[bs->v2].vec); } f = normalize_v3(vel); f = -0.0001f*f*f*sb->aeroedge; /* (todo) add a nice angle dependent function done for now BUT */ /* still there could be some nice drag/lift function, but who needs it */ - sub_v3_v3v3(sp, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos); - project_v3_v3v3(pr,vel,sp); + sub_v3_v3v3(sp, sb->bpoint[bs->v1].pos, sb->bpoint[bs->v2].pos); + project_v3_v3v3(pr, vel, sp); sub_v3_v3(vel, pr); normalize_v3(vel); if (ob->softflag & OB_SB_AERO_ANGLE) { normalize_v3(sp); - Vec3PlusStVec(bs->ext_force,f*(1.0f-ABS(dot_v3v3(vel,sp))),vel); + Vec3PlusStVec(bs->ext_force, f*(1.0f-ABS(dot_v3v3(vel, sp))), vel); } else { - Vec3PlusStVec(bs->ext_force,f,vel); // to keep compatible with 2.45 release files + Vec3PlusStVec(bs->ext_force, f, vel); // to keep compatible with 2.45 release files } } /* --- springs seeing wind */ @@ -1648,12 +1648,12 @@ static void *exec_scan_for_ext_spring_forces(void *data) return NULL; } -static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow,int totsprings,int *UNUSED(ptr_to_break_func(void))) +static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow, int totsprings, int *UNUSED(ptr_to_break_func(void))) { ListBase *do_effector = NULL; ListBase threads; SB_thread_context *sb_threads; - int i, totthread,left,dec; + int i, totthread, left, dec; int lowsprings =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */ do_effector= pdInitEffectors(scene, ob, NULL, ob->soft->effector_weights); @@ -1710,27 +1710,27 @@ static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow, /* --- the spring external section*/ -static int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,float*cb,float*cc) +static int choose_winner(float*w, float* pos, float*a, float*b, float*c, float*ca, float*cb, float*cc) { - float mindist,cp; + float mindist, cp; int winner =1; - mindist = ABS(dot_v3v3(pos,a)); + mindist = ABS(dot_v3v3(pos, a)); - cp = ABS(dot_v3v3(pos,b)); + cp = ABS(dot_v3v3(pos, b)); if ( mindist < cp ) { mindist = cp; winner =2; } - cp = ABS(dot_v3v3(pos,c)); + cp = ABS(dot_v3v3(pos, c)); if (mindist < cp ) { mindist = cp; winner =3; } switch (winner) { - case 1: copy_v3_v3(w,ca); break; - case 2: copy_v3_v3(w,cb); break; - case 3: copy_v3_v3(w,cc); + case 1: copy_v3_v3(w, ca); break; + case 2: copy_v3_v3(w, cb); break; + case 3: copy_v3_v3(w, cc); } return(winner); } @@ -1739,12 +1739,12 @@ static int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,fl static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], float *damp, float force[3], unsigned int UNUSED(par_layer), struct Object *vertexowner, - float time,float vel[3], float *intrusion) + float time, float vel[3], float *intrusion) { Object *ob= NULL; GHash *hash; GHashIterator *ihash; - float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3],d_nvect[3], dv1[3],ve[3],avel[3]={0.0,0.0,0.0}, + float nv1[3], nv2[3], nv3[3], nv4[3], edge1[3], edge2[3], d_nvect[3], dv1[3], ve[3], avel[3]={0.0, 0.0, 0.0}, vv1[3], vv2[3], vv3[3], vv4[3], coledge[3]={0.0f, 0.0f, 0.0f}, mindistedge = 1000.0f, outerforceaccu[3], innerforceaccu[3], facedist, /* n_mag, */ /* UNUSED */ force_mag_norm, minx, miny, minz, maxx, maxy, maxz, @@ -1827,11 +1827,11 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], if (mvert) { - copy_v3_v3(nv1,mvert[mface->v1].co); - copy_v3_v3(nv2,mvert[mface->v2].co); - copy_v3_v3(nv3,mvert[mface->v3].co); + copy_v3_v3(nv1, mvert[mface->v1].co); + copy_v3_v3(nv2, mvert[mface->v2].co); + copy_v3_v3(nv3, mvert[mface->v3].co); if (mface->v4) { - copy_v3_v3(nv4,mvert[mface->v4].co); + copy_v3_v3(nv4, mvert[mface->v4].co); } if (mprevvert) { @@ -1841,25 +1841,25 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], since the AABB reduced propabitlty to get here drasticallly it might be a nice tradeof CPU <--> memory */ - sub_v3_v3v3(vv1,nv1,mprevvert[mface->v1].co); - sub_v3_v3v3(vv2,nv2,mprevvert[mface->v2].co); - sub_v3_v3v3(vv3,nv3,mprevvert[mface->v3].co); + sub_v3_v3v3(vv1, nv1, mprevvert[mface->v1].co); + sub_v3_v3v3(vv2, nv2, mprevvert[mface->v2].co); + sub_v3_v3v3(vv3, nv3, mprevvert[mface->v3].co); if (mface->v4) { - sub_v3_v3v3(vv4,nv4,mprevvert[mface->v4].co); + sub_v3_v3v3(vv4, nv4, mprevvert[mface->v4].co); } - mul_v3_fl(nv1,time); - Vec3PlusStVec(nv1,(1.0f-time),mprevvert[mface->v1].co); + mul_v3_fl(nv1, time); + Vec3PlusStVec(nv1, (1.0f-time), mprevvert[mface->v1].co); - mul_v3_fl(nv2,time); - Vec3PlusStVec(nv2,(1.0f-time),mprevvert[mface->v2].co); + mul_v3_fl(nv2, time); + Vec3PlusStVec(nv2, (1.0f-time), mprevvert[mface->v2].co); - mul_v3_fl(nv3,time); - Vec3PlusStVec(nv3,(1.0f-time),mprevvert[mface->v3].co); + mul_v3_fl(nv3, time); + Vec3PlusStVec(nv3, (1.0f-time), mprevvert[mface->v3].co); if (mface->v4) { - mul_v3_fl(nv4,time); - Vec3PlusStVec(nv4,(1.0f-time),mprevvert[mface->v4].co); + mul_v3_fl(nv4, time); + Vec3PlusStVec(nv4, (1.0f-time), mprevvert[mface->v4].co); } } } @@ -1867,11 +1867,11 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], /* switch origin to be nv2*/ sub_v3_v3v3(edge1, nv1, nv2); sub_v3_v3v3(edge2, nv3, nv2); - sub_v3_v3v3(dv1,opco,nv2); /* abuse dv1 to have vertex in question at *origin* of triangle */ + sub_v3_v3v3(dv1, opco, nv2); /* abuse dv1 to have vertex in question at *origin* of triangle */ cross_v3_v3v3(d_nvect, edge2, edge1); /* n_mag = */ /* UNUSED */ normalize_v3(d_nvect); - facedist = dot_v3v3(dv1,d_nvect); + facedist = dot_v3v3(dv1, d_nvect); // so rules are // @@ -1883,16 +1883,16 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], *damp=ob->pd->pdef_sbdamp; if (facedist > 0.0f) { *damp *= (1.0f - facedist/outerfacethickness); - Vec3PlusStVec(outerforceaccu,force_mag_norm,d_nvect); + Vec3PlusStVec(outerforceaccu, force_mag_norm, d_nvect); deflected = 3; } else { - Vec3PlusStVec(innerforceaccu,force_mag_norm,d_nvect); + Vec3PlusStVec(innerforceaccu, force_mag_norm, d_nvect); if (deflected < 2) deflected = 2; } if ((mprevvert) && (*damp > 0.0f)) { - choose_winner(ve,opco,nv1,nv2,nv3,vv1,vv2,vv3); + choose_winner(ve, opco, nv1, nv2, nv3, vv1, vv2, vv3); add_v3_v3(avel, ve); cavel ++; } @@ -1904,11 +1904,11 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], /* switch origin to be nv4 */ sub_v3_v3v3(edge1, nv3, nv4); sub_v3_v3v3(edge2, nv1, nv4); - sub_v3_v3v3(dv1,opco,nv4); /* abuse dv1 to have vertex in question at *origin* of triangle */ + sub_v3_v3v3(dv1, opco, nv4); /* abuse dv1 to have vertex in question at *origin* of triangle */ cross_v3_v3v3(d_nvect, edge2, edge1); /* n_mag = */ /* UNUSED */ normalize_v3(d_nvect); - facedist = dot_v3v3(dv1,d_nvect); + facedist = dot_v3v3(dv1, d_nvect); if ((facedist > innerfacethickness) && (facedist < outerfacethickness)) { if (isect_point_tri_prism_v3(opco, nv1, nv3, nv4) ) { @@ -1918,17 +1918,17 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], *damp=ob->pd->pdef_sbdamp; if (facedist > 0.0f) { *damp *= (1.0f - facedist/outerfacethickness); - Vec3PlusStVec(outerforceaccu,force_mag_norm,d_nvect); + Vec3PlusStVec(outerforceaccu, force_mag_norm, d_nvect); deflected = 3; } else { - Vec3PlusStVec(innerforceaccu,force_mag_norm,d_nvect); + Vec3PlusStVec(innerforceaccu, force_mag_norm, d_nvect); if (deflected < 2) deflected = 2; } if ((mprevvert) && (*damp > 0.0f)) { - choose_winner(ve,opco,nv1,nv3,nv4,vv1,vv3,vv4); + choose_winner(ve, opco, nv1, nv3, nv4, vv1, vv3, vv4); add_v3_v3(avel, ve); cavel ++; } @@ -1942,46 +1942,46 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], float dist; closest_to_line_segment_v3(ve, opco, nv1, nv2); - sub_v3_v3v3(ve,opco,ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { - copy_v3_v3(coledge,ve); + copy_v3_v3(coledge, ve); mindistedge = dist, deflected=1; } closest_to_line_segment_v3(ve, opco, nv2, nv3); - sub_v3_v3v3(ve,opco,ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { - copy_v3_v3(coledge,ve); + copy_v3_v3(coledge, ve); mindistedge = dist, deflected=1; } closest_to_line_segment_v3(ve, opco, nv3, nv1); - sub_v3_v3v3(ve,opco,ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { - copy_v3_v3(coledge,ve); + copy_v3_v3(coledge, ve); mindistedge = dist, deflected=1; } if (mface->v4) { /* quad */ closest_to_line_segment_v3(ve, opco, nv3, nv4); - sub_v3_v3v3(ve,opco,ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { - copy_v3_v3(coledge,ve); + copy_v3_v3(coledge, ve); mindistedge = dist, deflected=1; } closest_to_line_segment_v3(ve, opco, nv1, nv4); - sub_v3_v3v3(ve,opco,ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { - copy_v3_v3(coledge,ve); + copy_v3_v3(coledge, ve); mindistedge = dist, deflected=1; } @@ -2002,7 +2002,7 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], force_mag_norm =(float)exp(-ee*mindistedge); if (mindistedge > outerfacethickness*ff) force_mag_norm =(float)force_mag_norm*fa*(mindistedge - outerfacethickness)*(mindistedge - outerfacethickness); - Vec3PlusStVec(force,force_mag_norm,coledge); + Vec3PlusStVec(force, force_mag_norm, coledge); *damp=ob->pd->pdef_sbdamp; if (mindistedge > 0.0f) { *damp *= (1.0f - mindistedge/outerfacethickness); @@ -2017,8 +2017,8 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], } BLI_ghashIterator_free(ihash); - if (cavel) mul_v3_fl(avel,1.0f/(float)cavel); - copy_v3_v3(vel,avel); + if (cavel) mul_v3_fl(avel, 1.0f/(float)cavel); + copy_v3_v3(vel, avel); if (ci) *intrusion /= ci; if (deflected) { normalize_v3_v3(facenormal, force); @@ -2028,34 +2028,34 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], /* sandbox to plug in various deflection algos */ -static int sb_deflect_face(Object *ob,float *actpos,float *facenormal,float *force,float *cf,float time,float *vel,float *intrusion) +static int sb_deflect_face(Object *ob, float *actpos, float *facenormal, float *force, float *cf, float time, float *vel, float *intrusion) { float s_actpos[3]; int deflected; - copy_v3_v3(s_actpos,actpos); - deflected= sb_detect_vertex_collisionCached(s_actpos, facenormal, cf, force , ob->lay, ob,time,vel,intrusion); - //deflected= sb_detect_vertex_collisionCachedEx(s_actpos, facenormal, cf, force , ob->lay, ob,time,vel,intrusion); + copy_v3_v3(s_actpos, actpos); + deflected= sb_detect_vertex_collisionCached(s_actpos, facenormal, cf, force, ob->lay, ob, time, vel, intrusion); + //deflected= sb_detect_vertex_collisionCachedEx(s_actpos, facenormal, cf, force, ob->lay, ob, time, vel, intrusion); return(deflected); } /* hiding this for now .. but the jacobian may pop up on other tasks .. so i'd like to keep it -static void dfdx_spring(int ia, int ic, int op, float dir[3],float L,float len,float factor) +static void dfdx_spring(int ia, int ic, int op, float dir[3], float L, float len, float factor) { - float m,delta_ij; - int i ,j; + float m, delta_ij; + int i, j; if (L < len) { for (i=0;i<3;i++) for (j=0;j<3;j++) { delta_ij = (i==j ? (1.0f): (0.0f)); m=factor*(dir[i]*dir[j] + (1-L/len)*(delta_ij - dir[i]*dir[j])); - nlMatrixAdd(ia+i,op+ic+j,m); + nlMatrixAdd(ia+i, op+ic+j, m); } } else { for (i=0;i<3;i++) for (j=0;j<3;j++) { m=factor*dir[i]*dir[j]; - nlMatrixAdd(ia+i,op+ic+j,m); + nlMatrixAdd(ia+i, op+ic+j, m); } } } @@ -2064,24 +2064,24 @@ static void dfdx_spring(int ia, int ic, int op, float dir[3],float L,float len,f static void dfdx_goal(int ia, int ic, int op, float factor) { int i; - for (i=0;i<3;i++) nlMatrixAdd(ia+i,op+ic+i,factor); + for (i=0;i<3;i++) nlMatrixAdd(ia+i, op+ic+i, factor); } -static void dfdv_goal(int ia, int ic,float factor) +static void dfdv_goal(int ia, int ic, float factor) { int i; - for (i=0;i<3;i++) nlMatrixAdd(ia+i,ic+i,factor); + for (i=0;i<3;i++) nlMatrixAdd(ia+i, ic+i, factor); } */ -static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float UNUSED(forcetime), int nl_flags) +static void sb_spring_force(Object *ob, int bpi, BodySpring *bs, float iks, float UNUSED(forcetime), int nl_flags) { SoftBody *sb= ob->soft; /* is supposed to be there */ - BodyPoint *bp1,*bp2; + BodyPoint *bp1, *bp2; - float dir[3],dvel[3]; - float distance,forcefactor,kd,absvel,projvel,kw; + float dir[3], dvel[3]; + float distance, forcefactor, kd, absvel, projvel, kw; #if 0 /* UNUSED */ - int ia,ic; + int ia, ic; #endif /* prepare depending on which side of the spring we are on */ if (bpi == bs->v1) { @@ -2108,7 +2108,7 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float UN } /* do bp1 <--> bp2 elastic */ - sub_v3_v3v3(dir,bp1->pos,bp2->pos); + sub_v3_v3v3(dir, bp1->pos, bp2->pos); distance = normalize_v3(dir); if (bs->len < distance) iks = 1.0f/(1.0f-sb->inspring)-1.0f ;/* inner spring constants function */ @@ -2138,15 +2138,15 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float UN } - Vec3PlusStVec(bp1->force,(bs->len - distance)*forcefactor,dir); + Vec3PlusStVec(bp1->force, (bs->len - distance)*forcefactor, dir); /* do bp1 <--> bp2 viscous */ - sub_v3_v3v3(dvel,bp1->vec,bp2->vec); + sub_v3_v3v3(dvel, bp1->vec, bp2->vec); kd = sb->infrict * sb_fric_force_scale(ob); absvel = normalize_v3(dvel); - projvel = dot_v3v3(dir,dvel); + projvel = dot_v3v3(dir, dvel); kd *= absvel * projvel; - Vec3PlusStVec(bp1->force,-kd,dir); + Vec3PlusStVec(bp1->force, -kd, dir); /* do jacobian stuff if needed */ if (nl_flags & NLF_BUILD) { @@ -2154,14 +2154,14 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float UN //float mvel = -forcetime*kd; //float mpos = -forcetime*forcefactor; /* depending on my pos */ - // dfdx_spring(ia,ia,op,dir,bs->len,distance,-mpos); + // dfdx_spring(ia, ia, op, dir, bs->len, distance, -mpos); /* depending on my vel */ - // dfdv_goal(ia,ia,mvel); // well that ignores geometie + // dfdv_goal(ia, ia, mvel); // well that ignores geometie if (bp2->goal < SOFTGOALSNAP) { /* ommit this bp when it snaps */ /* depending on other pos */ - // dfdx_spring(ia,ic,op,dir,bs->len,distance,mpos); + // dfdx_spring(ia, ic, op, dir, bs->len, distance, mpos); /* depending on other vel */ - // dfdv_goal(ia,ia,-mvel); // well that ignores geometie + // dfdv_goal(ia, ia, -mvel); // well that ignores geometie } } } @@ -2170,10 +2170,10 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float UN /* since this is definitely the most CPU consuming task here .. try to spread it */ /* core function _softbody_calc_forces_slice_in_a_thread */ /* result is int to be able to flag user break */ -static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, float forcetime, float timenow,int ifirst,int ilast,int *UNUSED(ptr_to_break_func(void)),ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor) +static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, float forcetime, float timenow, int ifirst, int ilast, int *UNUSED(ptr_to_break_func(void)), ListBase *do_effector, int do_deflector, float fieldfactor, float windfactor) { float iks; - int bb,do_selfcollision,do_springcollision,do_aero; + int bb, do_selfcollision, do_springcollision, do_aero; int number_of_points_here = ilast - ifirst; SoftBody *sb= ob->soft; /* is supposed to be there */ BodyPoint *bp; @@ -2210,8 +2210,8 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo int attached; BodyPoint *obp; BodySpring *bs; - int c,b; - float velcenter[3],dvel[3],def[3]; + int c, b; + float velcenter[3], dvel[3], def[3]; float distance; float compare; float bstune = sb->ballstiff; @@ -2236,42 +2236,42 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo float f = bstune / (distance) + bstune / (compare * compare) * distance - 2.0f * bstune / compare; mid_v3_v3v3(velcenter, bp->vec, obp->vec); - sub_v3_v3v3(dvel,velcenter,bp->vec); - mul_v3_fl(dvel,_final_mass(ob,bp)); + sub_v3_v3v3(dvel, velcenter, bp->vec); + mul_v3_fl(dvel, _final_mass(ob, bp)); - Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); - Vec3PlusStVec(bp->force,sb->balldamp,dvel); + Vec3PlusStVec(bp->force, f*(1.0f-sb->balldamp), def); + Vec3PlusStVec(bp->force, sb->balldamp, dvel); - /* exploit force(a,b) == -force(b,a) part2/2 */ - sub_v3_v3v3(dvel,velcenter,obp->vec); - mul_v3_fl(dvel,_final_mass(ob,bp)); + /* exploit force(a, b) == -force(b, a) part2/2 */ + sub_v3_v3v3(dvel, velcenter, obp->vec); + mul_v3_fl(dvel, _final_mass(ob, bp)); - Vec3PlusStVec(obp->force,sb->balldamp,dvel); - Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); + Vec3PlusStVec(obp->force, sb->balldamp, dvel); + Vec3PlusStVec(obp->force, -f*(1.0f-sb->balldamp), def); } } } } /* naive ball self collision done */ - if (_final_goal(ob,bp) < SOFTGOALSNAP) { /* ommit this bp when it snaps */ + if (_final_goal(ob, bp) < SOFTGOALSNAP) { /* ommit this bp when it snaps */ float auxvect[3]; float velgoal[3]; /* do goal stuff */ if (ob->softflag & OB_SB_GOAL) { /* true elastic goal */ - float ks,kd; - sub_v3_v3v3(auxvect,bp->pos,bp->origT); + float ks, kd; + sub_v3_v3v3(auxvect, bp->pos, bp->origT); ks = 1.0f / (1.0f - _final_goal(ob, bp) * sb->goalspring) - 1.0f; bp->force[0]+= -ks*(auxvect[0]); bp->force[1]+= -ks*(auxvect[1]); bp->force[2]+= -ks*(auxvect[2]); /* calulate damping forces generated by goals*/ - sub_v3_v3v3(velgoal,bp->origS, bp->origE); + sub_v3_v3v3(velgoal, bp->origS, bp->origE); kd = sb->goalfrict * sb_fric_force_scale(ob); - add_v3_v3v3(auxvect,velgoal,bp->vec); + add_v3_v3v3(auxvect, velgoal, bp->vec); if (forcetime > 0.0f) { /* make sure friction does not become rocket motor on time reversal */ bp->force[0]-= kd * (auxvect[0]); @@ -2290,7 +2290,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo if (sb && scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) { float gravity[3]; copy_v3_v3(gravity, scene->physics_settings.gravity); - mul_v3_fl(gravity, sb_grav_force_scale(ob)*_final_mass(ob,bp)*sb->effector_weights->global_gravity); /* individual mass of node here */ + mul_v3_fl(gravity, sb_grav_force_scale(ob)*_final_mass(ob, bp)*sb->effector_weights->global_gravity); /* individual mass of node here */ add_v3_v3(bp->force, gravity); } @@ -2305,7 +2305,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); /* apply forcefield*/ - mul_v3_fl(force,fieldfactor* eval_sb_fric_force_scale); + mul_v3_fl(force, fieldfactor* eval_sb_fric_force_scale); add_v3_v3(bp->force, force); /* BP friction in moving media */ @@ -2330,20 +2330,20 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo bp->choke2 = 0.0f; bp->loc_flag &= ~SBF_DOFUZZY; if (do_deflector && !(bp->loc_flag & SBF_OUTOFCOLLISION) ) { - float cfforce[3],defforce[3] ={0.0f,0.0f,0.0f}, vel[3] = {0.0f,0.0f,0.0f}, facenormal[3], cf = 1.0f,intrusion; + float cfforce[3], defforce[3] ={0.0f, 0.0f, 0.0f}, vel[3] = {0.0f, 0.0f, 0.0f}, facenormal[3], cf = 1.0f, intrusion; float kd = 1.0f; - if (sb_deflect_face(ob,bp->pos,facenormal,defforce,&cf,timenow,vel,&intrusion)) { + if (sb_deflect_face(ob, bp->pos, facenormal, defforce, &cf, timenow, vel, &intrusion)) { if (intrusion < 0.0f) { sb->scratch->flag |= SBF_DOFUZZY; bp->loc_flag |= SBF_DOFUZZY; bp->choke = sb->choke*0.01f; } - sub_v3_v3v3(cfforce,bp->vec,vel); - Vec3PlusStVec(bp->force,-cf*50.0f,cfforce); + sub_v3_v3v3(cfforce, bp->vec, vel); + Vec3PlusStVec(bp->force, -cf*50.0f, cfforce); - Vec3PlusStVec(bp->force,kd,defforce); + Vec3PlusStVec(bp->force, kd, defforce); } } @@ -2363,8 +2363,8 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo bp->choke = bs->cf; } - // sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float forcetime,int nl_flags) - sb_spring_force(ob,ilast-bb,bs,iks,forcetime,0); + // sb_spring_force(Object *ob, int bpi, BodySpring *bs, float iks, float forcetime, int nl_flags) + sb_spring_force(ob, ilast-bb, bs, iks, forcetime, 0); }/* loop springs */ }/* existing spring list */ }/*any edges*/ @@ -2377,15 +2377,15 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo static void *exec_softbody_calc_forces(void *data) { SB_thread_context *pctx = (SB_thread_context*)data; - _softbody_calc_forces_slice_in_a_thread(pctx->scene, pctx->ob, pctx->forcetime, pctx->timenow, pctx->ifirst, pctx->ilast, NULL, pctx->do_effector,pctx->do_deflector,pctx->fieldfactor,pctx->windfactor); + _softbody_calc_forces_slice_in_a_thread(pctx->scene, pctx->ob, pctx->forcetime, pctx->timenow, pctx->ifirst, pctx->ilast, NULL, pctx->do_effector, pctx->do_deflector, pctx->fieldfactor, pctx->windfactor); return NULL; } -static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float timenow,int totpoint,int *UNUSED(ptr_to_break_func(void)),struct ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor) +static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float timenow, int totpoint, int *UNUSED(ptr_to_break_func(void)), struct ListBase *do_effector, int do_deflector, float fieldfactor, float windfactor) { ListBase threads; SB_thread_context *sb_threads; - int i, totthread,left,dec; + int i, totthread, left, dec; int lowpoints =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */ /* figure the number of threads while preventing pretty pointless threading overhead */ @@ -2398,7 +2398,7 @@ static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float t totthread--; } - /* printf("sb_cf_threads_run spawning %d threads\n",totthread); */ + /* printf("sb_cf_threads_run spawning %d threads\n", totthread); */ sb_threads= MEM_callocN(sizeof(SB_thread_context)*totthread, "SBThread"); memset(sb_threads, 0, sizeof(SB_thread_context)*totthread); @@ -2450,7 +2450,7 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl /* float gravity; */ /* UNUSED */ /* float iks; */ float fieldfactor = -1.0f, windfactor = 0.25; - int do_deflector /*,do_selfcollision*/ ,do_springcollision,do_aero; + int do_deflector /*, do_selfcollision*/, do_springcollision, do_aero; /* gravity = sb->grav * sb_grav_force_scale(ob); */ /* UNUSED */ @@ -2464,20 +2464,20 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl /* bproot= sb->bpoint; */ /* need this for proper spring addressing */ /* UNUSED */ if (do_springcollision || do_aero) - sb_sfesf_threads_run(scene, ob, timenow,sb->totspring,NULL); + sb_sfesf_threads_run(scene, ob, timenow, sb->totspring, NULL); /* after spring scan because it uses Effoctors too */ do_effector= pdInitEffectors(scene, ob, NULL, sb->effector_weights); if (do_deflector) { float defforce[3]; - do_deflector = sb_detect_aabb_collisionCached(defforce,ob->lay,ob,timenow); + do_deflector = sb_detect_aabb_collisionCached(defforce, ob->lay, ob, timenow); } sb_cf_threads_run(scene, ob, forcetime, timenow, sb->totpoint, NULL, do_effector, do_deflector, fieldfactor, windfactor); /* finally add forces caused by face collision */ - if (ob->softflag & OB_SB_FACECOLL) scan_for_ext_face_forces(ob,timenow); + if (ob->softflag & OB_SB_FACECOLL) scan_for_ext_face_forces(ob, timenow); /* finish matrix and solve */ pdEndEffectors(&do_effector); @@ -2510,10 +2510,10 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* BodyPoint *bproot; */ /* UNUSED */ BodySpring *bs; ListBase *do_effector = NULL; - float iks, ks, kd, gravity[3] = {0.0f,0.0f,0.0f}; + float iks, ks, kd, gravity[3] = {0.0f, 0.0f, 0.0f}; float fieldfactor = -1.0f, windfactor = 0.25f; float tune = sb->ballstiff; - int a, b, do_deflector,do_selfcollision,do_springcollision,do_aero; + int a, b, do_deflector, do_selfcollision, do_springcollision, do_aero; /* jacobian @@ -2546,7 +2546,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa if (do_deflector) { float defforce[3]; - do_deflector = sb_detect_aabb_collisionCached(defforce,ob->lay,ob,timenow); + do_deflector = sb_detect_aabb_collisionCached(defforce, ob->lay, ob, timenow); } for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { @@ -2557,17 +2557,17 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //int op =3*sb->totpoint; /* dF/dV = v */ /* jacobioan - nlMatrixAdd(op+ia,ia,-forcetime); - nlMatrixAdd(op+ia+1,ia+1,-forcetime); - nlMatrixAdd(op+ia+2,ia+2,-forcetime); + nlMatrixAdd(op+ia, ia, -forcetime); + nlMatrixAdd(op+ia+1, ia+1, -forcetime); + nlMatrixAdd(op+ia+2, ia+2, -forcetime); - nlMatrixAdd(ia,ia,1); - nlMatrixAdd(ia+1,ia+1,1); - nlMatrixAdd(ia+2,ia+2,1); + nlMatrixAdd(ia, ia, 1); + nlMatrixAdd(ia+1, ia+1, 1); + nlMatrixAdd(ia+2, ia+2, 1); - nlMatrixAdd(op+ia,op+ia,1); - nlMatrixAdd(op+ia+1,op+ia+1,1); - nlMatrixAdd(op+ia+2,op+ia+2,1); + nlMatrixAdd(op+ia, op+ia, 1); + nlMatrixAdd(op+ia+1, op+ia+1, 1); + nlMatrixAdd(op+ia+2, op+ia+2, 1); */ @@ -2578,8 +2578,8 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa if (do_selfcollision) { int attached; BodyPoint *obp; - int c,b; - float velcenter[3],dvel[3],def[3]; + int c, b; + float velcenter[3], dvel[3], def[3]; float distance; float compare; @@ -2608,11 +2608,11 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa float f = tune / (distance) + tune / (compare * compare) * distance - 2.0f * tune/compare; mid_v3_v3v3(velcenter, bp->vec, obp->vec); - sub_v3_v3v3(dvel,velcenter,bp->vec); - mul_v3_fl(dvel,_final_mass(ob,bp)); + sub_v3_v3v3(dvel, velcenter, bp->vec); + mul_v3_fl(dvel, _final_mass(ob, bp)); - Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); - Vec3PlusStVec(bp->force,sb->balldamp,dvel); + Vec3PlusStVec(bp->force, f*(1.0f-sb->balldamp), def); + Vec3PlusStVec(bp->force, sb->balldamp, dvel); if (nl_flags & NLF_BUILD) { //int ia =3*(sb->totpoint-a); @@ -2621,11 +2621,11 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //float mvel = forcetime*sb->nodemass*sb->balldamp; //float mpos = forcetime*tune*(1.0f-sb->balldamp); /*some quick and dirty entries to the jacobian*/ - //dfdx_goal(ia,ia,op,mpos); - //dfdv_goal(ia,ia,mvel); - /* exploit force(a,b) == -force(b,a) part1/2 */ - //dfdx_goal(ic,ic,op,mpos); - //dfdv_goal(ic,ic,mvel); + //dfdx_goal(ia, ia, op, mpos); + //dfdv_goal(ia, ia, mvel); + /* exploit force(a, b) == -force(b, a) part1/2 */ + //dfdx_goal(ic, ic, op, mpos); + //dfdv_goal(ic, ic, mvel); /*TODO sit down an X-out the true jacobian entries*/ @@ -2638,12 +2638,12 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa */ } - /* exploit force(a,b) == -force(b,a) part2/2 */ - sub_v3_v3v3(dvel,velcenter,obp->vec); - mul_v3_fl(dvel,(_final_mass(ob,bp)+_final_mass(ob,obp))/2.0f); + /* exploit force(a, b) == -force(b, a) part2/2 */ + sub_v3_v3v3(dvel, velcenter, obp->vec); + mul_v3_fl(dvel, (_final_mass(ob, bp)+_final_mass(ob, obp))/2.0f); - Vec3PlusStVec(obp->force,sb->balldamp,dvel); - Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); + Vec3PlusStVec(obp->force, sb->balldamp, dvel); + Vec3PlusStVec(obp->force, -f*(1.0f-sb->balldamp), def); } @@ -2652,14 +2652,14 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa } /* naive ball self collision done */ - if (_final_goal(ob,bp) < SOFTGOALSNAP) { /* ommit this bp when it snaps */ + if (_final_goal(ob, bp) < SOFTGOALSNAP) { /* ommit this bp when it snaps */ float auxvect[3]; float velgoal[3]; /* do goal stuff */ if (ob->softflag & OB_SB_GOAL) { /* true elastic goal */ - sub_v3_v3v3(auxvect,bp->pos,bp->origT); + sub_v3_v3v3(auxvect, bp->pos, bp->origT); ks = 1.0f / (1.0f- _final_goal(ob, bp) * sb->goalspring) - 1.0f; bp->force[0]+= -ks*(auxvect[0]); bp->force[1]+= -ks*(auxvect[1]); @@ -2669,14 +2669,14 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //int ia =3*(sb->totpoint-a); //int op =3*(sb->totpoint); /* depending on my pos */ - //dfdx_goal(ia,ia,op,ks*forcetime); + //dfdx_goal(ia, ia, op, ks*forcetime); } /* calulate damping forces generated by goals*/ - sub_v3_v3v3(velgoal,bp->origS, bp->origE); + sub_v3_v3v3(velgoal, bp->origS, bp->origE); kd = sb->goalfrict * sb_fric_force_scale(ob); - add_v3_v3v3(auxvect,velgoal,bp->vec); + add_v3_v3v3(auxvect, velgoal, bp->vec); if (forcetime > 0.0f) { /* make sure friction does not become rocket motor on time reversal */ bp->force[0]-= kd * (auxvect[0]); @@ -2686,7 +2686,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //int ia =3*(sb->totpoint-a); normalize_v3(auxvect); /* depending on my vel */ - //dfdv_goal(ia,ia,kd*forcetime); + //dfdv_goal(ia, ia, kd*forcetime); } } @@ -2700,7 +2700,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* gravitation */ - madd_v3_v3fl(bp->force, gravity, _final_mass(ob,bp)); /* individual mass of node here */ + madd_v3_v3fl(bp->force, gravity, _final_mass(ob, bp)); /* individual mass of node here */ /* particle field & vortex */ @@ -2713,7 +2713,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa pdDoEffectors(do_effector, NULL, sb->effector_weights, &epoint, force, speed); /* apply forcefield*/ - mul_v3_fl(force,fieldfactor* eval_sb_fric_force_scale); + mul_v3_fl(force, fieldfactor* eval_sb_fric_force_scale); add_v3_v3(bp->force, force); /* BP friction in moving media */ @@ -2736,9 +2736,9 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa //int ia =3*(sb->totpoint-a); /* da/dv = */ - // nlMatrixAdd(ia,ia,forcetime*kd); - // nlMatrixAdd(ia+1,ia+1,forcetime*kd); - // nlMatrixAdd(ia+2,ia+2,forcetime*kd); + // nlMatrixAdd(ia, ia, forcetime*kd); + // nlMatrixAdd(ia+1, ia+1, forcetime*kd); + // nlMatrixAdd(ia+2, ia+2, forcetime*kd); } } @@ -2747,10 +2747,10 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa bp->choke2 = 0.0f; bp->loc_flag &= ~SBF_DOFUZZY; if (do_deflector) { - float cfforce[3],defforce[3] ={0.0f,0.0f,0.0f}, vel[3] = {0.0f,0.0f,0.0f}, facenormal[3], cf = 1.0f,intrusion; + float cfforce[3], defforce[3] ={0.0f, 0.0f, 0.0f}, vel[3] = {0.0f, 0.0f, 0.0f}, facenormal[3], cf = 1.0f, intrusion; kd = 1.0f; - if (sb_deflect_face(ob,bp->pos,facenormal,defforce,&cf,timenow,vel,&intrusion)) { + if (sb_deflect_face(ob, bp->pos, facenormal, defforce, &cf, timenow, vel, &intrusion)) { if ((!nl_flags)&&(intrusion < 0.0f)) { if (G.rt & 0x01) { // 17 we did check for bit 0x10 before /*fixing bug [17428] this forces adaptive step size to tiny steps @@ -2763,12 +2763,12 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa in heun step No1 and leave the heun step No2 adapt to it so we kind of introduced a implicit solver for this case */ - Vec3PlusStVec(bp->pos,-intrusion,facenormal); + Vec3PlusStVec(bp->pos, -intrusion, facenormal); } else { - sub_v3_v3v3(cfforce,bp->vec,vel); - Vec3PlusStVec(bp->force,-cf*50.0f,cfforce); + sub_v3_v3v3(cfforce, bp->vec, vel); + Vec3PlusStVec(bp->force, -cf*50.0f, cfforce); } @@ -2777,15 +2777,15 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa bp->choke = sb->choke*0.01f; } else { - sub_v3_v3v3(cfforce,bp->vec,vel); - Vec3PlusStVec(bp->force,-cf*50.0f,cfforce); + sub_v3_v3v3(cfforce, bp->vec, vel); + Vec3PlusStVec(bp->force, -cf*50.0f, cfforce); } - Vec3PlusStVec(bp->force,kd,defforce); + Vec3PlusStVec(bp->force, kd, defforce); if (nl_flags & NLF_BUILD) { // int ia =3*(sb->totpoint-a); // int op =3*sb->totpoint; - //dfdx_goal(ia,ia,op,mpos); // don't do unless you know - //dfdv_goal(ia,ia,-cf); + //dfdx_goal(ia, ia, op, mpos); // don't do unless you know + //dfdv_goal(ia, ia, -cf); } @@ -2805,9 +2805,9 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa bp->choke = bs->cf; } - // sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float forcetime,int nl_flags) + // sb_spring_force(Object *ob, int bpi, BodySpring *bs, float iks, float forcetime, int nl_flags) // rather remove nl_falgs from code .. will make things a lot cleaner - sb_spring_force(ob,sb->totpoint-a,bs,iks,forcetime,0); + sb_spring_force(ob, sb->totpoint-a, bs, iks, forcetime, 0); }/* loop springs */ }/* existing spring list */ }/*any edges*/ @@ -2817,12 +2817,12 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* finally add forces caused by face collision */ - if (ob->softflag & OB_SB_FACECOLL) scan_for_ext_face_forces(ob,timenow); + if (ob->softflag & OB_SB_FACECOLL) scan_for_ext_face_forces(ob, timenow); /* finish matrix and solve */ #if (0) // remove onl linking for now .. still i am not sure .. the jacobian can be useful .. so keep that BM if (nl_flags & NLF_SOLVE) { - //double sct,sst=PIL_check_seconds_timer(); + //double sct, sst=PIL_check_seconds_timer(); for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { int iv =3*(sb->totpoint-a); int ip =3*(2*sb->totpoint-a); @@ -2847,30 +2847,30 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa /* for debug purpose .. anyhow cropping B vector looks like working */ if (G.rt ==32) for (a=2*sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - f=nlGetVariable(0,index); - printf("(%f ",f);index++; - f=nlGetVariable(0,index); - printf("%f ",f);index++; - f=nlGetVariable(0,index); - printf("%f)",f);index++; + f=nlGetVariable(0, index); + printf("(%f ", f);index++; + f=nlGetVariable(0, index); + printf("%f ", f);index++; + f=nlGetVariable(0, index); + printf("%f)", f);index++; } index =0; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdv[0] = f; index++; - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdv[1] = f; index++; - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdv[2] = f; index++; } /* for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdx[0] = f; index++; - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdx[1] = f; index++; - f=nlGetVariable(0,index); + f=nlGetVariable(0, index); bp->impdx[2] = f; index++; } */ @@ -2878,13 +2878,13 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa else { printf("Matrix inversion failed\n"); for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - copy_v3_v3(bp->impdv,bp->force); + copy_v3_v3(bp->impdv, bp->force); } } //sct=PIL_check_seconds_timer(); - //if (sct-sst > 0.01f) printf(" implicit solver time %f %s \r",sct-sst,ob->id.name); + //if (sct-sst > 0.01f) printf(" implicit solver time %f %s \r", sct-sst, ob->id.name); } /* cleanup */ #endif @@ -2896,13 +2896,13 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * { /* time evolution */ /* actually does an explicit euler step mode == 0 */ - /* or heun ~ 2nd order runge-kutta steps, mode 1,2 */ + /* or heun ~ 2nd order runge-kutta steps, mode 1, 2 */ SoftBody *sb= ob->soft; /* is supposed to be there */ BodyPoint *bp; - float dx[3]={0},dv[3],aabbmin[3],aabbmax[3],cm[3]={0.0f,0.0f,0.0f}; - float timeovermass/*,freezeloc=0.00001f,freezeforce=0.00000000001f*/; - float maxerrpos= 0.0f,maxerrvel = 0.0f; - int a,fuzzy=0; + float dx[3]={0}, dv[3], aabbmin[3], aabbmax[3], cm[3]={0.0f, 0.0f, 0.0f}; + float timeovermass/*, freezeloc=0.00001f, freezeforce=0.00000000001f*/; + float maxerrpos= 0.0f, maxerrvel = 0.0f; + int a, fuzzy=0; forcetime *= sb_time_scale(ob); @@ -2919,21 +2919,21 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { /* now we have individual masses */ /* claim a minimum mass for vertex */ - if (_final_mass(ob,bp) > 0.009999f) timeovermass = forcetime/_final_mass(ob,bp); + if (_final_mass(ob, bp) > 0.009999f) timeovermass = forcetime/_final_mass(ob, bp); else timeovermass = forcetime/0.009999f; - if (_final_goal(ob,bp) < SOFTGOALSNAP) { + if (_final_goal(ob, bp) < SOFTGOALSNAP) { /* this makes t~ = t */ - if (mid_flags & MID_PRESERVE) copy_v3_v3(dx,bp->vec); + if (mid_flags & MID_PRESERVE) copy_v3_v3(dx, bp->vec); /* so here is (v)' = a(cceleration) = sum(F_springs)/m + gravitation + some friction forces + more forces*/ /* the ( ... )' operator denotes derivate respective time */ /* the euler step for velocity then becomes */ /* v(t + dt) = v(t) + a(t) * dt */ - mul_v3_fl(bp->force,timeovermass);/* individual mass of node here */ + mul_v3_fl(bp->force, timeovermass);/* individual mass of node here */ /* some nasty if's to have heun in here too */ - copy_v3_v3(dv,bp->force); + copy_v3_v3(dv, bp->force); if (mode == 1) { copy_v3_v3(bp->prevvec, bp->vec); @@ -2946,80 +2946,80 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * bp->vec[1] = bp->prevvec[1] + 0.5f * (dv[1] + bp->prevdv[1]); bp->vec[2] = bp->prevvec[2] + 0.5f * (dv[2] + bp->prevdv[2]); /* compare euler to heun to estimate error for step sizing */ - maxerrvel = MAX2(maxerrvel,ABS(dv[0] - bp->prevdv[0])); - maxerrvel = MAX2(maxerrvel,ABS(dv[1] - bp->prevdv[1])); - maxerrvel = MAX2(maxerrvel,ABS(dv[2] - bp->prevdv[2])); + maxerrvel = MAX2(maxerrvel, ABS(dv[0] - bp->prevdv[0])); + maxerrvel = MAX2(maxerrvel, ABS(dv[1] - bp->prevdv[1])); + maxerrvel = MAX2(maxerrvel, ABS(dv[2] - bp->prevdv[2])); } else { add_v3_v3(bp->vec, bp->force); } /* this makes t~ = t+dt */ - if (!(mid_flags & MID_PRESERVE)) copy_v3_v3(dx,bp->vec); + if (!(mid_flags & MID_PRESERVE)) copy_v3_v3(dx, bp->vec); /* so here is (x)'= v(elocity) */ /* the euler step for location then becomes */ /* x(t + dt) = x(t) + v(t~) * dt */ - mul_v3_fl(dx,forcetime); + mul_v3_fl(dx, forcetime); /* the freezer coming sooner or later */ /* - if ((dot_v3v3(dx,dx)<freezeloc )&&(dot_v3v3(bp->force,bp->force)<freezeforce )) { + if ((dot_v3v3(dx, dx)<freezeloc )&&(dot_v3v3(bp->force, bp->force)<freezeforce )) { bp->frozen /=2; } else { - bp->frozen = MIN2(bp->frozen*1.05f,1.0f); + bp->frozen = MIN2(bp->frozen*1.05f, 1.0f); } - mul_v3_fl(dx,bp->frozen); + mul_v3_fl(dx, bp->frozen); */ /* again some nasty if's to have heun in here too */ if (mode ==1) { - copy_v3_v3(bp->prevpos,bp->pos); - copy_v3_v3(bp->prevdx ,dx); + copy_v3_v3(bp->prevpos, bp->pos); + copy_v3_v3(bp->prevdx, dx); } if (mode ==2) { bp->pos[0] = bp->prevpos[0] + 0.5f * ( dx[0] + bp->prevdx[0]); bp->pos[1] = bp->prevpos[1] + 0.5f * ( dx[1] + bp->prevdx[1]); bp->pos[2] = bp->prevpos[2] + 0.5f * ( dx[2] + bp->prevdx[2]); - maxerrpos = MAX2(maxerrpos,ABS(dx[0] - bp->prevdx[0])); - maxerrpos = MAX2(maxerrpos,ABS(dx[1] - bp->prevdx[1])); - maxerrpos = MAX2(maxerrpos,ABS(dx[2] - bp->prevdx[2])); - -/* bp->choke is set when we need to pull a vertex or edge out of the collider. - the collider object signals to get out by pushing hard. on the other hand - we don't want to end up in deep space so we add some <viscosity> - to balance that out */ + maxerrpos = MAX2(maxerrpos, ABS(dx[0] - bp->prevdx[0])); + maxerrpos = MAX2(maxerrpos, ABS(dx[1] - bp->prevdx[1])); + maxerrpos = MAX2(maxerrpos, ABS(dx[2] - bp->prevdx[2])); + + /* bp->choke is set when we need to pull a vertex or edge out of the collider. + * the collider object signals to get out by pushing hard. on the other hand + * we don't want to end up in deep space so we add some <viscosity> + * to balance that out */ if (bp->choke2 > 0.0f) { - mul_v3_fl(bp->vec,(1.0f - bp->choke2)); + mul_v3_fl(bp->vec, (1.0f - bp->choke2)); } if (bp->choke > 0.0f) { - mul_v3_fl(bp->vec,(1.0f - bp->choke)); + mul_v3_fl(bp->vec, (1.0f - bp->choke)); } } else { add_v3_v3(bp->pos, dx);} }/*snap*/ /* so while we are looping BPs anyway do statistics on the fly */ - aabbmin[0] = MIN2(aabbmin[0],bp->pos[0]); - aabbmin[1] = MIN2(aabbmin[1],bp->pos[1]); - aabbmin[2] = MIN2(aabbmin[2],bp->pos[2]); - aabbmax[0] = MAX2(aabbmax[0],bp->pos[0]); - aabbmax[1] = MAX2(aabbmax[1],bp->pos[1]); - aabbmax[2] = MAX2(aabbmax[2],bp->pos[2]); + aabbmin[0] = MIN2(aabbmin[0], bp->pos[0]); + aabbmin[1] = MIN2(aabbmin[1], bp->pos[1]); + aabbmin[2] = MIN2(aabbmin[2], bp->pos[2]); + aabbmax[0] = MAX2(aabbmax[0], bp->pos[0]); + aabbmax[1] = MAX2(aabbmax[1], bp->pos[1]); + aabbmax[2] = MAX2(aabbmax[2], bp->pos[2]); if (bp->loc_flag & SBF_DOFUZZY) fuzzy =1; } /*for*/ - if (sb->totpoint) mul_v3_fl(cm,1.0f/sb->totpoint); + if (sb->totpoint) mul_v3_fl(cm, 1.0f/sb->totpoint); if (sb->scratch) { - copy_v3_v3(sb->scratch->aabbmin,aabbmin); - copy_v3_v3(sb->scratch->aabbmax,aabbmax); + copy_v3_v3(sb->scratch->aabbmin, aabbmin); + copy_v3_v3(sb->scratch->aabbmax, aabbmax); } if (err) { /* so step size will be controlled by biggest difference in slope */ if (sb->solverflags & SBSO_OLDERR) - *err = MAX2(maxerrpos,maxerrvel); + *err = MAX2(maxerrpos, maxerrvel); else *err = maxerrpos; - //printf("EP %f EV %f\n",maxerrpos,maxerrvel); + //printf("EP %f EV %f\n", maxerrpos, maxerrvel); if (fuzzy) { *err /= sb->fuzzyness; } @@ -3047,19 +3047,19 @@ static void softbody_store_step(Object *ob) int a; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - copy_v3_v3(bp->prevvec,bp->vec); - copy_v3_v3(bp->prevpos,bp->pos); + copy_v3_v3(bp->prevvec, bp->vec); + copy_v3_v3(bp->prevpos, bp->pos); } } /* used by predictors and correctors */ -static void softbody_store_state(Object *ob,float *ppos,float *pvel) +static void softbody_store_state(Object *ob, float *ppos, float *pvel) { SoftBody *sb= ob->soft; /* is supposed to be there*/ BodyPoint *bp; int a; - float *pp=ppos,*pv=pvel; + float *pp=ppos, *pv=pvel; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { @@ -3072,42 +3072,42 @@ static void softbody_store_state(Object *ob,float *ppos,float *pvel) } /* used by predictors and correctors */ -static void softbody_retrieve_state(Object *ob,float *ppos,float *pvel) +static void softbody_retrieve_state(Object *ob, float *ppos, float *pvel) { SoftBody *sb= ob->soft; /* is supposed to be there*/ BodyPoint *bp; int a; - float *pp=ppos,*pv=pvel; + float *pp=ppos, *pv=pvel; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - copy_v3_v3(bp->vec,pv); + copy_v3_v3(bp->vec, pv); pv+=3; - copy_v3_v3(bp->pos,pp); + copy_v3_v3(bp->pos, pp); pp+=3; } } /* used by predictors and correctors */ -static void softbody_swap_state(Object *ob,float *ppos,float *pvel) +static void softbody_swap_state(Object *ob, float *ppos, float *pvel) { SoftBody *sb= ob->soft; /* is supposed to be there*/ BodyPoint *bp; int a; - float *pp=ppos,*pv=pvel; + float *pp=ppos, *pv=pvel; float temp[3]; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { copy_v3_v3(temp, bp->vec); - copy_v3_v3(bp->vec,pv); - copy_v3_v3(pv,temp); + copy_v3_v3(bp->vec, pv); + copy_v3_v3(pv, temp); pv+=3; copy_v3_v3(temp, bp->pos); - copy_v3_v3(bp->pos,pp); - copy_v3_v3(pp,temp); + copy_v3_v3(bp->pos, pp); + copy_v3_v3(pp, temp); pp+=3; } } @@ -3127,9 +3127,9 @@ static void softbody_apply_goalsnap(Object *ob) int a; for (a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { - if (_final_goal(ob,bp) >= SOFTGOALSNAP) { - copy_v3_v3(bp->prevpos,bp->pos); - copy_v3_v3(bp->pos,bp->origT); + if (_final_goal(ob, bp) >= SOFTGOALSNAP) { + copy_v3_v3(bp->prevpos, bp->pos); + copy_v3_v3(bp->pos, bp->origT); } } } @@ -3141,7 +3141,7 @@ static void apply_spring_memory(Object *ob) BodySpring *bs; BodyPoint *bp1, *bp2; int a; - float b,l,r; + float b, l, r; if (sb && sb->totspring) { b = sb->plastic; @@ -3149,7 +3149,7 @@ static void apply_spring_memory(Object *ob) bs = &sb->bspring[a]; bp1 =&sb->bpoint[bs->v1]; bp2 =&sb->bpoint[bs->v2]; - l = len_v3v3(bp1->pos,bp2->pos); + l = len_v3v3(bp1->pos, bp2->pos); r = bs->len/l; if (( r > 1.05f) || (r < 0.95f)) { bs->len = ((100.0f - b) * bs->len + b*l)/100.0f; @@ -3172,7 +3172,7 @@ static void interpolate_exciter(Object *ob, int timescale, int time) bp->origT[0] = bp->origS[0] + f*(bp->origE[0] - bp->origS[0]); bp->origT[1] = bp->origS[1] + f*(bp->origE[1] - bp->origS[1]); bp->origT[2] = bp->origS[2] + f*(bp->origE[2] - bp->origS[2]); - if (_final_goal(ob,bp) >= SOFTGOALSNAP) { + if (_final_goal(ob, bp) >= SOFTGOALSNAP) { bp->vec[0] = bp->origE[0] - bp->origS[0]; bp->vec[1] = bp->origE[1] - bp->origS[1]; bp->vec[2] = bp->origE[2] - bp->origS[2]; @@ -3268,7 +3268,9 @@ static void mesh_to_softbody(Scene *scene, Object *ob) BodyPoint *bp; BodySpring *bs; int a, totedge; - BKE_mesh_tessface_ensure(me); + + BKE_mesh_tessface_ensure(me); + if (ob->softflag & OB_SB_EDGES) totedge= me->totedge; else totedge= 0; @@ -3289,7 +3291,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob) if ((ob->softflag & OB_SB_GOAL) && sb->vertgroup) { /* even this is a deprecated evil hack */ /* I'd like to have it .. if (sb->namedVG_Goal[0]) */ - get_scalar_from_vertexgroup(ob, a,(short) (sb->vertgroup-1), &bp->goal); + get_scalar_from_vertexgroup(ob, a, (short) (sb->vertgroup-1), &bp->goal); /* do this always, regardless successfull read from vertex group */ /* this is where '2.5 every thing is animatable' goes wrong in the first place jow_go_for2_5 */ /* 1st coding action to take : move this to frame level */ @@ -3308,12 +3310,12 @@ static void mesh_to_softbody(Scene *scene, Object *ob) */ if (sb->namedVG_Mass[0]) { - int grp= defgroup_name_index (ob,sb->namedVG_Mass); - /* printf("VGN %s %d\n",sb->namedVG_Mass,grp); */ + int grp= defgroup_name_index (ob, sb->namedVG_Mass); + /* printf("VGN %s %d\n", sb->namedVG_Mass, grp); */ if (grp > -1) { - get_scalar_from_vertexgroup(ob, a,(short) (grp), &bp->mass); + get_scalar_from_vertexgroup(ob, a, (short) (grp), &bp->mass); /* 2.5 bp->mass = bp->mass * sb->nodemass; */ - /* printf("bp->mass %f\n",bp->mass); */ + /* printf("bp->mass %f\n", bp->mass); */ } } @@ -3321,11 +3323,11 @@ static void mesh_to_softbody(Scene *scene, Object *ob) bp->springweight = 1.0f; if (sb->namedVG_Spring_K[0]) { - int grp= defgroup_name_index (ob,sb->namedVG_Spring_K); - //printf("VGN %s %d\n",sb->namedVG_Spring_K,grp); + int grp= defgroup_name_index (ob, sb->namedVG_Spring_K); + //printf("VGN %s %d\n", sb->namedVG_Spring_K, grp); if (grp > -1) { - get_scalar_from_vertexgroup(ob, a,(short) (grp), &bp->springweight); - //printf("bp->springweight %f\n",bp->springweight); + get_scalar_from_vertexgroup(ob, a, (short) (grp), &bp->springweight); + //printf("bp->springweight %f\n", bp->springweight); } } @@ -3352,7 +3354,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob) build_bps_springlist(ob); /* scan for springs attached to bodypoints ONCE */ /* insert *other second order* springs if desired */ if (sb->secondspring > 0.0000001f) { - add_2nd_order_springs(ob,sb->secondspring); /* exploits the the first run of build_bps_springlist(ob);*/ + add_2nd_order_springs(ob, sb->secondspring); /* exploits the the first run of build_bps_springlist(ob);*/ build_bps_springlist(ob); /* yes we need to do it again*/ } springs_from_mesh(ob); /* write the 'rest'-length of the springs */ @@ -3373,8 +3375,8 @@ static void mesh_faces_to_scratch(Object *ob) int a; /* alloc and copy faces*/ - bodyface = sb->scratch->bodyface = MEM_mallocN(sizeof(BodyFace)*me->totface,"SB_body_Faces"); - //memcpy(sb->scratch->mface,me->mface,sizeof(MFace)*me->totface); + bodyface = sb->scratch->bodyface = MEM_mallocN(sizeof(BodyFace)*me->totface, "SB_body_Faces"); + //memcpy(sb->scratch->mface, me->mface, sizeof(MFace)*me->totface); mface = me->mface; for (a=0; a<me->totface; a++, mface++, bodyface++) { bodyface->v1 = mface->v1; @@ -3391,20 +3393,20 @@ static void reference_to_scratch(Object *ob) SoftBody *sb= ob->soft; ReferenceVert *rp; BodyPoint *bp; - float accu_pos[3] ={0.f,0.f,0.f}; + float accu_pos[3] ={0.f, 0.f, 0.f}; float accu_mass = 0.f; int a; - sb->scratch->Ref.ivert = MEM_mallocN(sizeof(ReferenceVert)*sb->totpoint,"SB_Reference"); + sb->scratch->Ref.ivert = MEM_mallocN(sizeof(ReferenceVert)*sb->totpoint, "SB_Reference"); bp= ob->soft->bpoint; rp= sb->scratch->Ref.ivert; for (a=0; a<sb->totpoint; a++, rp++, bp++) { - copy_v3_v3(rp->pos,bp->pos); + copy_v3_v3(rp->pos, bp->pos); add_v3_v3(accu_pos, bp->pos); - accu_mass += _final_mass(ob,bp); + accu_mass += _final_mass(ob, bp); } - mul_v3_fl(accu_pos,1.0f/accu_mass); - copy_v3_v3(sb->scratch->Ref.com,accu_pos); + mul_v3_fl(accu_pos, 1.0f/accu_mass); + copy_v3_v3(sb->scratch->Ref.com, accu_pos); /* printf("reference_to_scratch\n"); */ } @@ -3412,17 +3414,17 @@ static void reference_to_scratch(Object *ob) helper function to get proper spring length when object is rescaled */ -static float globallen(float *v1,float *v2,Object *ob) +static float globallen(float *v1, float *v2, Object *ob) { - float p1[3],p2[3]; - copy_v3_v3(p1,v1); + float p1[3], p2[3]; + copy_v3_v3(p1, v1); mul_m4_v3(ob->obmat, p1); - copy_v3_v3(p2,v2); + copy_v3_v3(p2, v2); mul_m4_v3(ob->obmat, p2); - return len_v3v3(p1,p2); + return len_v3v3(p1, p2); } -static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object *ob) +static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff, Object *ob) { BPoint *bp=lt->def, *bpu; int u, v, w, dv, dw, bpc=0, bpuc; @@ -3440,21 +3442,21 @@ static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object * bs->v1 = bpc; bs->v2 = bpc-dw; bs->springtype=SB_EDGE; - bs->len= globallen((bp-dw)->vec, bp->vec,ob); + bs->len= globallen((bp-dw)->vec, bp->vec, ob); bs++; } if (v) { bs->v1 = bpc; bs->v2 = bpc-dv; bs->springtype=SB_EDGE; - bs->len= globallen((bp-dv)->vec, bp->vec,ob); + bs->len= globallen((bp-dv)->vec, bp->vec, ob); bs++; } if (u) { bs->v1 = bpuc; bs->v2 = bpc; bs->springtype=SB_EDGE; - bs->len= globallen((bpu)->vec, bp->vec,ob); + bs->len= globallen((bpu)->vec, bp->vec, ob); bs++; } @@ -3465,14 +3467,14 @@ static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object * bs->v1 = bpc; bs->v2 = bpc-dw-dv-1; bs->springtype=SB_BEND; - bs->len= globallen((bp-dw-dv-1)->vec, bp->vec,ob); + bs->len= globallen((bp-dw-dv-1)->vec, bp->vec, ob); bs++; } if ( (v < lt->pntsv-1) && (u != 0) ) { bs->v1 = bpc; bs->v2 = bpc-dw+dv-1; bs->springtype=SB_BEND; - bs->len= globallen((bp-dw+dv-1)->vec, bp->vec,ob); + bs->len= globallen((bp-dw+dv-1)->vec, bp->vec, ob); bs++; } } @@ -3482,14 +3484,14 @@ static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object * bs->v1 = bpc; bs->v2 = bpc+dw-dv-1; bs->springtype=SB_BEND; - bs->len= globallen((bp+dw-dv-1)->vec, bp->vec,ob); + bs->len= globallen((bp+dw-dv-1)->vec, bp->vec, ob); bs++; } if ( (v < lt->pntsv-1) && (u != 0) ) { bs->v1 = bpc; bs->v2 = bpc+dw+dv-1; bs->springtype=SB_BEND; - bs->len= globallen((bp+dw+dv-1)->vec, bp->vec,ob); + bs->len= globallen((bp+dw+dv-1)->vec, bp->vec, ob); bs++; } } @@ -3541,7 +3543,7 @@ static void lattice_to_softbody(Scene *scene, Object *ob) /* create some helper edges to enable SB lattice to be useful at all */ if (ob->softflag & OB_SB_EDGES) { - makelatticesprings(lt,ob->soft->bspring,ob->softflag & OB_SB_QUADS,ob); + makelatticesprings(lt, ob->soft->bspring, ob->softflag & OB_SB_QUADS, ob); build_bps_springlist(ob); /* link bps to springs */ } } @@ -3604,19 +3606,19 @@ static void curve_surf_to_softbody(Scene *scene, Object *ob) bs->v1= curindex-3; bs->v2= curindex; bs->springtype=SB_HANDLE; - bs->len= globallen( (bezt-1)->vec[0], bezt->vec[0], ob ); + bs->len = globallen((bezt-1)->vec[0], bezt->vec[0], ob); bs++; } bs->v1= curindex; bs->v2= curindex+1; bs->springtype=SB_HANDLE; - bs->len= globallen(bezt->vec[0], bezt->vec[1], ob); + bs->len = globallen(bezt->vec[0], bezt->vec[1], ob); bs++; bs->v1= curindex+1; bs->v2= curindex+2; bs->springtype=SB_HANDLE; - bs->len= globallen(bezt->vec[1], bezt->vec[2], ob); + bs->len = globallen(bezt->vec[1], bezt->vec[2], ob); bs++; } } @@ -3630,7 +3632,7 @@ static void curve_surf_to_softbody(Scene *scene, Object *ob) bs->v1= curindex-1; bs->v2= curindex; bs->springtype=SB_EDGE; - bs->len= globallen( (bpnt-1)->vec, bpnt->vec , ob ); + bs->len= globallen( (bpnt-1)->vec, bpnt->vec, ob ); bs++; } } @@ -3650,7 +3652,7 @@ static void softbody_to_object(Object *ob, float (*vertexCos)[3], int numVerts, if (sb) { BodyPoint *bp= sb->bpoint; int a; - if (sb->solverflags & SBSO_ESTIMATEIPO) {SB_estimate_transform(ob,sb->lcom,sb->lrot,sb->lscale);} + if (sb->solverflags & SBSO_ESTIMATEIPO) {SB_estimate_transform(ob, sb->lcom, sb->lrot, sb->lscale);} /* inverse matrix is not uptodate... */ invert_m4_m4(ob->imat, ob->obmat); @@ -3667,7 +3669,7 @@ static void sb_new_scratch(SoftBody *sb) { if (!sb) return; sb->scratch = MEM_callocN(sizeof(SBScratch), "SBScratch"); - sb->scratch->colliderhash = BLI_ghash_new(BLI_ghashutil_ptrhash,BLI_ghashutil_ptrcmp, "sb_new_scratch gh"); + sb->scratch->colliderhash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "sb_new_scratch gh"); sb->scratch->bodyface = NULL; sb->scratch->totface = 0; sb->scratch->aabbmax[0]=sb->scratch->aabbmax[1]=sb->scratch->aabbmax[2] = 1.0e30f; @@ -3783,7 +3785,7 @@ static void softbody_update_positions(Object *ob, SoftBody *sb, float (*vertexCo if (!sb || !sb->bpoint) return; - for (a=0,bp=sb->bpoint; a<numVerts; a++, bp++) { + for (a=0, bp=sb->bpoint; a<numVerts; a++, bp++) { /* store where goals are now */ copy_v3_v3(bp->origS, bp->origE); /* copy the position of the goals at desired end time */ @@ -3798,47 +3800,47 @@ static void softbody_update_positions(Object *ob, SoftBody *sb, float (*vertexCo /* void SB_estimate_transform */ -/* input Object *ob out (says any object that can do SB like mesh,lattice,curve ) - * output float lloc[3],float lrot[3][3],float lscale[3][3] +/* input Object *ob out (says any object that can do SB like mesh, lattice, curve ) + * output float lloc[3], float lrot[3][3], float lscale[3][3] * that is: * a precise position vector denoting the motion of the center of mass * give a rotation/scale matrix using averaging method, that's why estimate and not calculate * see: this is kind of reverse engeneering: having to states of a point cloud and recover what happend * our advantage here we know the identity of the vertex * there are others methods giving other results. - * lloc,lrot,lscale are allowed to be NULL, just in case you don't need it. + * lloc, lrot, lscale are allowed to be NULL, just in case you don't need it. * should be pretty useful for pythoneers :) * not! velocity .. 2nd order stuff * vcloud_estimate_transform see */ -void SB_estimate_transform(Object *ob,float lloc[3],float lrot[3][3],float lscale[3][3]) +void SB_estimate_transform(Object *ob, float lloc[3], float lrot[3][3], float lscale[3][3]) { BodyPoint *bp; ReferenceVert *rp; SoftBody *sb = NULL; float (*opos)[3]; float (*rpos)[3]; - float com[3],rcom[3]; + float com[3], rcom[3]; int a; if (!ob ||!ob->soft) return; /* why did we get here ? */ sb= ob->soft; if (!sb || !sb->bpoint) return; - opos= MEM_callocN( (sb->totpoint)*3*sizeof(float), "SB_OPOS"); - rpos= MEM_callocN( (sb->totpoint)*3*sizeof(float), "SB_RPOS"); + opos= MEM_callocN((sb->totpoint)*3*sizeof(float), "SB_OPOS"); + rpos= MEM_callocN((sb->totpoint)*3*sizeof(float), "SB_RPOS"); /* might filter vertex selection with a vertex group */ for (a=0, bp=sb->bpoint, rp=sb->scratch->Ref.ivert; a<sb->totpoint; a++, bp++, rp++) { - copy_v3_v3(rpos[a],rp->pos); - copy_v3_v3(opos[a],bp->pos); + copy_v3_v3(rpos[a], rp->pos); + copy_v3_v3(opos[a], bp->pos); } - vcloud_estimate_transform(sb->totpoint, opos, NULL, rpos, NULL, com, rcom,lrot,lscale); - //sub_v3_v3(com,rcom); - if (lloc) copy_v3_v3(lloc,com); - copy_v3_v3(sb->lcom,com); - if (lscale) copy_m3_m3(sb->lscale,lscale); - if (lrot) copy_m3_m3(sb->lrot,lrot); + vcloud_estimate_transform(sb->totpoint, opos, NULL, rpos, NULL, com, rcom, lrot, lscale); + //sub_v3_v3(com, rcom); + if (lloc) copy_v3_v3(lloc, com); + copy_v3_v3(sb->lcom, com); + if (lscale) copy_m3_m3(sb->lscale, lscale); + if (lrot) copy_m3_m3(sb->lrot, lrot); MEM_freeN(opos); @@ -3850,7 +3852,7 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int BodyPoint *bp; int a; - for (a=0,bp=sb->bpoint; a<numVerts; a++, bp++) { + for (a=0, bp=sb->bpoint; a<numVerts; a++, bp++) { copy_v3_v3(bp->pos, vertexCos[a]); mul_m4_v3(ob->obmat, bp->pos); /* yep, sofbody is global coords*/ copy_v3_v3(bp->origS, bp->pos); @@ -3890,8 +3892,8 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int /* we only need that if we want to reconstruct IPO */ if (1) { reference_to_scratch(ob); - SB_estimate_transform(ob,NULL,NULL,NULL); - SB_estimate_transform(ob,NULL,NULL,NULL); + SB_estimate_transform(ob, NULL, NULL, NULL); + SB_estimate_transform(ob, NULL, NULL, NULL); } switch (ob->type) { case OB_MESH: @@ -3911,7 +3913,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) { /* the simulator */ float forcetime; - double sct,sst; + double sct, sst; sst=PIL_check_seconds_timer(); @@ -3951,26 +3953,26 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) forcetime = forcetimemax; /* hope for integrating in one step */ while ( (ABS(timedone) < ABS(dtime)) && (loops < 2000) ) { /* set goals in time */ - interpolate_exciter(ob,200,(int)(200.0f*(timedone/dtime))); + interpolate_exciter(ob, 200, (int)(200.0f*(timedone/dtime))); sb->scratch->flag &= ~SBF_DOFUZZY; /* do predictive euler step */ - softbody_calc_forces(scene, ob, forcetime,timedone/dtime,0); + softbody_calc_forces(scene, ob, forcetime, timedone/dtime, 0); - softbody_apply_forces(ob, forcetime, 1, NULL,mid_flags); + softbody_apply_forces(ob, forcetime, 1, NULL, mid_flags); /* crop new slope values to do averaged slope step */ - softbody_calc_forces(scene, ob, forcetime,timedone/dtime,0); + softbody_calc_forces(scene, ob, forcetime, timedone/dtime, 0); - softbody_apply_forces(ob, forcetime, 2, &err,mid_flags); + softbody_apply_forces(ob, forcetime, 2, &err, mid_flags); softbody_apply_goalsnap(ob); if (err > SoftHeunTol) { /* error needs to be scaled to some quantity */ if (forcetime > forcetimemin) { - forcetime = MAX2(forcetime / 2.0f,forcetimemin); + forcetime = MAX2(forcetime / 2.0f, forcetimemin); softbody_restore_prev_step(ob); - //printf("down,"); + //printf("down, "); } else { timedone += forcetime; @@ -3990,17 +3992,17 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) } } timedone += forcetime; - newtime=MIN2(forcetimemax,MAX2(newtime,forcetimemin)); - //if (newtime > forcetime) printf("up,"); + newtime=MIN2(forcetimemax, MAX2(newtime, forcetimemin)); + //if (newtime > forcetime) printf("up, "); if (forcetime > 0.0f) - forcetime = MIN2(dtime - timedone,newtime); + forcetime = MIN2(dtime - timedone, newtime); else - forcetime = MAX2(dtime - timedone,newtime); + forcetime = MAX2(dtime - timedone, newtime); } loops++; if (sb->solverflags & SBSO_MONITOR ) { sct=PIL_check_seconds_timer(); - if (sct-sst > 0.5f) printf("%3.0f%% \r",100.0f*timedone/dtime); + if (sct-sst > 0.5f) printf("%3.0f%% \r", 100.0f*timedone/dtime); } /* ask for user break */ if (SB_localInterruptCallBack && SB_localInterruptCallBack()) break; @@ -4013,7 +4015,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) // if (G.debug & G_DEBUG) { if (sb->solverflags & SBSO_MONITOR ) { if (loops > HEUNWARNLIMIT) /* monitor high loop counts */ - printf("\r needed %d steps/frame",loops); + printf("\r needed %d steps/frame", loops); } } @@ -4036,7 +4038,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) if (sb->solverflags & SBSO_MONITOR ) { sct=PIL_check_seconds_timer(); - if ((sct-sst > 0.5f) || (G.debug & G_DEBUG)) printf(" solver time %f sec %s\n",sct-sst,ob->id.name); + if ((sct-sst > 0.5f) || (G.debug & G_DEBUG)) printf(" solver time %f sec %s\n", sct-sst, ob->id.name); } } diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 3de5cf9677e..c69458f236a 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1718,21 +1718,21 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, #define PASSATTRIB(dx, dy, vert) { \ if (attribs.totorco) { \ index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \ - glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \ + glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \ } \ for (b = 0; b < attribs.tottface; b++) { \ MTFace *tf = &attribs.tface[b].array[a]; \ - glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \ + glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \ } \ for (b = 0; b < attribs.totmcol; b++) { \ MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \ GLubyte col[4]; \ col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \ + glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \ } \ if (attribs.tottang) { \ float *tang = attribs.tang.array[a * 4 + vert]; \ - glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \ + glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \ } \ } @@ -1863,27 +1863,27 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void * #define PASSATTRIB(dx, dy, vert) { \ if (attribs.totorco) { \ index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \ - if (attribs.orco.glTexco) \ + if (attribs.orco.gl_texco) \ glTexCoord3fv(attribs.orco.array[index]); \ else \ - glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \ + glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \ } \ for (b = 0; b < attribs.tottface; b++) { \ MTFace *tf = &attribs.tface[b].array[a]; \ - if (attribs.tface[b].glTexco) \ + if (attribs.tface[b].gl_texco) \ glTexCoord2fv(tf->uv[vert]); \ else \ - glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \ + glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \ } \ for (b = 0; b < attribs.totmcol; b++) { \ MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \ GLubyte col[4]; \ col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \ + glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \ } \ if (attribs.tottang) { \ float *tang = attribs.tang.array[a * 4 + vert]; \ - glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \ + glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \ } \ } @@ -2102,7 +2102,7 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm, } } else { - glShadeModel(GL_FLAT); + glShadeModel((cp)? GL_SMOOTH: GL_FLAT); glBegin(GL_QUADS); for (y = 0; y < gridFaces; y++) { for (x = 0; x < gridFaces; x++) { @@ -3134,8 +3134,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, float *w2; int s, x, y; - origIndex = base_polyOrigIndex ? base_polyOrigIndex[origIndex] : origIndex; - w = get_ss_weights(&wtable, gridCuts, numVerts); ccgdm->faceMap[index].startVert = vertNum; @@ -3146,6 +3144,8 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, faceFlags->mat_nr = mpoly ? mpoly[origIndex].mat_nr : 0; faceFlags++; + origIndex = base_polyOrigIndex ? base_polyOrigIndex[origIndex] : origIndex; + /* set the face base vert */ *((int *)ccgSubSurf_getFaceUserData(ss, f)) = vertNum; diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index cb7369476c0..d67c5fb3698 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -598,8 +598,8 @@ void clear_text(Text *text) /* called directly from rna */ int oldstate; oldstate = txt_get_undostate( ); - txt_set_undostate( 1 ); - txt_sel_all( text ); + txt_set_undostate(1); + txt_sel_all(text); txt_delete_sel(text); txt_set_undostate(oldstate); @@ -666,7 +666,7 @@ static TextLine *txt_new_linen(const char *str, int n) return tmp; } -void txt_clean_text (Text *text) +void txt_clean_text(Text *text) { TextLine **top, **bot; @@ -697,7 +697,7 @@ void txt_clean_text (Text *text) } } -int txt_get_span (TextLine *from, TextLine *to) +int txt_get_span(TextLine *from, TextLine *to) { int ret=0; TextLine *tmp= from; @@ -957,9 +957,8 @@ void txt_move_right(Text *text, short sel) void txt_jump_left(Text *text, short sel) { TextLine **linep, *oldl; - int *charp, oldc, oldflags, i; + int *charp, oldc, oldflags; unsigned char oldu; - int pos; if (!text) return; if (sel) txt_curs_sel(text, &linep, &charp); @@ -974,13 +973,9 @@ void txt_jump_left(Text *text, short sel) oldu= undoing; undoing= 1; /* Don't push individual moves to undo stack */ - pos = *charp; BLI_str_cursor_step_utf8((*linep)->line, (*linep)->len, - &pos, STRCUR_DIR_PREV, + charp, STRCUR_DIR_PREV, STRCUR_JUMP_DELIM); - for (i = *charp; i > pos; i--) { - txt_move_left(text, sel); - } text->flags = oldflags; @@ -991,9 +986,8 @@ void txt_jump_left(Text *text, short sel) void txt_jump_right(Text *text, short sel) { TextLine **linep, *oldl; - int *charp, oldc, oldflags, i; + int *charp, oldc, oldflags; unsigned char oldu; - int pos; if (!text) return; if (sel) txt_curs_sel(text, &linep, &charp); @@ -1008,13 +1002,9 @@ void txt_jump_right(Text *text, short sel) oldu= undoing; undoing= 1; /* Don't push individual moves to undo stack */ - pos = *charp; BLI_str_cursor_step_utf8((*linep)->line, (*linep)->len, - &pos, STRCUR_DIR_NEXT, + charp, STRCUR_DIR_NEXT, STRCUR_JUMP_DELIM); - for (i = *charp; i < pos; i++) { - txt_move_right(text, sel); - } text->flags = oldflags; @@ -1022,7 +1012,7 @@ void txt_jump_right(Text *text, short sel) if (!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp); } -void txt_move_bol (Text *text, short sel) +void txt_move_bol(Text *text, short sel) { TextLine **linep; int *charp, old; @@ -1039,7 +1029,7 @@ void txt_move_bol (Text *text, short sel) if (!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, *linep), old, txt_get_span(text->lines.first, *linep), (unsigned short)*charp); } -void txt_move_eol (Text *text, short sel) +void txt_move_eol(Text *text, short sel) { TextLine **linep; int *charp, old; @@ -1056,7 +1046,7 @@ void txt_move_eol (Text *text, short sel) if (!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, *linep), old, txt_get_span(text->lines.first, *linep), (unsigned short)*charp); } -void txt_move_bof (Text *text, short sel) +void txt_move_bof(Text *text, short sel) { TextLine **linep; int *charp, old; @@ -1074,7 +1064,7 @@ void txt_move_bof (Text *text, short sel) if (!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, *linep), old, txt_get_span(text->lines.first, *linep), (unsigned short)*charp); } -void txt_move_eof (Text *text, short sel) +void txt_move_eof(Text *text, short sel) { TextLine **linep; int *charp, old; @@ -1092,13 +1082,13 @@ void txt_move_eof (Text *text, short sel) if (!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, *linep), old, txt_get_span(text->lines.first, *linep), (unsigned short)*charp); } -void txt_move_toline (Text *text, unsigned int line, short sel) +void txt_move_toline(Text *text, unsigned int line, short sel) { txt_move_to(text, line, 0, sel); } /* Moves to a certain byte in a line, not a certain utf8-character! */ -void txt_move_to (Text *text, unsigned int line, unsigned int ch, short sel) +void txt_move_to(Text *text, unsigned int line, unsigned int ch, short sel) { TextLine **linep, *oldl; int *charp, oldc; @@ -1180,7 +1170,7 @@ static void txt_pop_last (Text *text) /* never used: CVS 1.19 */ /* static void txt_pop_selr (Text *text) */ -void txt_pop_sel (Text *text) +void txt_pop_sel(Text *text) { text->sell= text->curl; text->selc= text->curc; @@ -1268,7 +1258,7 @@ static void txt_delete_sel (Text *text) text->selc= text->curc; } -void txt_sel_all (Text *text) +void txt_sel_all(Text *text) { if (!text) return; @@ -1279,7 +1269,7 @@ void txt_sel_all (Text *text) text->selc= text->sell->len; } -void txt_sel_line (Text *text) +void txt_sel_line(Text *text) { if (!text) return; if (!text->curl) return; @@ -2139,7 +2129,7 @@ void txt_do_undo(Text *text) case UNDO_IBLOCK: linep= txt_undo_read_uint32(text->undo_buf, &text->undo_pos); txt_delete_sel(text); - + /* txt_backspace_char removes utf8-characters, not bytes */ buf= MEM_mallocN(linep+1, "iblock buffer"); for (i=0; i < linep; i++) { @@ -2149,19 +2139,19 @@ void txt_do_undo(Text *text) buf[i]= 0; linep= txt_utf8_len(buf); MEM_freeN(buf); - + while (linep>0) { txt_backspace_char(text); linep--; } - + text->undo_pos--; text->undo_pos--; text->undo_pos--; text->undo_pos--; text->undo_pos--; - + break; case UNDO_INDENT: case UNDO_UNINDENT: @@ -2179,7 +2169,7 @@ void txt_do_undo(Text *text) for (i= 0; i < linep; i++) { text->sell = text->sell->next; } - + linep= txt_undo_read_uint32(text->undo_buf, &text->undo_pos); //first line to be selected @@ -2190,7 +2180,7 @@ void txt_do_undo(Text *text) for (i = 0; i < linep; i++) { text->curl = text->curl->next; } - + if (op==UNDO_INDENT) { txt_unindent(text); @@ -2204,9 +2194,18 @@ void txt_do_undo(Text *text) else if (op == UNDO_UNCOMMENT) { txt_comment(text); } - + text->undo_pos--; break; + case UNDO_DUPLICATE: + txt_delete_line(text, text->curl->next); + break; + case UNDO_MOVE_LINES_UP: + txt_move_lines(text, TXT_MOVE_LINE_DOWN); + break; + case UNDO_MOVE_LINES_DOWN: + txt_move_lines(text, TXT_MOVE_LINE_UP); + break; default: //XXX error("Undo buffer error - resetting"); text->undo_pos= -1; @@ -2404,10 +2403,19 @@ void txt_do_redo(Text *text) txt_uncomment(text); } break; + case UNDO_DUPLICATE: + txt_duplicate_line(text); + break; + case UNDO_MOVE_LINES_UP: + txt_move_lines(text, TXT_MOVE_LINE_UP); + break; + case UNDO_MOVE_LINES_DOWN: + txt_move_lines(text, TXT_MOVE_LINE_DOWN); + break; default: //XXX error("Undo buffer error - resetting"); text->undo_pos= -1; - + break; } @@ -2418,7 +2426,7 @@ void txt_do_redo(Text *text) /* Line editing functions */ /**************************/ -void txt_split_curline (Text *text) +void txt_split_curline(Text *text) { TextLine *ins; TextMarker *mrk; @@ -2545,6 +2553,23 @@ static void txt_combine_lines (Text *text, TextLine *linea, TextLine *lineb) txt_clean_text(text); } +void txt_duplicate_line(Text *text) +{ + TextLine *textline; + + if (!text || !text->curl) return; + + if (text->curl == text->sell) { + textline = txt_new_line(text->curl->line); + BLI_insertlinkafter(&text->lines, text->curl, textline); + + txt_make_dirty(text); + txt_clean_text(text); + + if (!undoing) txt_undo_add_op(text, UNDO_DUPLICATE); + } +} + void txt_delete_char(Text *text) { unsigned int c='\n'; @@ -2602,13 +2627,13 @@ void txt_delete_char(Text *text) if (!undoing) txt_undo_add_charop(text, UNDO_DEL_1, c); } -void txt_delete_word (Text *text) +void txt_delete_word(Text *text) { txt_jump_right(text, 1); txt_delete_sel(text); } -void txt_backspace_char (Text *text) +void txt_backspace_char(Text *text) { unsigned int c='\n'; @@ -2671,7 +2696,7 @@ void txt_backspace_char (Text *text) if (!undoing) txt_undo_add_charop(text, UNDO_BS_1, c); } -void txt_backspace_word (Text *text) +void txt_backspace_word(Text *text) { txt_jump_left(text, 1); txt_delete_sel(text); @@ -2745,12 +2770,12 @@ static int txt_add_char_intern (Text *text, unsigned int add, int replace_tabs) return 1; } -int txt_add_char (Text *text, unsigned int add) +int txt_add_char(Text *text, unsigned int add) { return txt_add_char_intern(text, add, text->flags & TXT_TABSTOSPACES); } -int txt_add_raw_char (Text *text, unsigned int add) +int txt_add_raw_char(Text *text, unsigned int add) { return txt_add_char_intern(text, add, 0); } @@ -2761,7 +2786,7 @@ void txt_delete_selected(Text *text) txt_make_dirty(text); } -int txt_replace_char (Text *text, unsigned int add) +int txt_replace_char(Text *text, unsigned int add) { unsigned int del; size_t del_size = 0, add_size; @@ -3020,7 +3045,62 @@ void txt_uncomment(Text *text) } } -int setcurr_tab_spaces (Text *text, int space) + +void txt_move_lines_up(struct Text *text) +{ + TextLine *prev_line; + + if (!text || !text->curl || !text->sell) return; + + txt_order_cursors(text); + + prev_line= text->curl->prev; + + if (!prev_line) return; + + BLI_remlink(&text->lines, prev_line); + BLI_insertlinkafter(&text->lines, text->sell, prev_line); + + txt_make_dirty(text); + txt_clean_text(text); + + if (!undoing) { + txt_undo_add_op(text, UNDO_MOVE_LINES_UP); + } +} + +void txt_move_lines(struct Text *text, const int direction) +{ + TextLine *line_other; + + BLI_assert(ELEM(direction, TXT_MOVE_LINE_UP, TXT_MOVE_LINE_DOWN)); + + if (!text || !text->curl || !text->sell) return; + + txt_order_cursors(text); + + line_other = (direction == TXT_MOVE_LINE_DOWN) ? text->sell->next : text->curl->prev; + + if (!line_other) return; + + BLI_remlink(&text->lines, line_other); + + if (direction == TXT_MOVE_LINE_DOWN) { + BLI_insertlinkbefore(&text->lines, text->curl, line_other); + } + else { + BLI_insertlinkafter(&text->lines, text->sell, line_other); + } + + txt_make_dirty(text); + txt_clean_text(text); + + if (!undoing) { + txt_undo_add_op(text, (direction == TXT_MOVE_LINE_DOWN) ? UNDO_MOVE_LINES_DOWN : UNDO_MOVE_LINES_UP); + } +} + +int setcurr_tab_spaces(Text *text, int space) { int i = 0; int test = 0; diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 29b9505f449..9200b1dca18 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -342,7 +342,7 @@ ColorBand *add_colorband(int rangetype) { ColorBand *coba; - coba= MEM_callocN( sizeof(ColorBand), "colorband"); + coba= MEM_callocN(sizeof(ColorBand), "colorband"); init_colorband(coba, rangetype); return coba; @@ -1056,8 +1056,8 @@ void make_local_texture(Tex *tex) void autotexname(Tex *tex) { Main *bmain= G.main; - char texstr[20][15]= {"None" , "Clouds" , "Wood", "Marble", "Magic" , "Blend", - "Stucci", "Noise" , "Image", "Plugin", "EnvMap" , "Musgrave", + char texstr[20][15]= {"None", "Clouds", "Wood", "Marble", "Magic", "Blend", + "Stucci", "Noise", "Image", "Plugin", "EnvMap", "Musgrave", "Voronoi", "DistNoise", "Point Density", "Voxel Data", "Ocean", "", "", ""}; Image *ima; char di[FILE_MAXDIR], fi[FILE_MAXFILE]; diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index e511cd362de..f4335862629 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -107,7 +107,7 @@ void BKE_tracking_clamp_track(MovieTrackingTrack *track, int event) float max_pyramid_level_factor = 1.0; if (track->tracker == TRACKER_KLT) { - max_pyramid_level_factor= 1 << (track->pyramid_levels - 1); + max_pyramid_level_factor = 1 << (track->pyramid_levels - 1); } /* sort */ @@ -277,7 +277,7 @@ MovieTrackingTrack *BKE_tracking_add_track(MovieTracking *tracking, ListBase *tr MovieTrackingMarker *BKE_tracking_insert_marker(MovieTrackingTrack *track, MovieTrackingMarker *marker) { - MovieTrackingMarker *old_marker= NULL; + MovieTrackingMarker *old_marker = NULL; if (track->markersnr) old_marker = BKE_tracking_exact_marker(track, marker->framenr); @@ -313,7 +313,7 @@ MovieTrackingMarker *BKE_tracking_insert_marker(MovieTrackingTrack *track, Movie void BKE_tracking_delete_marker(MovieTrackingTrack *track, int framenr) { - int a= 0; + int a = 0; while (a<track->markersnr) { if (track->markers[a].framenr == framenr) { @@ -464,7 +464,7 @@ void BKE_tracking_clear_path(MovieTrackingTrack *track, int ref_frame, int actio put_disabled_marker(track, &track->markers[track->markersnr-1], 0, 1); } else if (action == TRACK_CLEAR_UPTO) { - a= track->markersnr-1; + a = track->markersnr-1; while (a >= 0) { if (track->markers[a].framenr <= ref_frame) { @@ -632,6 +632,25 @@ static void tracking_objects_free(ListBase *objects) BLI_freelistN(objects); } +static void tracking_dopesheet_free(MovieTrackingDopesheet *dopesheet) +{ + MovieTrackingDopesheetChannel *channel; + + channel = dopesheet->channels.first; + while (channel) { + if (channel->segments) { + MEM_freeN(channel->segments); + } + + channel = channel->next; + } + + BLI_freelistN(&dopesheet->channels); + + dopesheet->channels.first = dopesheet->channels.last = NULL; + dopesheet->tot_channel = 0; +} + void BKE_tracking_free(MovieTracking *tracking) { tracking_tracks_free(&tracking->tracks); @@ -643,6 +662,8 @@ void BKE_tracking_free(MovieTracking *tracking) if (tracking->camera.intrinsics) BKE_tracking_distortion_destroy(tracking->camera.intrinsics); + + tracking_dopesheet_free(&tracking->dopesheet); } static MovieTrackingTrack *duplicate_track(MovieTrackingTrack *track) @@ -680,6 +701,8 @@ void BKE_tracking_clipboard_copy_tracks(MovieTracking *tracking, MovieTrackingOb ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object); MovieTrackingTrack *track = tracksbase->first; + BKE_tracking_free_clipboard(); + while (track) { if (TRACK_SELECTED(track) && (track->flag & TRACK_HIDDEN) == 0) { MovieTrackingTrack *new_track = duplicate_track(track); @@ -763,7 +786,7 @@ static void tracks_map_get(TracksMap *map, int index, MovieTrackingTrack **track static void tracks_map_insert(TracksMap *map, MovieTrackingTrack *track, void *customdata) { - MovieTrackingTrack new_track= *track; + MovieTrackingTrack new_track = *track; new_track.markers = MEM_dupallocN(new_track.markers); @@ -843,10 +866,10 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking) BLI_ghash_insert(map->hash, track, new_track); if (replace_sel) /* update current selection in clip */ - tracking->act_track= new_track; + tracking->act_track = new_track; if (replace_rot) /* update track used for rotation stabilization */ - tracking->stabilization.rot_track= new_track; + tracking->stabilization.rot_track = new_track; BLI_addtail(&tracks, new_track); } @@ -859,7 +882,7 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking) track->next = track->prev = NULL; BLI_addtail(&new_tracks, track); - track= next; + track = next; } /* now move all tracks which are currently operating and keep their names unique */ @@ -874,15 +897,15 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking) BLI_uniquename(&new_tracks, track, "Track", '.', offsetof(MovieTrackingTrack, name), sizeof(track->name)); - track= next; + track = next; } - *old_tracks= new_tracks; + *old_tracks = new_tracks; } static void tracks_map_free(TracksMap *map, void (*customdata_free) (void *customdata)) { - int i= 0; + int i = 0; BLI_ghash_free(map->hash, NULL, NULL); @@ -998,7 +1021,7 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u * than the search size */ int level = MIN2(track->pyramid_levels, max_pyramid_levels); - if (track->tracker==TRACKER_KLT) { + if (track->tracker == TRACKER_KLT) { track_context.region_tracker = libmv_pyramidRegionTrackerNew(100, level, half_wnd, track->minimum_correlation); } @@ -1007,7 +1030,7 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u libmv_hybridRegionTrackerNew(100, half_wnd, track->minimum_correlation); } else if (track->tracker == TRACKER_SAD) { - track_context.region_tracker= libmv_bruteRegionTrackerNew(MAX2(wndx, wndy), track->minimum_correlation); + track_context.region_tracker = libmv_bruteRegionTrackerNew(MAX2(wndx, wndy), track->minimum_correlation); } } #endif @@ -1030,7 +1053,7 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u * - MCLIP_USE_PROXY_CUSTOM_DIR is needed because proxy/timecode files might * be stored in a different location * ignore all the rest possible flags for now */ - context->clip_flag = clip->flag&MCLIP_TIMECODE_FLAGS; + context->clip_flag = clip->flag & MCLIP_TIMECODE_FLAGS; context->user = *user; context->user.render_size = MCLIP_PROXY_RENDER_SIZE_FULL; @@ -1298,7 +1321,7 @@ static ImBuf *get_keyframed_ibuf(MovieTrackingContext *context, MovieTrackingTra MovieTrackingMarker *next_marker = NULL; if (next>=0 && next<track->markersnr) - next_marker= &track->markers[next]; + next_marker = &track->markers[next]; /* if next mrker is disabled, stop searching keyframe and use current frame as keyframe */ if (next_marker && next_marker->flag & MARKER_DISABLED) @@ -1352,6 +1375,8 @@ void BKE_tracking_sync(MovieTrackingContext *context) newframe = context->user.framenr - 1; context->sync_frame = newframe; + + tracking->dopesheet.ok = FALSE; } void BKE_tracking_sync_user(MovieClipUser *user, MovieTrackingContext *context) @@ -1473,7 +1498,7 @@ int BKE_tracking_next(MovieTrackingContext *context) } marker_new.flag |= MARKER_TRACKED; - marker_new.framenr= nextfra; + marker_new.framenr = nextfra; #pragma omp critical { @@ -1732,7 +1757,7 @@ static int get_refine_intrinsics_flags(MovieTracking *tracking, MovieTrackingObj static int count_tracks_on_both_keyframes(MovieTracking *tracking, ListBase *tracksbase) { int tot = 0; - int frame1 = tracking->settings.keyframe1, frame2= tracking->settings.keyframe2; + int frame1 = tracking->settings.keyframe1, frame2 = tracking->settings.keyframe2; MovieTrackingTrack *track; track = tracksbase->first; @@ -1863,7 +1888,7 @@ void BKE_tracking_reconstruction_context_free(MovieReconstructContext *context) #ifdef WITH_LIBMV static void solve_reconstruction_update_cb(void *customdata, double progress, const char *message) { - ReconstructProgressData *progressdata= customdata; + ReconstructProgressData *progressdata = customdata; if (progressdata->progress) { *progressdata->progress = progress; @@ -1979,7 +2004,7 @@ MovieTrackingTrack *BKE_tracking_named_track(MovieTracking *tracking, MovieTrack static int reconstruction_camera_index(MovieTrackingReconstruction *reconstruction, int framenr, int nearest) { - MovieReconstructedCamera *cameras= reconstruction->cameras; + MovieReconstructedCamera *cameras = reconstruction->cameras; int a = 0, d = 1; if (!reconstruction->camnr) @@ -2216,7 +2241,7 @@ MovieTrackingObject *BKE_tracking_get_camera_object(MovieTracking *tracking) if (object->flag & TRACKING_OBJECT_CAMERA) return object; - object= object->next; + object = object->next; } return NULL; @@ -2249,7 +2274,7 @@ MovieTrackingReconstruction *BKE_tracking_get_reconstruction(MovieTracking *trac void BKE_tracking_apply_intrinsics(MovieTracking *tracking, float co[2], float nco[2]) { - MovieTrackingCamera *camera= &tracking->camera; + MovieTrackingCamera *camera = &tracking->camera; #ifdef WITH_LIBMV double x, y; @@ -2309,7 +2334,7 @@ static int point_in_stroke(bGPDstroke *stroke, float x, float y) count++; } - prev= i; + prev = i; } return count % 2; @@ -2418,10 +2443,10 @@ MovieTrackingTrack *BKE_tracking_indexed_track(MovieTracking *tracking, int trac track = track->next; } - object= object->next; + object = object->next; } - *tracksbase_r= NULL; + *tracksbase_r = NULL; return NULL; } @@ -2645,8 +2670,8 @@ void BKE_tracking_stabilization_data(MovieTracking *tracking, int framenr, int w if ((stab->flag & TRACKING_2D_STABILIZATION) == 0) { zero_v2(loc); - *scale= 1.0f; - *angle= 0.0f; + *scale = 1.0f; + *angle = 0.0f; return; } @@ -2765,10 +2790,10 @@ ImBuf *BKE_tracking_stabilize(MovieTracking *tracking, int framenr, ImBuf *ibuf, copy_v2_v2(loc, tloc); if (scale) - *scale= tscale; + *scale = tscale; if (angle) - *angle= tangle; + *angle = tangle; return tmpibuf; } @@ -3001,7 +3026,7 @@ void BKE_tracking_remove_object(MovieTracking *tracking, MovieTrackingObject *ob if (track == tracking->act_track) tracking->act_track = NULL; - track= track->next; + track = track->next; } tracking_object_free(object); @@ -3033,3 +3058,216 @@ MovieTrackingObject *BKE_tracking_named_object(MovieTracking *tracking, const ch return NULL; } + +/*********************** dopesheet functions *************************/ + +static int channels_alpha_sort(void *a, void *b) +{ + MovieTrackingDopesheetChannel *channel_a = a; + MovieTrackingDopesheetChannel *channel_b = b; + + if (BLI_strcasecmp(channel_a->track->name, channel_b->track->name) > 0) + return 1; + else + return 0; +} + +static int channels_total_track_sort(void *a, void *b) +{ + MovieTrackingDopesheetChannel *channel_a = a; + MovieTrackingDopesheetChannel *channel_b = b; + + if (channel_a->total_frames > channel_b->total_frames) + return 1; + else + return 0; +} + +static int channels_longest_segment_sort(void *a, void *b) +{ + MovieTrackingDopesheetChannel *channel_a = a; + MovieTrackingDopesheetChannel *channel_b = b; + + if (channel_a->max_segment > channel_b->max_segment) + return 1; + else + return 0; +} + +static int channels_alpha_inverse_sort(void *a, void *b) +{ + if (channels_alpha_sort(a, b)) + return 0; + else + return 1; +} + +static int channels_total_track_inverse_sort(void *a, void *b) +{ + if (channels_total_track_sort(a, b)) + return 0; + else + return 1; +} + +static int channels_longest_segment_inverse_sort(void *a, void *b) +{ + if (channels_longest_segment_sort(a, b)) + return 0; + else + return 1; +} + +static void channels_segments_calc(MovieTrackingDopesheetChannel *channel) +{ + MovieTrackingTrack *track = channel->track; + int i, segment; + + channel->tot_segment = 0; + channel->max_segment = 0; + channel->total_frames = 0; + + /* count */ + i = 0; + while (i < track->markersnr) { + MovieTrackingMarker *marker = &track->markers[i]; + + if ((marker->flag & MARKER_DISABLED) == 0) { + int prev_fra = marker->framenr, len = 0; + + i++; + while (i < track->markersnr) { + marker = &track->markers[i]; + + if (marker->framenr != prev_fra + 1) + break; + if (marker->flag & MARKER_DISABLED) + break; + + prev_fra = marker->framenr; + len++; + i++; + } + + channel->tot_segment++; + } + + i++; + } + + if (!channel->tot_segment) + return; + + channel->segments = MEM_callocN(2 * sizeof(int) * channel->tot_segment, "tracking channel segments"); + + /* create segments */ + i = 0; + segment = 0; + while (i < track->markersnr) { + MovieTrackingMarker *marker = &track->markers[i]; + + if ((marker->flag & MARKER_DISABLED) == 0) { + MovieTrackingMarker *start_marker = marker; + int prev_fra = marker->framenr, len = 0; + + i++; + while (i < track->markersnr) { + marker = &track->markers[i]; + + if (marker->framenr != prev_fra + 1) + break; + if (marker->flag & MARKER_DISABLED) + break; + + prev_fra = marker->framenr; + channel->total_frames++; + len++; + i++; + } + + channel->segments[2 * segment] = start_marker->framenr; + channel->segments[2 * segment + 1] = start_marker->framenr + len; + + channel->max_segment = MAX2(channel->max_segment, len); + segment++; + } + + i++; + } +} + +static void tracking_dopesheet_sort(MovieTracking *tracking, int sort_method, int inverse) +{ + MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; + + if (dopesheet->sort_method == sort_method && dopesheet->sort_inverse == inverse) + return; + + if (inverse) { + if (sort_method == TRACK_SORT_NAME) { + BLI_sortlist(&dopesheet->channels, channels_alpha_inverse_sort); + } + else if (sort_method == TRACK_SORT_LONGEST) { + BLI_sortlist(&dopesheet->channels, channels_longest_segment_inverse_sort); + } + else if (sort_method == TRACK_SORT_TOTAL) { + BLI_sortlist(&dopesheet->channels, channels_total_track_inverse_sort); + } + } + else { + if (sort_method == TRACK_SORT_NAME) { + BLI_sortlist(&dopesheet->channels, channels_alpha_sort); + } + else if (sort_method == TRACK_SORT_LONGEST) { + BLI_sortlist(&dopesheet->channels, channels_longest_segment_sort); + } + else if (sort_method == TRACK_SORT_TOTAL) { + BLI_sortlist(&dopesheet->channels, channels_total_track_sort); + } + } + + dopesheet->sort_method = sort_method; + dopesheet->sort_inverse = inverse; +} + +void BKE_tracking_dopesheet_tag_update(MovieTracking *tracking) +{ + MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; + + dopesheet->ok = FALSE; +} + +void BKE_tracking_dopesheet_update(MovieTracking *tracking, int sort_method, int inverse) +{ + MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; + MovieTrackingTrack *track; + ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object); + + if (dopesheet->ok) { + tracking_dopesheet_sort(tracking, sort_method, inverse); + return; + } + + tracking_dopesheet_free(dopesheet); + + for (track = tracksbase->first; track; track = track->next) { + if (TRACK_SELECTED(track) && (track->flag & TRACK_HIDDEN) == 0) { + MovieTrackingDopesheetChannel *channel; + + channel = MEM_callocN(sizeof(MovieTrackingDopesheetChannel), "tracking dopesheet channel"); + channel->track = track; + + channels_segments_calc(channel); + + BLI_addtail(&dopesheet->channels, channel); + dopesheet->tot_channel++; + } + } + + dopesheet->sort_method = TRACK_SORT_NONE; + + tracking_dopesheet_sort(tracking, sort_method, inverse); + + dopesheet->ok = TRUE; +} diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index 48e939be7e9..03afc97f324 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -251,7 +251,7 @@ static struct bUnitDef buNaturalTimeDef[] = { {"hour", "hours", "hr", "h", "Hours", 3600.0, 0.0, B_UNIT_DEF_NONE}, {"minute", "minutes", "min", "m", "Minutes", 60.0, 0.0, B_UNIT_DEF_NONE}, {"second", "seconds", "sec", "s", "Seconds", 1.0, 0.0, B_UNIT_DEF_NONE}, /* base unit */ - {"millisecond", "milliseconds", "ms", NULL, "Milliseconds", 0.001, 0.0 , B_UNIT_DEF_NONE}, + {"millisecond", "milliseconds", "ms", NULL, "Milliseconds", 0.001, 0.0, B_UNIT_DEF_NONE}, {"microsecond", "microseconds", "µs", "us", "Microseconds", 0.000001, 0.0, B_UNIT_DEF_NONE}, {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0} }; diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 079bde0afec..7330269c1f4 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -1,19 +1,25 @@ /* + * ***** BEGIN GPL LICENSE BLOCK ***** * - * ffmpeg-write support - * - * Partial Copyright (c) 2006 Peter Schlaile - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): + * + * Partial Copyright (c) 2006 Peter Schlaile + * + * ***** END GPL LICENSE BLOCK ***** */ /** \file blender/blenkernel/intern/writeffmpeg.c diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c index 62e921f3311..0ff095607e3 100644 --- a/source/blender/blenkernel/intern/writeframeserver.c +++ b/source/blender/blenkernel/intern/writeframeserver.c @@ -1,25 +1,33 @@ /* + * ***** BEGIN GPL LICENSE BLOCK ***** * - * Frameserver - * Makes Blender accessible from TMPGenc directly using VFAPI (you can - * use firefox too ;-) - * - * Copyright (c) 2006 Peter Schlaile - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright (c) 2006 Peter Schlaile + * + * Contributor(s): + * + * ***** END GPL LICENSE BLOCK ***** */ /** \file blender/blenkernel/intern/writeframeserver.c * \ingroup bke + * + * Frameserver + * Makes Blender accessible from TMPGenc directly using VFAPI (you can + * use firefox too ;-) */ #ifdef WITH_FRAMESERVER @@ -70,7 +78,7 @@ static int render_height; static int startup_socket_system(void) { WSADATA wsa; - return (WSAStartup(MAKEWORD(2,0),&wsa) == 0); + return (WSAStartup(MAKEWORD(2, 0), &wsa) == 0); } static void shutdown_socket_system(void) diff --git a/source/blender/blenlib/BLI_bitmap.h b/source/blender/blenlib/BLI_bitmap.h index 2aed71a7d44..f19d6d6f465 100644 --- a/source/blender/blenlib/BLI_bitmap.h +++ b/source/blender/blenlib/BLI_bitmap.h @@ -69,7 +69,7 @@ typedef unsigned int* BLI_bitmap; /* set or clear the value of a single bit at '_index' */ #define BLI_BITMAP_MODIFY(_bitmap, _index, _set) \ do { \ - if(_set) \ + if (_set) \ BLI_BITMAP_SET(_bitmap, _index); \ else \ BLI_BITMAP_CLEAR(_bitmap, _index); \ diff --git a/source/blender/blenlib/BLI_boxpack2d.h b/source/blender/blenlib/BLI_boxpack2d.h index 7f92047b312..77e937d7b6f 100644 --- a/source/blender/blenlib/BLI_boxpack2d.h +++ b/source/blender/blenlib/BLI_boxpack2d.h @@ -34,7 +34,7 @@ /* Box Packer */ -typedef struct boxPack { +typedef struct BoxPack { float x; float y; float w; @@ -44,9 +44,9 @@ typedef struct boxPack { /* Verts this box uses * (BL,TR,TL,BR) / 0,1,2,3 */ struct boxVert *v[4]; -} boxPack; +} BoxPack; -void boxPack2D(boxPack *boxarray, const int len, float *tot_width, float *tot_height); +void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *tot_height); #endif diff --git a/source/blender/blenlib/BLI_bpath.h b/source/blender/blenlib/BLI_bpath.h index 91252d3beb5..27b373e6eb8 100644 --- a/source/blender/blenlib/BLI_bpath.h +++ b/source/blender/blenlib/BLI_bpath.h @@ -43,25 +43,25 @@ struct ReportList; * path has changed, and in that case, should write the result to pathOut. */ typedef int (*BPathVisitor)(void *userdata, char *path_dst, const char *path_src); /* Executes 'visit' for each path associated with 'id'. */ -void bpath_traverse_id(struct Main *bmain, struct ID *id, BPathVisitor visit_cb, const int flag, void *userdata); -void bpath_traverse_id_list(struct Main *bmain, struct ListBase *lb, BPathVisitor visit_cb, const int flag, void *userdata); -void bpath_traverse_main(struct Main *bmain, BPathVisitor visit_cb, const int flag, void *userdata); -int bpath_relocate_visitor(void *oldbasepath, char *path_dst, const char *path_src); +void BLI_bpath_traverse_id(struct Main *bmain, struct ID *id, BPathVisitor visit_cb, const int flag, void *userdata); +void BLI_bpath_traverse_id_list(struct Main *bmain, struct ListBase *lb, BPathVisitor visit_cb, const int flag, void *userdata); +void BLI_bpath_traverse_main(struct Main *bmain, BPathVisitor visit_cb, const int flag, void *userdata); +int BLI_bpath_relocate_visitor(void *oldbasepath, char *path_dst, const char *path_src); -#define BPATH_TRAVERSE_ABS (1<<0) /* convert paths to absolute */ -#define BPATH_TRAVERSE_SKIP_LIBRARY (1<<2) /* skip library paths */ -#define BPATH_TRAVERSE_SKIP_PACKED (1<<3) /* skip packed data */ -#define BPATH_TRAVERSE_SKIP_MULTIFILE (1<<4) /* skip paths where a single dir is used with an array of files, eg. - * sequence strip images and pointcache. in this case only use the first - * file, this is needed for directory manipulation functions which might - * otherwise modify the same directory multiple times */ +#define BLI_BPATH_TRAVERSE_ABS (1<<0) /* convert paths to absolute */ +#define BLI_BPATH_TRAVERSE_SKIP_LIBRARY (1<<2) /* skip library paths */ +#define BLI_BPATH_TRAVERSE_SKIP_PACKED (1<<3) /* skip packed data */ +#define BLI_BPATH_TRAVERSE_SKIP_MULTIFILE (1<<4) /* skip paths where a single dir is used with an array of files, eg. + * sequence strip images and pointcache. in this case only use the first + * file, this is needed for directory manipulation functions which might + * otherwise modify the same directory multiple times */ /* high level funcs */ /* creates a text file with missing files if there are any */ -void checkMissingFiles(struct Main *bmain, struct ReportList *reports); -void makeFilesRelative(struct Main *bmain, const char *basedir, struct ReportList *reports); -void makeFilesAbsolute(struct Main *bmain, const char *basedir, struct ReportList *reports); -void findMissingFiles(struct Main *bmain, const char *searchpath, struct ReportList *reports); +void BLI_bpath_missing_files_check(struct Main *bmain, struct ReportList *reports); +void BLI_bpath_missing_files_find(struct Main *bmain, const char *searchpath, struct ReportList *reports); +void BLI_bpath_relative_convert(struct Main *bmain, const char *basedir, struct ReportList *reports); +void BLI_bpath_absolute_convert(struct Main *bmain, const char *basedir, struct ReportList *reports); #endif // __BLI_BPATH_H__ diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h index b32a1e272c8..bfc336781aa 100644 --- a/source/blender/blenlib/BLI_callbacks.h +++ b/source/blender/blenlib/BLI_callbacks.h @@ -62,11 +62,11 @@ typedef struct { } bCallbackFuncStore; -void BLI_exec_cb(struct Main *main, struct ID *self, eCbEvent evt); -void BLI_add_cb(bCallbackFuncStore *funcstore, eCbEvent evt); +void BLI_callback_exec(struct Main *main, struct ID *self, eCbEvent evt); +void BLI_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt); -void BLI_cb_init(void); -void BLI_cb_finalize(void); +void BLI_callback_global_init(void); +void BLI_callback_global_finalize(void); /* This is blenlib internal only, unrelated to above */ diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index 73220cbd739..1bf4efca8a0 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -55,6 +55,7 @@ int BLI_rename(const char *from, const char *to); int BLI_delete(const char *path, int dir, int recursive); int BLI_move(const char *path, const char *to); int BLI_create_symlink(const char *path, const char *to); +int BLI_stat(const char *path, struct stat *buffer); /* Directories */ diff --git a/source/blender/blenlib/BLI_fileops_types.h b/source/blender/blenlib/BLI_fileops_types.h index 8e4b5b3e411..d9f8549e8f5 100644 --- a/source/blender/blenlib/BLI_fileops_types.h +++ b/source/blender/blenlib/BLI_fileops_types.h @@ -70,7 +70,7 @@ struct direntry{ struct dirlink { - struct dirlink *next,*prev; + struct dirlink *next, *prev; char *name; }; diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h index 457f098bff7..b178538edf2 100644 --- a/source/blender/blenlib/BLI_ghash.h +++ b/source/blender/blenlib/BLI_ghash.h @@ -131,6 +131,11 @@ void BLI_ghashIterator_step (GHashIterator *ghi); */ int BLI_ghashIterator_isDone (GHashIterator *ghi); +#define GHASH_ITER(gh_iter_, ghash_) \ + for (BLI_ghashIterator_init(&gh_iter_, ghash_); \ + !BLI_ghashIterator_isDone(&gh_iter_); \ + BLI_ghashIterator_step(&gh_iter_)) + /* *** */ unsigned int BLI_ghashutil_ptrhash (const void *key); @@ -144,10 +149,10 @@ int BLI_ghashutil_intcmp (const void *a, const void *b); typedef struct GHashPair { const void *first; - int second; + const void *second; } GHashPair; -GHashPair* BLI_ghashutil_pairalloc (const void *first, int second); +GHashPair* BLI_ghashutil_pairalloc (const void *first, const void *second); unsigned int BLI_ghashutil_pairhash (const void *ptr); int BLI_ghashutil_paircmp (const void *a, const void *b); void BLI_ghashutil_pairfree (void *ptr); diff --git a/source/blender/blenlib/BLI_jitter.h b/source/blender/blenlib/BLI_jitter.h index 9aa21a89521..c2a6250c154 100644 --- a/source/blender/blenlib/BLI_jitter.h +++ b/source/blender/blenlib/BLI_jitter.h @@ -32,7 +32,7 @@ * \ingroup bli */ -void BLI_initjit(float *jitarr, int num); +void BLI_jitter_init(float *jitarr, int num); void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1); void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2); diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h index 9b5e3638609..85129d5b68d 100644 --- a/source/blender/blenlib/BLI_math_geom.h +++ b/source/blender/blenlib/BLI_math_geom.h @@ -244,14 +244,14 @@ void tangent_from_uv(float uv1[2], float uv2[2], float uv3[2], void vcloud_estimate_transform(int list_size, float (*pos)[3], float *weight, float (*rpos)[3], float *rweight, - float lloc[3],float rloc[3],float lrot[3][3],float lscale[3][3]); + float lloc[3], float rloc[3], float lrot[3][3], float lscale[3][3]); /****************************** Spherical Harmonics *************************/ /* Uses 2nd order SH => 9 coefficients, stored in this order: - * 0 = (0,0), - * 1 = (1,-1), 2 = (1,0), 3 = (1,1), - * 4 = (2,-2), 5 = (2,-1), 6 = (2,0), 7 = (2,1), 8 = (2,2) */ + * 0 = (0, 0), + * 1 = (1, -1), 2 = (1, 0), 3 = (1, 1), + * 4 = (2, -2), 5 = (2, -1), 6 = (2, 0), 7 = (2, 1), 8 = (2, 2) */ MINLINE void zero_sh(float r[9]); MINLINE void copy_sh_sh(float r[9], const float a[9]); diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h index 00a751f9da3..1d99fd4fa27 100644 --- a/source/blender/blenlib/BLI_math_matrix.h +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -126,6 +126,8 @@ int is_orthogonal_m4(float mat[4][4]); int is_orthonormal_m3(float mat[3][3]); int is_orthonormal_m4(float mat[4][4]); +int is_uniform_scaled_m3(float mat[3][3]); + void adjoint_m3_m3(float R[3][3], float A[3][3]); void adjoint_m4_m4(float R[4][4], float A[4][4]); diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index af3df9c9ed2..249f2265440 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -126,7 +126,7 @@ MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]); MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]); -MINLINE void star_m3_v3(float rmat[3][3],float a[3]); +MINLINE void star_m3_v3(float rmat[3][3], float a[3]); /*********************************** Length **********************************/ @@ -186,6 +186,7 @@ float angle_normalized_v2v2(const float a[2], const float b[2]); float angle_v3v3(const float a[3], const float b[3]); float angle_v3v3v3(const float a[3], const float b[3], const float c[3]); float angle_normalized_v3v3(const float v1[3], const float v2[3]); +float angle_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3]); void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]); void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]); void angle_poly_v3(float* angles, const float* verts[3], int len); diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h index 8306a69e567..508cc03d848 100644 --- a/source/blender/blenlib/BLI_memarena.h +++ b/source/blender/blenlib/BLI_memarena.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index e02b48feda7..1d085a46a19 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -109,7 +109,7 @@ void BLI_newname(char * name, int add); int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen); void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic); int BLI_split_name_num(char *left, int *nr, const char *name, const char delim); -void BLI_splitdirstring(char *di,char *fi); +void BLI_splitdirstring(char *di, char *fi); /* make sure path separators conform to system one */ void BLI_clean(char *path); diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h index 26bcd50ef3e..081d5ccfb66 100644 --- a/source/blender/blenlib/BLI_scanfill.h +++ b/source/blender/blenlib/BLI_scanfill.h @@ -91,14 +91,14 @@ typedef struct ScanFillFace } ScanFillFace; /* scanfill.c: used in displist only... */ -struct ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]); -struct ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2); +struct ScanFillVert *BLI_scanfill_vert_add(ScanFillContext *sf_ctx, const float vec[3]); +struct ScanFillEdge *BLI_scanfill_edge_add(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2); -int BLI_begin_edgefill(ScanFillContext *sf_ctx); -int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup); -int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, +int BLI_scanfill_begin(ScanFillContext *sf_ctx); +int BLI_scanfill_calc(ScanFillContext *sf_ctx, const short do_quad_tri_speedup); +int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, const float nor_proj[3]); -void BLI_end_edgefill(ScanFillContext *sf_ctx); +void BLI_scanfill_end(ScanFillContext *sf_ctx); /* These callbacks are needed to make the lib finction properly */ diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h index 8e75a2db629..a4698ab4dd0 100644 --- a/source/blender/blenlib/BLI_threads.h +++ b/source/blender/blenlib/BLI_threads.h @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index 3a533f73d9d..18c2aa3313c 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -79,36 +79,36 @@ #define MAX4(x,y,z,a) MAX2( MAX2((x),(y)) , MAX2((z),(a)) ) #define INIT_MINMAX(min, max) { \ - (min)[0]= (min)[1]= (min)[2]= 1.0e30f; \ - (max)[0]= (max)[1]= (max)[2]= -1.0e30f; \ + (min)[0] = (min)[1] = (min)[2] = 1.0e30f; \ + (max)[0] = (max)[1] = (max)[2] = -1.0e30f; \ } #define INIT_MINMAX2(min, max) { \ - (min)[0]= (min)[1]= 1.0e30f; \ - (max)[0]= (max)[1]= -1.0e30f; \ + (min)[0] = (min)[1] = 1.0e30f; \ + (max)[0] = (max)[1] = -1.0e30f; \ } (void)0 #define DO_MIN(vec, min) { \ - if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \ - if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \ - if( (min)[2]>(vec)[2] ) (min)[2]= (vec)[2]; \ + if ((min)[0] > (vec)[0]) (min)[0] = (vec)[0]; \ + if ((min)[1] > (vec)[1]) (min)[1] = (vec)[1]; \ + if ((min)[2] > (vec)[2]) (min)[2] = (vec)[2]; \ } (void)0 #define DO_MAX(vec, max) { \ - if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \ - if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1]; \ - if( (max)[2]<(vec)[2] ) (max)[2]= (vec)[2]; \ + if ((max)[0] < (vec)[0]) (max)[0] = (vec)[0]; \ + if ((max)[1] < (vec)[1]) (max)[1] = (vec)[1]; \ + if ((max)[2] < (vec)[2]) (max)[2] = (vec)[2]; \ } (void)0 #define DO_MINMAX(vec, min, max) { \ - if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \ - if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \ - if( (min)[2]>(vec)[2] ) (min)[2]= (vec)[2]; \ - if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \ - if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1]; \ - if( (max)[2]<(vec)[2] ) (max)[2]= (vec)[2]; \ + if ((min)[0] > (vec)[0] ) (min)[0] = (vec)[0]; \ + if ((min)[1] > (vec)[1] ) (min)[1] = (vec)[1]; \ + if ((min)[2] > (vec)[2] ) (min)[2] = (vec)[2]; \ + if ((max)[0] < (vec)[0] ) (max)[0] = (vec)[0]; \ + if ((max)[1] < (vec)[1] ) (max)[1] = (vec)[1]; \ + if ((max)[2] < (vec)[2] ) (max)[2] = (vec)[2]; \ } (void)0 #define DO_MINMAX2(vec, min, max) { \ - if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \ - if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \ - if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \ - if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1]; \ + if ((min)[0] > (vec)[0] ) (min)[0] = (vec)[0]; \ + if ((min)[1] > (vec)[1] ) (min)[1] = (vec)[1]; \ + if ((max)[0] < (vec)[0] ) (max)[0] = (vec)[0]; \ + if ((max)[1] < (vec)[1] ) (max)[1] = (vec)[1]; \ } (void)0 /* some math and copy defines */ diff --git a/source/blender/blenlib/BLI_uvproject.h b/source/blender/blenlib/BLI_uvproject.h index 5abad87452c..516a9b8b237 100644 --- a/source/blender/blenlib/BLI_uvproject.h +++ b/source/blender/blenlib/BLI_uvproject.h @@ -24,22 +24,22 @@ * \ingroup bli */ -struct UvCameraInfo; +struct ProjCameraInfo; struct Object; /* create uv info from the camera, needs to be freed */ -struct UvCameraInfo *project_camera_info(struct Object *ob, float rotmat[4][4], float winx, float winy); +struct ProjCameraInfo *BLI_uvproject_camera_info(struct Object *ob, float rotmat[4][4], float winx, float winy); /* apply uv from uvinfo (camera) */ -void project_from_camera(float target[2], float source[3], struct UvCameraInfo *uci); +void BLI_uvproject_from_camera(float target[2], float source[3], struct ProjCameraInfo *uci); /* apply uv from perspective matrix */ -void project_from_view(float target[2], float source[3], float persmat[4][4], float rotmat[4][4], float winx, float winy); +void BLI_uvproject_from_view(float target[2], float source[3], float persmat[4][4], float rotmat[4][4], float winx, float winy); /* apply ortho uv's */ -void project_from_view_ortho(float target[2], float source[3], float rotmat[4][4]); +void BLI_uvproject_from_view_ortho(float target[2], float source[3], float rotmat[4][4]); /* so we can adjust scale with keeping the struct private */ -void project_camera_info_scale(struct UvCameraInfo *uci, float scale_x, float scale_y); +void BLI_uvproject_camera_info_scale(struct ProjCameraInfo *uci, float scale_x, float scale_y); #endif diff --git a/source/blender/blenlib/BLI_voxel.h b/source/blender/blenlib/BLI_voxel.h index 4a13810a705..7b92ac05d29 100644 --- a/source/blender/blenlib/BLI_voxel.h +++ b/source/blender/blenlib/BLI_voxel.h @@ -33,12 +33,12 @@ */ /** find the index number of a voxel, given x/y/z integer coords and resolution vector */ -#define V_I(x, y, z, res) ( (z)*(res)[1]*(res)[0] + (y)*(res)[0] + (x) ) +#define BLI_VOXEL_INDEX(x, y, z, res) ((z) * (res)[1] * (res)[0] + (y) * (res)[0] + (x)) /* all input coordinates must be in bounding box 0.0 - 1.0 */ -float voxel_sample_nearest(float *data, const int res[3], const float co[3]); -float voxel_sample_trilinear(float *data, const int res[3], const float co[3]); -float voxel_sample_triquadratic(float *data, const int res[3], const float co[3]); -float voxel_sample_tricubic(float *data, const int res[3], const float co[3], int bspline); +float BLI_voxel_sample_nearest(float *data, const int res[3], const float co[3]); +float BLI_voxel_sample_trilinear(float *data, const int res[3], const float co[3]); +float BLI_voxel_sample_triquadratic(float *data, const int res[3], const float co[3]); +float BLI_voxel_sample_tricubic(float *data, const int res[3], const float co[3], int bspline); #endif /* __BLI_VOXEL_H__ */ diff --git a/source/blender/blenlib/PIL_time.h b/source/blender/blenlib/PIL_time.h index 7d34d33d686..c3c10239a8e 100644 --- a/source/blender/blenlib/PIL_time.h +++ b/source/blender/blenlib/PIL_time.h @@ -1,6 +1,4 @@ -/* - * Platform independent time functions. - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -29,6 +27,7 @@ /** \file blender/blenlib/PIL_time.h * \ingroup bli + * \brief Platform independent time functions. */ diff --git a/source/blender/blenlib/intern/BLI_args.c b/source/blender/blenlib/intern/BLI_args.c index cd904030bb9..ed3c6fad1a0 100644 --- a/source/blender/blenlib/intern/BLI_args.c +++ b/source/blender/blenlib/intern/BLI_args.c @@ -1,7 +1,4 @@ /* - * A general argument parsing module - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,9 +27,9 @@ /** \file blender/blenlib/intern/BLI_args.c * \ingroup bli + * \brief A general argument parsing module */ - #include <ctype.h> /* for tolower */ #include <string.h> diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c index 28b4794ed1b..4dba726cb61 100644 --- a/source/blender/blenlib/intern/BLI_ghash.c +++ b/source/blender/blenlib/intern/BLI_ghash.c @@ -305,7 +305,7 @@ int BLI_ghashutil_strcmp(const void *a, const void *b) return strcmp(a, b); } -GHashPair *BLI_ghashutil_pairalloc(const void *first, int second) +GHashPair *BLI_ghashutil_pairalloc(const void *first, const void *second) { GHashPair *pair = MEM_mallocN(sizeof(GHashPair), "GHashPair"); pair->first = first; @@ -317,7 +317,7 @@ unsigned int BLI_ghashutil_pairhash(const void *ptr) { const GHashPair *pair = ptr; unsigned int hash = BLI_ghashutil_ptrhash(pair->first); - return hash ^ BLI_ghashutil_inthash(SET_INT_IN_POINTER(pair->second)); + return hash ^ BLI_ghashutil_ptrhash(pair->second); } int BLI_ghashutil_paircmp(const void *a, const void *b) @@ -327,7 +327,7 @@ int BLI_ghashutil_paircmp(const void *a, const void *b) int cmp = BLI_ghashutil_ptrcmp(A->first, B->first); if (cmp == 0) - return BLI_ghashutil_intcmp(SET_INT_IN_POINTER(A->second), SET_INT_IN_POINTER(B->second)); + return BLI_ghashutil_ptrcmp(A->second, B->second); return cmp; } diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index 3921c01d2cf..8662406b0e9 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -129,7 +129,7 @@ static float KDOP_AXES[13][3] = /* * Generic push and pop heap */ -#define PUSH_HEAP_BODY(HEAP_TYPE,PRIORITY,heap,heap_size) \ +#define PUSH_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \ { \ HEAP_TYPE element = heap[heap_size-1]; \ int child = heap_size-1; \ @@ -146,7 +146,7 @@ static float KDOP_AXES[13][3] = heap[child] = element; \ } -#define POP_HEAP_BODY(HEAP_TYPE, PRIORITY,heap,heap_size) \ +#define POP_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \ { \ HEAP_TYPE element = heap[heap_size-1]; \ int parent = 0; \ @@ -177,7 +177,7 @@ static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, in if (*memblock == local_memblock) { new_memblock = malloc( size_per_item * new_max_size ); - memcpy( new_memblock, *memblock, size_per_item * *max_size ); + memcpy(new_memblock, *memblock, size_per_item * *max_size); } else new_memblock = realloc(*memblock, size_per_item * new_max_size ); @@ -215,7 +215,7 @@ static int floor_lg(int a) */ static void bvh_insertionsort(BVHNode **a, int lo, int hi, int axis) { - int i,j; + int i, j; BVHNode *t; for (i=lo; i < hi; i++) { j=i; @@ -237,7 +237,7 @@ static int bvh_partition(BVHNode **a, int lo, int hi, BVHNode * x, int axis) while (x->bv[axis] < (a[j])->bv[axis]) j--; if (!(i < j)) return i; - SWAP( BVHNode* , a[i], a[j]); + SWAP(BVHNode *, a[i], a[j]); i++; } } @@ -269,12 +269,12 @@ static void bvh_heapsort(BVHNode **a, int lo, int hi, int axis) int n = hi-lo, i; for (i=n/2; i>=1; i=i-1) { - bvh_downheap(a, i,n,lo, axis); + bvh_downheap(a, i, n, lo, axis); } for (i=n; i>1; i=i-1) { - SWAP(BVHNode*, a[lo],a[lo+i-1]); - bvh_downheap(a, 1,i-1,lo, axis); + SWAP(BVHNode*, a[lo], a[lo+i-1]); + bvh_downheap(a, 1, i-1, lo, axis); } } #endif @@ -369,9 +369,9 @@ static void build_skip_links(BVHTree *tree, BVHNode *node, BVHNode *left, BVHNod for (i = 0; i < node->totnode; i++) { if (i+1 < node->totnode) - build_skip_links(tree, node->children[i], left, node->children[i+1] ); + build_skip_links(tree, node->children[i], left, node->children[i + 1]); else - build_skip_links(tree, node->children[i], left, right ); + build_skip_links(tree, node->children[i], left, right); left = node->children[i]; } @@ -409,7 +409,7 @@ static void create_kdop_hull(BVHTree *tree, BVHNode *node, const float *co, int // depends on the fact that the BVH's for each face is already build static void refit_kdop_hull(BVHTree *tree, BVHNode *node, int start, int end) { - float newmin,newmax; + float newmin, newmax; int i, j; float *bv = node->bv; @@ -671,7 +671,7 @@ static int implicit_needed_branches(int tree_type, int leafs) * - if all elements are different all partition will get the same subset of elements * as if the array was sorted. * - * partition P is described as the elements in the range ( nth[P] , nth[P+1] ] + * partition P is described as the elements in the range ( nth[P], nth[P+1] ] * * TODO: This can be optimized a bit by doing a specialized nth_element instead of K nth_elements */ @@ -1180,14 +1180,14 @@ typedef struct NodeDistance } NodeDistance; -#define NodeDistance_priority(a,b) ( (a).dist < (b).dist ) +#define NodeDistance_priority(a, b) ( (a).dist < (b).dist ) // TODO: use a priority queue to reduce the number of nodes looked on static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node) { if (node->totnode == 0) { if (data->callback) - data->callback(data->userdata , node->index, data->co, &data->nearest); + data->callback(data->userdata, node->index, data->co, &data->nearest); else { data->nearest.index = node->index; data->nearest.dist = calc_nearest_point(data->proj, node, data->nearest.co); @@ -1329,7 +1329,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *n } if (nearest) { - memcpy( &data.nearest , nearest, sizeof(*nearest) ); + memcpy(&data.nearest, nearest, sizeof(*nearest)); } else { data.nearest.index = -1; @@ -1518,7 +1518,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f if (hit) - memcpy( &data.hit, hit, sizeof(*hit) ); + memcpy(&data.hit, hit, sizeof(*hit)); else { data.hit.index = -1; data.hit.dist = FLT_MAX; @@ -1531,7 +1531,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f if (hit) - memcpy( hit, &data.hit, sizeof(*hit) ); + memcpy(hit, &data.hit, sizeof(*hit)); return data.hit.index; } @@ -1610,7 +1610,7 @@ static void dfs_range_query(RangeQueryData *data, BVHNode *node) data->callback(data->userdata, node->children[i]->index, dist); } else - dfs_range_query( data, node->children[i] ); + dfs_range_query(data, node->children[i]); } } } @@ -1639,7 +1639,7 @@ int BLI_bvhtree_range_query(BVHTree *tree, const float co[3], float radius, BVHT data.callback(data.userdata, root->index, dist); } else - dfs_range_query( &data, root ); + dfs_range_query(&data, root); } } diff --git a/source/blender/blenlib/intern/BLI_kdtree.c b/source/blender/blenlib/intern/BLI_kdtree.c index ee06f32a934..a518d1445e3 100644 --- a/source/blender/blenlib/intern/BLI_kdtree.c +++ b/source/blender/blenlib/intern/BLI_kdtree.c @@ -167,7 +167,7 @@ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest * root= tree->root; min_node= root; - min_dist= squared_distance(root->co,co,root->nor,nor); + min_dist= squared_distance(root->co, co, root->nor, nor); if (co[root->d] < root->co[root->d]) { if (root->right) @@ -191,7 +191,7 @@ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest * cur_dist= -cur_dist*cur_dist; if (-cur_dist<min_dist) { - cur_dist=squared_distance(node->co,co,node->nor,nor); + cur_dist=squared_distance(node->co, co, node->nor, nor); if (cur_dist<min_dist) { min_dist=cur_dist; min_node=node; @@ -206,7 +206,7 @@ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest * cur_dist= cur_dist*cur_dist; if (cur_dist<min_dist) { - cur_dist=squared_distance(node->co,co,node->nor,nor); + cur_dist=squared_distance(node->co, co, node->nor, nor); if (cur_dist<min_dist) { min_dist=cur_dist; min_node=node; @@ -219,7 +219,7 @@ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest * } if (cur+3 > totstack) { KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack"); - memcpy(temp,stack,totstack*sizeof(KDTreeNode*)); + memcpy(temp, stack, totstack*sizeof(KDTreeNode*)); if (stack != defaultstack) MEM_freeN(stack); stack=temp; @@ -273,8 +273,8 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree root= tree->root; - cur_dist= squared_distance(root->co,co,root->nor,nor); - add_nearest(nearest,&found,n,root->index,cur_dist,root->co); + cur_dist= squared_distance(root->co, co, root->nor, nor); + add_nearest(nearest, &found, n, root->index, cur_dist, root->co); if (co[root->d] < root->co[root->d]) { if (root->right) @@ -298,10 +298,10 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree cur_dist= -cur_dist*cur_dist; if (found<n || -cur_dist<nearest[found-1].dist) { - cur_dist=squared_distance(node->co,co,node->nor,nor); + cur_dist=squared_distance(node->co, co, node->nor, nor); if (found<n || cur_dist<nearest[found-1].dist) - add_nearest(nearest,&found,n,node->index,cur_dist,node->co); + add_nearest(nearest, &found, n, node->index, cur_dist, node->co); if (node->left) stack[cur++]=node->left; @@ -313,9 +313,9 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree cur_dist= cur_dist*cur_dist; if (found<n || cur_dist<nearest[found-1].dist) { - cur_dist=squared_distance(node->co,co,node->nor,nor); + cur_dist=squared_distance(node->co, co, node->nor, nor); if (found<n || cur_dist<nearest[found-1].dist) - add_nearest(nearest,&found,n,node->index,cur_dist,node->co); + add_nearest(nearest, &found, n, node->index, cur_dist, node->co); if (node->right) stack[cur++]=node->right; @@ -325,7 +325,7 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree } if (cur+3 > totstack) { KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack"); - memcpy(temp,stack,totstack*sizeof(KDTreeNode*)); + memcpy(temp, stack, totstack * sizeof(KDTreeNode*)); if (stack != defaultstack) MEM_freeN(stack); stack=temp; @@ -432,7 +432,7 @@ int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KD if (cur+3 > totstack) { KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack"); - memcpy(temp,stack,totstack*sizeof(KDTreeNode*)); + memcpy(temp, stack, totstack*sizeof(KDTreeNode*)); if (stack != defaultstack) MEM_freeN(stack); stack=temp; diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c index 7c5ee236a35..6398bd863db 100644 --- a/source/blender/blenlib/intern/DLRB_tree.c +++ b/source/blender/blenlib/intern/DLRB_tree.c @@ -44,7 +44,7 @@ DLRBT_Tree *BLI_dlrbTree_new (void) } /* Just zero out the pointers used */ -void BLI_dlrbTree_init (DLRBT_Tree *tree) +void BLI_dlrbTree_init(DLRBT_Tree *tree) { if (tree == NULL) return; @@ -68,7 +68,7 @@ static void recursive_tree_free_nodes (DLRBT_Node *node) } /* Free the given tree's data but not the tree itself */ -void BLI_dlrbTree_free (DLRBT_Tree *tree) +void BLI_dlrbTree_free(DLRBT_Tree *tree) { if (tree == NULL) return; @@ -113,7 +113,7 @@ static void linkedlist_sync_add_node (DLRBT_Tree *tree, DLRBT_Node *node) } /* Make sure the tree's Double-Linked list representation is valid */ -void BLI_dlrbTree_linkedlist_sync (DLRBT_Tree *tree) +void BLI_dlrbTree_linkedlist_sync(DLRBT_Tree *tree) { /* sanity checks */ if (tree == NULL) @@ -486,7 +486,7 @@ static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node) /* Balance the tree after the given element has been added to it * (using custom code, in the Binary Tree way). */ -void BLI_dlrbTree_insert (DLRBT_Tree *tree, DLRBT_Node *node) +void BLI_dlrbTree_insert(DLRBT_Tree *tree, DLRBT_Node *node) { /* sanity checks */ if ((tree == NULL) || (node == NULL)) diff --git a/source/blender/blenlib/intern/boxpack2d.c b/source/blender/blenlib/intern/boxpack2d.c index 6631e36fc72..f1931d35819 100644 --- a/source/blender/blenlib/intern/boxpack2d.c +++ b/source/blender/blenlib/intern/boxpack2d.c @@ -38,14 +38,14 @@ typedef struct boxVert { float y; short free; - struct boxPack *trb; /* top right box */ - struct boxPack *blb; /* bottom left box */ - struct boxPack *brb; /* bottom right box */ - struct boxPack *tlb; /* top left box */ + struct BoxPack *trb; /* top right box */ + struct BoxPack *blb; /* bottom left box */ + struct BoxPack *brb; /* bottom right box */ + struct BoxPack *tlb; /* top left box */ /* Store last intersecting boxes here * speedup intersection testing */ - struct boxPack *isect_cache[4]; + struct BoxPack *isect_cache[4]; int index; } boxVert; @@ -105,7 +105,7 @@ typedef struct boxVert { /* qsort function - sort largest to smallest */ static int box_areasort(const void *p1, const void *p2) { - const boxPack *b1 = p1, *b2 = p2; + const BoxPack *b1 = p1, *b2 = p2; const float a1 = BOXAREA(b1); const float a2 = BOXAREA(b2); @@ -152,12 +152,12 @@ static int vertex_sort(const void *p1, const void *p2) * len - the number of boxes in the array. * tot_width and tot_height are set so you can normalize the data. * */ -void boxPack2D(boxPack *boxarray, const int len, float *tot_width, float *tot_height) +void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *tot_height) { boxVert *vert; /* the current vert */ int box_index, verts_pack_len, i, j, k, isect; int quad_flags[4] = {BLF, TRF, TLF, BRF}; /* use for looping */ - boxPack *box, *box_test; /*current box and another for intersection tests*/ + BoxPack *box, *box_test; /*current box and another for intersection tests*/ int *vertex_pack_indices; /*an array of indices used for sorting verts*/ if (!len) { @@ -167,11 +167,11 @@ void boxPack2D(boxPack *boxarray, const int len, float *tot_width, float *tot_he } /* Sort boxes, biggest first */ - qsort(boxarray, len, sizeof(boxPack), box_areasort); + qsort(boxarray, len, sizeof(BoxPack), box_areasort); /* add verts to the boxes, these are only used internally */ - vert = vertarray = MEM_mallocN(len * 4 * sizeof(boxVert), "boxPack Verts"); - vertex_pack_indices = MEM_mallocN(len * 3 * sizeof(int), "boxPack Indices"); + vert = vertarray = MEM_mallocN(len * 4 * sizeof(boxVert), "BoxPack Verts"); + vertex_pack_indices = MEM_mallocN(len * 3 * sizeof(int), "BoxPack Indices"); for (box = boxarray, box_index = 0, i = 0; box_index < len; box_index++, box++) { diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c index 196a9a9fc47..9d3f4c4fd2f 100644 --- a/source/blender/blenlib/intern/bpath.c +++ b/source/blender/blenlib/intern/bpath.c @@ -93,9 +93,9 @@ static int checkMissingFiles_visit_cb(void *userdata, char *UNUSED(path_dst), co } /* high level function */ -void checkMissingFiles(Main *bmain, ReportList *reports) +void BLI_bpath_missing_files_check(Main *bmain, ReportList *reports) { - bpath_traverse_main(bmain, checkMissingFiles_visit_cb, BPATH_TRAVERSE_ABS, reports); + BLI_bpath_traverse_main(bmain, checkMissingFiles_visit_cb, BLI_BPATH_TRAVERSE_ABS, reports); } typedef struct BPathRemap_Data { @@ -130,7 +130,7 @@ static int makeFilesRelative_visit_cb(void *userdata, char *path_dst, const char } } -void makeFilesRelative(Main *bmain, const char *basedir, ReportList *reports) +void BLI_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports) { BPathRemap_Data data = {NULL}; @@ -142,7 +142,7 @@ void makeFilesRelative(Main *bmain, const char *basedir, ReportList *reports) data.basedir = basedir; data.reports = reports; - bpath_traverse_main(bmain, makeFilesRelative_visit_cb, 0, (void *)&data); + BLI_bpath_traverse_main(bmain, makeFilesRelative_visit_cb, 0, (void *)&data); BKE_reportf(reports, data.count_failed ? RPT_WARNING : RPT_INFO, "Total files %d|Changed %d|Failed %d", @@ -172,8 +172,8 @@ static int makeFilesAbsolute_visit_cb(void *userdata, char *path_dst, const char } } -/* similar to makeFilesRelative - keep in sync! */ -void makeFilesAbsolute(Main *bmain, const char *basedir, ReportList *reports) +/* similar to BLI_bpath_relative_convert - keep in sync! */ +void BLI_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports) { BPathRemap_Data data = {NULL}; @@ -185,7 +185,7 @@ void makeFilesAbsolute(Main *bmain, const char *basedir, ReportList *reports) data.basedir = basedir; data.reports = reports; - bpath_traverse_main(bmain, makeFilesAbsolute_visit_cb, 0, (void *)&data); + BLI_bpath_traverse_main(bmain, makeFilesAbsolute_visit_cb, 0, (void *)&data); BKE_reportf(reports, data.count_failed ? RPT_WARNING : RPT_INFO, "Total files %d|Changed %d|Failed %d", @@ -294,14 +294,14 @@ static int findMissingFiles_visit_cb(void *userdata, char *path_dst, const char } } -void findMissingFiles(Main *bmain, const char *searchpath, ReportList *reports) +void BLI_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports) { struct BPathFind_Data data = {NULL}; data.reports = reports; BLI_split_dir_part(searchpath, data.searchdir, sizeof(data.searchdir)); - bpath_traverse_main(bmain, findMissingFiles_visit_cb, 0, (void *)&data); + BLI_bpath_traverse_main(bmain, findMissingFiles_visit_cb, 0, (void *)&data); } /* Run a visitor on a string, replacing the contents of the string as needed. */ @@ -379,19 +379,19 @@ static int rewrite_path_alloc(char **path, BPathVisitor visit_cb, const char *ab } /* Run visitor function 'visit' on all paths contained in 'id'. */ -void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int flag, void *bpath_user_data) +void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int flag, void *bpath_user_data) { Image *ima; - const char *absbase = (flag & BPATH_TRAVERSE_ABS) ? ID_BLEND_PATH(bmain, id) : NULL; + const char *absbase = (flag & BLI_BPATH_TRAVERSE_ABS) ? ID_BLEND_PATH(bmain, id) : NULL; - if ((flag & BPATH_TRAVERSE_SKIP_LIBRARY) && id->lib) { + if ((flag & BLI_BPATH_TRAVERSE_SKIP_LIBRARY) && id->lib) { return; } switch (GS(id->name)) { case ID_IM: ima= (Image *)id; - if (ima->packedfile == NULL || (flag & BPATH_TRAVERSE_SKIP_PACKED) == 0) { + if (ima->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) { if (ELEM3(ima->source, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { rewrite_path_fixed(ima->name, visit_cb, absbase, bpath_user_data); } @@ -471,7 +471,7 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla case ID_SO: { bSound *sound= (bSound *)id; - if (sound->packedfile == NULL || (flag & BPATH_TRAVERSE_SKIP_PACKED) == 0) { + if (sound->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) { rewrite_path_fixed(sound->name, visit_cb, absbase, bpath_user_data); } } @@ -484,7 +484,7 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla case ID_VF: { VFont *vf= (VFont *)id; - if (vf->packedfile == NULL || (flag & BPATH_TRAVERSE_SKIP_PACKED) == 0) { + if (vf->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) { if (strcmp(vf->name, FO_BUILTIN_NAME) != 0) { rewrite_path_fixed(((VFont *)id)->name, visit_cb, absbase, bpath_user_data); } @@ -512,7 +512,8 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla if (scene->ed) { Sequence *seq; - SEQ_BEGIN (scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) + { if (SEQ_HAS_PATH(seq)) { if (ELEM(seq->type, SEQ_MOVIE, SEQ_SOUND)) { rewrite_path_fixed_dirfile(seq->strip->dir, seq->strip->stripdata->name, @@ -524,7 +525,7 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla int len= MEM_allocN_len(se) / sizeof(*se); int i; - if (flag & BPATH_TRAVERSE_SKIP_MULTIFILE) { + if (flag & BLI_BPATH_TRAVERSE_SKIP_MULTIFILE) { /* only operate on one path */ len= MIN2(1, len); } @@ -582,26 +583,26 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla } } -void bpath_traverse_id_list(Main *bmain, ListBase *lb, BPathVisitor visit_cb, const int flag, void *bpath_user_data) +void BLI_bpath_traverse_id_list(Main *bmain, ListBase *lb, BPathVisitor visit_cb, const int flag, void *bpath_user_data) { ID *id; for (id = lb->first; id; id = id->next) { - bpath_traverse_id(bmain, id, visit_cb, flag, bpath_user_data); + BLI_bpath_traverse_id(bmain, id, visit_cb, flag, bpath_user_data); } } -void bpath_traverse_main(Main *bmain, BPathVisitor visit_cb, const int flag, void *bpath_user_data) +void BLI_bpath_traverse_main(Main *bmain, BPathVisitor visit_cb, const int flag, void *bpath_user_data) { ListBase *lbarray[MAX_LIBARRAY]; int a = set_listbasepointers(bmain, lbarray); while (a--) { - bpath_traverse_id_list(bmain, lbarray[a], visit_cb, flag, bpath_user_data); + BLI_bpath_traverse_id_list(bmain, lbarray[a], visit_cb, flag, bpath_user_data); } } /* Rewrites a relative path to be relative to the main file - unless the path is * absolute, in which case it is not altered. */ -int bpath_relocate_visitor(void *pathbase_v, char *path_dst, const char *path_src) +int BLI_bpath_relocate_visitor(void *pathbase_v, char *path_dst, const char *path_src) { /* be sure there is low chance of the path being too short */ char filepath[(FILE_MAXDIR * 2) + FILE_MAXFILE]; diff --git a/source/blender/blenlib/intern/callbacks.c b/source/blender/blenlib/intern/callbacks.c index 0cb986d9090..876599f7480 100644 --- a/source/blender/blenlib/intern/callbacks.c +++ b/source/blender/blenlib/intern/callbacks.c @@ -28,7 +28,7 @@ static ListBase callback_slots[BLI_CB_EVT_TOT]= {{NULL}}; -void BLI_exec_cb(struct Main *main, struct ID *self, eCbEvent evt) +void BLI_callback_exec(struct Main *main, struct ID *self, eCbEvent evt) { ListBase *lb= &callback_slots[evt]; bCallbackFuncStore *funcstore; @@ -38,19 +38,19 @@ void BLI_exec_cb(struct Main *main, struct ID *self, eCbEvent evt) } } -void BLI_add_cb(bCallbackFuncStore *funcstore, eCbEvent evt) +void BLI_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt) { ListBase *lb= &callback_slots[evt]; BLI_addtail(lb, funcstore); } -void BLI_cb_init(void) +void BLI_callback_global_init(void) { /* do nothing */ } /* call on application exit */ -void BLI_cb_finalize(void) +void BLI_callback_global_finalize(void) { eCbEvent evt; for (evt= 0; evt < BLI_CB_EVT_TOT; evt++) { diff --git a/source/blender/blenlib/intern/cpu.c b/source/blender/blenlib/intern/cpu.c index 0a805293a05..4e2003dcbf7 100644 --- a/source/blender/blenlib/intern/cpu.c +++ b/source/blender/blenlib/intern/cpu.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 8990f0f79d3..0a5e4d9fd48 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -82,7 +82,7 @@ int BLI_file_gzip(const char *from, const char *to) gzfile = BLI_gzopen(to, "wb1"); if (gzfile == NULL) return -1; - file = BLI_open(from, O_BINARY|O_RDONLY,0); + file = BLI_open(from, O_BINARY|O_RDONLY, 0); if (file < 0) return -2; @@ -223,17 +223,17 @@ void *BLI_gzopen(const char *filename, const char *mode) /* xxx Creates file before transcribing the path */ if (mode[0] == 'w') - fclose(ufopen(filename,"a")); + fclose(ufopen(filename, "a")); UTF16_ENCODE(filename); - GetShortPathNameW(filename_16,short_name_16, 256); + GetShortPathNameW(filename_16, short_name_16, 256); for (i = 0; i < 256; i++) { short_name[i] = (char)short_name_16[i]; } - gzfile = gzopen(short_name,mode); + gzfile = gzopen(short_name, mode); UTF16_UN_ENCODE(filename); } @@ -367,7 +367,7 @@ void BLI_dir_create_recursive(const char *dirname) if (dirname[0]) /* patch, this recursive loop tries to create a nameless directory */ if (umkdir(dirname)==-1) - printf("Unable to create directory %s\n",dirname); + printf("Unable to create directory %s\n", dirname); } int BLI_rename(const char *from, const char *to) diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c index 8f2a2e6f8b5..c9f7b7c7e64 100644 --- a/source/blender/blenlib/intern/freetypefont.c +++ b/source/blender/blenlib/intern/freetypefont.c @@ -82,7 +82,7 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf FT_Outline ftoutline; float scale, height; float dx, dy; - int j,k,l,m=0; + int j, k, l, m=0; // adjust font size height= ((double) face->bbox.yMax - (double) face->bbox.yMin); @@ -116,8 +116,8 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf che->width= glyph->advance.x * scale; // Start converting the FT data - npoints = (int *)MEM_callocN((ftoutline.n_contours) * sizeof(int),"endpoints"); - onpoints = (int *)MEM_callocN((ftoutline.n_contours) * sizeof(int),"onpoints"); + npoints = (int *)MEM_callocN((ftoutline.n_contours) * sizeof(int), "endpoints"); + onpoints = (int *)MEM_callocN((ftoutline.n_contours) * sizeof(int), "onpoints"); // calculate total points of each contour for (j = 0; j < ftoutline.n_contours; j++) { @@ -271,7 +271,7 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf // len_squared_v2v2, see if there's a distance between the three points // len_squared_v2v2 again, to check the angle between the handles // finally, check if one of them is a vector handle - if ((dist_to_line_v2(bezt->vec[0],bezt->vec[1],bezt->vec[2]) < 0.001f) && + if ((dist_to_line_v2(bezt->vec[0], bezt->vec[1], bezt->vec[2]) < 0.001f) && (len_squared_v2v2(bezt->vec[0], bezt->vec[1]) > 0.0001f*0.0001f) && (len_squared_v2v2(bezt->vec[1], bezt->vec[2]) > 0.0001f*0.0001f) && (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > 0.0002f*0.0001f) && @@ -304,7 +304,7 @@ static int objchr_to_ftvfontdata(VFont *vfont, FT_ULong charcode) // Load the font to memory if (tf->pf) { - err= FT_New_Memory_Face( library, + err= FT_New_Memory_Face(library, tf->pf->data, tf->pf->size, 0, @@ -342,7 +342,7 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf) #endif // load the freetype font - err = FT_New_Memory_Face( library, + err = FT_New_Memory_Face(library, pf->data, pf->size, 0, @@ -351,10 +351,10 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf) if (err) return NULL; #if 0 - for ( n = 0; n < face->num_charmaps; n++ ) + for (n = 0; n < face->num_charmaps; n++) { charmap = face->charmaps[n]; - if ( charmap->platform_id == my_platform_id && + if (charmap->platform_id == my_platform_id && charmap->encoding_id == my_encoding_id ) { found = charmap; @@ -362,11 +362,11 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf) } } - if ( !found ) { return NULL; } + if (!found ) { return NULL; } // now, select the charmap for the face object - err = FT_Set_Charmap( face, found ); - if ( err ) { return NULL; } + err = FT_Set_Charmap(face, found); + if (err) { return NULL; } #endif // allocate blender font @@ -393,7 +393,7 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf) } } - err = FT_Set_Charmap( face, found ); + err = FT_Set_Charmap(face, found); if ( err ) return NULL; @@ -498,7 +498,7 @@ VFontData *BLI_vfontdata_from_freetypefont(PackedFile *pf) } //free Freetype - FT_Done_FreeType( library); + FT_Done_FreeType(library); return vfd; } @@ -620,7 +620,7 @@ font driver produces such outlines. Each glyph's original outline points are located on a grid of indivisible units. The points are stored -in the font file as 16-bit integer grid coordinates, with the grid origin's being at (0,0); they thus +in the font file as 16-bit integer grid coordinates, with the grid origin's being at (0, 0); they thus range from -16384 to 16383. Convert conic to bezier arcs: diff --git a/source/blender/blenlib/intern/jitter.c b/source/blender/blenlib/intern/jitter.c index fbdf698cc87..afe31fb1377 100644 --- a/source/blender/blenlib/intern/jitter.c +++ b/source/blender/blenlib/intern/jitter.c @@ -1,7 +1,4 @@ /* - * Jitter offset table - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,9 +27,9 @@ /** \file blender/blenlib/intern/jitter.c * \ingroup bli + * \brief Jitter offset table */ - #include <math.h> #include <string.h> #include "MEM_guardedalloc.h" @@ -43,7 +40,7 @@ void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1) { - int i , j , k; + int i, j, k; float vecx, vecy, dvecx, dvecy, x, y, len; for (i = 2*num-2; i>=0 ; i-=2) { @@ -96,7 +93,7 @@ void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1) jit2[i] = x; jit2[i+1] = y; } - memcpy(jit1,jit2,2 * num * sizeof(float)); + memcpy(jit1, jit2, 2 * num * sizeof(float)); } void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2) @@ -135,11 +132,11 @@ void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2) jit2[i] = x; jit2[i+1] = y; } - memcpy(jit1,jit2,2 * num * sizeof(float)); + memcpy(jit1, jit2, 2 * num * sizeof(float)); } -void BLI_initjit(float *jitarr, int num) +void BLI_jitter_init(float *jitarr, int num) { float *jit2, x, rad1, rad2, rad3; int i; diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index f7114822dfd..19cae7456c9 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -126,7 +126,7 @@ void BLI_freelinkN(ListBase *listbase, void *vlink) if (link == NULL) return; if (listbase == NULL) return; - BLI_remlink(listbase,link); + BLI_remlink(listbase, link); MEM_freeN(link); } diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 76b986d7346..b3b58dca1a6 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -866,6 +866,35 @@ int is_orthonormal_m4(float m[][4]) return 0; } +int is_uniform_scaled_m3(float m[][3]) +{ + const float eps = 1e-7; + float t[3][3]; + float l1, l2, l3, l4, l5, l6; + + copy_m3_m3(t, m); + transpose_m3(t); + + l1 = len_squared_v3(m[0]); + l2 = len_squared_v3(m[1]); + l3 = len_squared_v3(m[2]); + + l4 = len_squared_v3(t[0]); + l5 = len_squared_v3(t[1]); + l6 = len_squared_v3(t[2]); + + if (fabsf(l2 - l1) <= eps && + fabsf(l3 - l1) <= eps && + fabsf(l4 - l1) <= eps && + fabsf(l5 - l1) <= eps && + fabsf(l6 - l1) <= eps) + { + return 1; + } + + return 0; +} + void normalize_m3(float mat[][3]) { normalize_v3(mat[0]); @@ -1674,8 +1703,8 @@ void svd_m4(float U[4][4], float s[4], float V[4][4], float A_[4][4]) // Calculate the shift. float scale = maxf(maxf(maxf(maxf( - fabsf(s[p - 1]),fabsf(s[p - 2])),fabsf(e[p - 2])), - fabsf(s[k])),fabsf(e[k])); + fabsf(s[p - 1]), fabsf(s[p - 2])), fabsf(e[p - 2])), + fabsf(s[k])), fabsf(e[k])); float invscale = 1.0f / scale; float sp = s[p - 1] * invscale; float spm1 = s[p - 2] * invscale; diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c index f734e01943f..90e6a4cb945 100644 --- a/source/blender/blenlib/intern/math_vector.c +++ b/source/blender/blenlib/intern/math_vector.c @@ -217,6 +217,25 @@ float angle_normalized_v2v2(const float v1[2], const float v2[2]) return 2.0f * (float)saasin(len_v2v2(v2, v1) / 2.0f); } +/** + * angle between 2 vectors defined by 3 coords, about an axis. */ +float angle_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3]) +{ + float v1_proj[3], v2_proj[3], tproj[3]; + + sub_v3_v3v3(v1_proj, v1, v2); + sub_v3_v3v3(v2_proj, v3, v2); + + /* project the vectors onto the axis */ + project_v3_v3v3(tproj, v1_proj, axis); + sub_v3_v3(v1_proj, tproj); + + project_v3_v3v3(tproj, v2_proj, axis); + sub_v3_v3(v2_proj, tproj); + + return angle_v3v3(v1_proj, v2_proj); +} + void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]) { float ed1[3], ed2[3], ed3[3]; diff --git a/source/blender/blenlib/intern/noise.c b/source/blender/blenlib/intern/noise.c index 5db42c35f5c..d795f9bf332 100644 --- a/source/blender/blenlib/intern/noise.c +++ b/source/blender/blenlib/intern/noise.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -47,158 +45,225 @@ static float noise3_perlin(float vec[3]); //static float turbulence_perlin(float *point, float lofreq, float hifreq); //static float turbulencep(float noisesize, float x, float y, float z, int nr); -#define HASHVEC(x,y,z) hashvectf+3*hash[ (hash[ (hash[(z) & 255]+(y)) & 255]+(x)) & 255] +#define HASHVEC(x, y, z) hashvectf + 3 * hash[ (hash[ (hash[(z) & 255] + (y)) & 255] + (x)) & 255] /* needed for voronoi */ -#define HASHPNT(x,y,z) hashpntf+3*hash[ (hash[ (hash[(z) & 255]+(y)) & 255]+(x)) & 255] -static float hashpntf[768] = {0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315, -0.377313, 0.678764, 0.744545, 0.097731, 0.396357, 0.247202, 0.520897, -0.613396, 0.542124, 0.146813, 0.255489, 0.810868, 0.638641, 0.980742, -0.292316, 0.357948, 0.114382, 0.861377, 0.629634, 0.722530, 0.714103, -0.048549, 0.075668, 0.564920, 0.162026, 0.054466, 0.411738, 0.156897, -0.887657, 0.599368, 0.074249, 0.170277, 0.225799, 0.393154, 0.301348, -0.057434, 0.293849, 0.442745, 0.150002, 0.398732, 0.184582, 0.915200, -0.630984, 0.974040, 0.117228, 0.795520, 0.763238, 0.158982, 0.616211, -0.250825, 0.906539, 0.316874, 0.676205, 0.234720, 0.667673, 0.792225, -0.273671, 0.119363, 0.199131, 0.856716, 0.828554, 0.900718, 0.705960, -0.635923, 0.989433, 0.027261, 0.283507, 0.113426, 0.388115, 0.900176, -0.637741, 0.438802, 0.715490, 0.043692, 0.202640, 0.378325, 0.450325, -0.471832, 0.147803, 0.906899, 0.524178, 0.784981, 0.051483, 0.893369, -0.596895, 0.275635, 0.391483, 0.844673, 0.103061, 0.257322, 0.708390, -0.504091, 0.199517, 0.660339, 0.376071, 0.038880, 0.531293, 0.216116, -0.138672, 0.907737, 0.807994, 0.659582, 0.915264, 0.449075, 0.627128, -0.480173, 0.380942, 0.018843, 0.211808, 0.569701, 0.082294, 0.689488, -0.573060, 0.593859, 0.216080, 0.373159, 0.108117, 0.595539, 0.021768, -0.380297, 0.948125, 0.377833, 0.319699, 0.315249, 0.972805, 0.792270, -0.445396, 0.845323, 0.372186, 0.096147, 0.689405, 0.423958, 0.055675, -0.117940, 0.328456, 0.605808, 0.631768, 0.372170, 0.213723, 0.032700, -0.447257, 0.440661, 0.728488, 0.299853, 0.148599, 0.649212, 0.498381, -0.049921, 0.496112, 0.607142, 0.562595, 0.990246, 0.739659, 0.108633, -0.978156, 0.209814, 0.258436, 0.876021, 0.309260, 0.600673, 0.713597, -0.576967, 0.641402, 0.853930, 0.029173, 0.418111, 0.581593, 0.008394, -0.589904, 0.661574, 0.979326, 0.275724, 0.111109, 0.440472, 0.120839, -0.521602, 0.648308, 0.284575, 0.204501, 0.153286, 0.822444, 0.300786, -0.303906, 0.364717, 0.209038, 0.916831, 0.900245, 0.600685, 0.890002, -0.581660, 0.431154, 0.705569, 0.551250, 0.417075, 0.403749, 0.696652, -0.292652, 0.911372, 0.690922, 0.323718, 0.036773, 0.258976, 0.274265, -0.225076, 0.628965, 0.351644, 0.065158, 0.080340, 0.467271, 0.130643, -0.385914, 0.919315, 0.253821, 0.966163, 0.017439, 0.392610, 0.478792, -0.978185, 0.072691, 0.982009, 0.097987, 0.731533, 0.401233, 0.107570, -0.349587, 0.479122, 0.700598, 0.481751, 0.788429, 0.706864, 0.120086, -0.562691, 0.981797, 0.001223, 0.192120, 0.451543, 0.173092, 0.108960, -0.549594, 0.587892, 0.657534, 0.396365, 0.125153, 0.666420, 0.385823, -0.890916, 0.436729, 0.128114, 0.369598, 0.759096, 0.044677, 0.904752, -0.088052, 0.621148, 0.005047, 0.452331, 0.162032, 0.494238, 0.523349, -0.741829, 0.698450, 0.452316, 0.563487, 0.819776, 0.492160, 0.004210, -0.647158, 0.551475, 0.362995, 0.177937, 0.814722, 0.727729, 0.867126, -0.997157, 0.108149, 0.085726, 0.796024, 0.665075, 0.362462, 0.323124, -0.043718, 0.042357, 0.315030, 0.328954, 0.870845, 0.683186, 0.467922, -0.514894, 0.809971, 0.631979, 0.176571, 0.366320, 0.850621, 0.505555, -0.749551, 0.750830, 0.401714, 0.481216, 0.438393, 0.508832, 0.867971, -0.654581, 0.058204, 0.566454, 0.084124, 0.548539, 0.902690, 0.779571, -0.562058, 0.048082, 0.863109, 0.079290, 0.713559, 0.783496, 0.265266, -0.672089, 0.786939, 0.143048, 0.086196, 0.876129, 0.408708, 0.229312, -0.629995, 0.206665, 0.207308, 0.710079, 0.341704, 0.264921, 0.028748, -0.629222, 0.470173, 0.726228, 0.125243, 0.328249, 0.794187, 0.741340, -0.489895, 0.189396, 0.724654, 0.092841, 0.039809, 0.860126, 0.247701, -0.655331, 0.964121, 0.672536, 0.044522, 0.690567, 0.837238, 0.631520, -0.953734, 0.352484, 0.289026, 0.034152, 0.852575, 0.098454, 0.795529, -0.452181, 0.826159, 0.186993, 0.820725, 0.440328, 0.922137, 0.704592, -0.915437, 0.738183, 0.733461, 0.193798, 0.929213, 0.161390, 0.318547, -0.888751, 0.430968, 0.740837, 0.193544, 0.872253, 0.563074, 0.274598, -0.347805, 0.666176, 0.449831, 0.800991, 0.588727, 0.052296, 0.714761, -0.420620, 0.570325, 0.057550, 0.210888, 0.407312, 0.662848, 0.924382, -0.895958, 0.775198, 0.688605, 0.025721, 0.301913, 0.791408, 0.500602, -0.831984, 0.828509, 0.642093, 0.494174, 0.525880, 0.446365, 0.440063, -0.763114, 0.630358, 0.223943, 0.333806, 0.906033, 0.498306, 0.241278, -0.427640, 0.772683, 0.198082, 0.225379, 0.503894, 0.436599, 0.016503, -0.803725, 0.189878, 0.291095, 0.499114, 0.151573, 0.079031, 0.904618, -0.708535, 0.273900, 0.067419, 0.317124, 0.936499, 0.716511, 0.543845, -0.939909, 0.826574, 0.715090, 0.154864, 0.750150, 0.845808, 0.648108, -0.556564, 0.644757, 0.140873, 0.799167, 0.632989, 0.444245, 0.471978, -0.435910, 0.359793, 0.216241, 0.007633, 0.337236, 0.857863, 0.380247, -0.092517, 0.799973, 0.919000, 0.296798, 0.096989, 0.854831, 0.165369, -0.568475, 0.216855, 0.020457, 0.835511, 0.538039, 0.999742, 0.620226, -0.244053, 0.060399, 0.323007, 0.294874, 0.988899, 0.384919, 0.735655, -0.773428, 0.549776, 0.292882, 0.660611, 0.593507, 0.621118, 0.175269, -0.682119, 0.794493, 0.868197, 0.632150, 0.807823, 0.509656, 0.482035, -0.001780, 0.259126, 0.358002, 0.280263, 0.192985, 0.290367, 0.208111, -0.917633, 0.114422, 0.925491, 0.981110, 0.255570, 0.974862, 0.016629, -0.552599, 0.575741, 0.612978, 0.615965, 0.803615, 0.772334, 0.089745, -0.838812, 0.634542, 0.113709, 0.755832, 0.577589, 0.667489, 0.529834, -0.325660, 0.817597, 0.316557, 0.335093, 0.737363, 0.260951, 0.737073, -0.049540, 0.735541, 0.988891, 0.299116, 0.147695, 0.417271, 0.940811, -0.524160, 0.857968, 0.176403, 0.244835, 0.485759, 0.033353, 0.280319, -0.750688, 0.755809, 0.924208, 0.095956, 0.962504, 0.275584, 0.173715, -0.942716, 0.706721, 0.078464, 0.576716, 0.804667, 0.559249, 0.900611, -0.646904, 0.432111, 0.927885, 0.383277, 0.269973, 0.114244, 0.574867, -0.150703, 0.241855, 0.272871, 0.199950, 0.079719, 0.868566, 0.962833, -0.789122, 0.320025, 0.905554, 0.234876, 0.991356, 0.061913, 0.732911, -0.785960, 0.874074, 0.069035, 0.658632, 0.309901, 0.023676, 0.791603, -0.764661, 0.661278, 0.319583, 0.829650, 0.117091, 0.903124, 0.982098, -0.161631, 0.193576, 0.670428, 0.857390, 0.003760, 0.572578, 0.222162, -0.114551, 0.420118, 0.530404, 0.470682, 0.525527, 0.764281, 0.040596, -0.443275, 0.501124, 0.816161, 0.417467, 0.332172, 0.447565, 0.614591, -0.559246, 0.805295, 0.226342, 0.155065, 0.714630, 0.160925, 0.760001, -0.453456, 0.093869, 0.406092, 0.264801, 0.720370, 0.743388, 0.373269, -0.403098, 0.911923, 0.897249, 0.147038, 0.753037, 0.516093, 0.739257, -0.175018, 0.045768, 0.735857, 0.801330, 0.927708, 0.240977, 0.591870, -0.921831, 0.540733, 0.149100, 0.423152, 0.806876, 0.397081, 0.061100, -0.811630, 0.044899, 0.460915, 0.961202, 0.822098, 0.971524, 0.867608, -0.773604, 0.226616, 0.686286, 0.926972, 0.411613, 0.267873, 0.081937, -0.226124, 0.295664, 0.374594, 0.533240, 0.237876, 0.669629, 0.599083, -0.513081, 0.878719, 0.201577, 0.721296, 0.495038, 0.079760, 0.965959, -0.233090, 0.052496, 0.714748, 0.887844, 0.308724, 0.972885, 0.723337, -0.453089, 0.914474, 0.704063, 0.823198, 0.834769, 0.906561, 0.919600, -0.100601, 0.307564, 0.901977, 0.468879, 0.265376, 0.885188, 0.683875, -0.868623, 0.081032, 0.466835, 0.199087, 0.663437, 0.812241, 0.311337, -0.821361, 0.356628, 0.898054, 0.160781, 0.222539, 0.714889, 0.490287, -0.984915, 0.951755, 0.964097, 0.641795, 0.815472, 0.852732, 0.862074, -0.051108, 0.440139, 0.323207, 0.517171, 0.562984, 0.115295, 0.743103, -0.977914, 0.337596, 0.440694, 0.535879, 0.959427, 0.351427, 0.704361, -0.010826, 0.131162, 0.577080, 0.349572, 0.774892, 0.425796, 0.072697, -0.500001, 0.267322, 0.909654, 0.206176, 0.223987, 0.937698, 0.323423, -0.117501, 0.490308, 0.474372, 0.689943, 0.168671, 0.719417, 0.188928, -0.330464, 0.265273, 0.446271, 0.171933, 0.176133, 0.474616, 0.140182, -0.114246, 0.905043, 0.713870, 0.555261, 0.951333}; +#define HASHPNT(x, y, z) hashpntf + 3 * hash[ (hash[ (hash[(z) & 255] + (y)) & 255] + (x)) & 255] +static float hashpntf[768] = { + 0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315, + 0.377313, 0.678764, 0.744545, 0.097731, 0.396357, 0.247202, 0.520897, + 0.613396, 0.542124, 0.146813, 0.255489, 0.810868, 0.638641, 0.980742, + 0.292316, 0.357948, 0.114382, 0.861377, 0.629634, 0.722530, 0.714103, + 0.048549, 0.075668, 0.564920, 0.162026, 0.054466, 0.411738, 0.156897, + 0.887657, 0.599368, 0.074249, 0.170277, 0.225799, 0.393154, 0.301348, + 0.057434, 0.293849, 0.442745, 0.150002, 0.398732, 0.184582, 0.915200, + 0.630984, 0.974040, 0.117228, 0.795520, 0.763238, 0.158982, 0.616211, + 0.250825, 0.906539, 0.316874, 0.676205, 0.234720, 0.667673, 0.792225, + 0.273671, 0.119363, 0.199131, 0.856716, 0.828554, 0.900718, 0.705960, + 0.635923, 0.989433, 0.027261, 0.283507, 0.113426, 0.388115, 0.900176, + 0.637741, 0.438802, 0.715490, 0.043692, 0.202640, 0.378325, 0.450325, + 0.471832, 0.147803, 0.906899, 0.524178, 0.784981, 0.051483, 0.893369, + 0.596895, 0.275635, 0.391483, 0.844673, 0.103061, 0.257322, 0.708390, + 0.504091, 0.199517, 0.660339, 0.376071, 0.038880, 0.531293, 0.216116, + 0.138672, 0.907737, 0.807994, 0.659582, 0.915264, 0.449075, 0.627128, + 0.480173, 0.380942, 0.018843, 0.211808, 0.569701, 0.082294, 0.689488, + 0.573060, 0.593859, 0.216080, 0.373159, 0.108117, 0.595539, 0.021768, + 0.380297, 0.948125, 0.377833, 0.319699, 0.315249, 0.972805, 0.792270, + 0.445396, 0.845323, 0.372186, 0.096147, 0.689405, 0.423958, 0.055675, + 0.117940, 0.328456, 0.605808, 0.631768, 0.372170, 0.213723, 0.032700, + 0.447257, 0.440661, 0.728488, 0.299853, 0.148599, 0.649212, 0.498381, + 0.049921, 0.496112, 0.607142, 0.562595, 0.990246, 0.739659, 0.108633, + 0.978156, 0.209814, 0.258436, 0.876021, 0.309260, 0.600673, 0.713597, + 0.576967, 0.641402, 0.853930, 0.029173, 0.418111, 0.581593, 0.008394, + 0.589904, 0.661574, 0.979326, 0.275724, 0.111109, 0.440472, 0.120839, + 0.521602, 0.648308, 0.284575, 0.204501, 0.153286, 0.822444, 0.300786, + 0.303906, 0.364717, 0.209038, 0.916831, 0.900245, 0.600685, 0.890002, + 0.581660, 0.431154, 0.705569, 0.551250, 0.417075, 0.403749, 0.696652, + 0.292652, 0.911372, 0.690922, 0.323718, 0.036773, 0.258976, 0.274265, + 0.225076, 0.628965, 0.351644, 0.065158, 0.080340, 0.467271, 0.130643, + 0.385914, 0.919315, 0.253821, 0.966163, 0.017439, 0.392610, 0.478792, + 0.978185, 0.072691, 0.982009, 0.097987, 0.731533, 0.401233, 0.107570, + 0.349587, 0.479122, 0.700598, 0.481751, 0.788429, 0.706864, 0.120086, + 0.562691, 0.981797, 0.001223, 0.192120, 0.451543, 0.173092, 0.108960, + 0.549594, 0.587892, 0.657534, 0.396365, 0.125153, 0.666420, 0.385823, + 0.890916, 0.436729, 0.128114, 0.369598, 0.759096, 0.044677, 0.904752, + 0.088052, 0.621148, 0.005047, 0.452331, 0.162032, 0.494238, 0.523349, + 0.741829, 0.698450, 0.452316, 0.563487, 0.819776, 0.492160, 0.004210, + 0.647158, 0.551475, 0.362995, 0.177937, 0.814722, 0.727729, 0.867126, + 0.997157, 0.108149, 0.085726, 0.796024, 0.665075, 0.362462, 0.323124, + 0.043718, 0.042357, 0.315030, 0.328954, 0.870845, 0.683186, 0.467922, + 0.514894, 0.809971, 0.631979, 0.176571, 0.366320, 0.850621, 0.505555, + 0.749551, 0.750830, 0.401714, 0.481216, 0.438393, 0.508832, 0.867971, + 0.654581, 0.058204, 0.566454, 0.084124, 0.548539, 0.902690, 0.779571, + 0.562058, 0.048082, 0.863109, 0.079290, 0.713559, 0.783496, 0.265266, + 0.672089, 0.786939, 0.143048, 0.086196, 0.876129, 0.408708, 0.229312, + 0.629995, 0.206665, 0.207308, 0.710079, 0.341704, 0.264921, 0.028748, + 0.629222, 0.470173, 0.726228, 0.125243, 0.328249, 0.794187, 0.741340, + 0.489895, 0.189396, 0.724654, 0.092841, 0.039809, 0.860126, 0.247701, + 0.655331, 0.964121, 0.672536, 0.044522, 0.690567, 0.837238, 0.631520, + 0.953734, 0.352484, 0.289026, 0.034152, 0.852575, 0.098454, 0.795529, + 0.452181, 0.826159, 0.186993, 0.820725, 0.440328, 0.922137, 0.704592, + 0.915437, 0.738183, 0.733461, 0.193798, 0.929213, 0.161390, 0.318547, + 0.888751, 0.430968, 0.740837, 0.193544, 0.872253, 0.563074, 0.274598, + 0.347805, 0.666176, 0.449831, 0.800991, 0.588727, 0.052296, 0.714761, + 0.420620, 0.570325, 0.057550, 0.210888, 0.407312, 0.662848, 0.924382, + 0.895958, 0.775198, 0.688605, 0.025721, 0.301913, 0.791408, 0.500602, + 0.831984, 0.828509, 0.642093, 0.494174, 0.525880, 0.446365, 0.440063, + 0.763114, 0.630358, 0.223943, 0.333806, 0.906033, 0.498306, 0.241278, + 0.427640, 0.772683, 0.198082, 0.225379, 0.503894, 0.436599, 0.016503, + 0.803725, 0.189878, 0.291095, 0.499114, 0.151573, 0.079031, 0.904618, + 0.708535, 0.273900, 0.067419, 0.317124, 0.936499, 0.716511, 0.543845, + 0.939909, 0.826574, 0.715090, 0.154864, 0.750150, 0.845808, 0.648108, + 0.556564, 0.644757, 0.140873, 0.799167, 0.632989, 0.444245, 0.471978, + 0.435910, 0.359793, 0.216241, 0.007633, 0.337236, 0.857863, 0.380247, + 0.092517, 0.799973, 0.919000, 0.296798, 0.096989, 0.854831, 0.165369, + 0.568475, 0.216855, 0.020457, 0.835511, 0.538039, 0.999742, 0.620226, + 0.244053, 0.060399, 0.323007, 0.294874, 0.988899, 0.384919, 0.735655, + 0.773428, 0.549776, 0.292882, 0.660611, 0.593507, 0.621118, 0.175269, + 0.682119, 0.794493, 0.868197, 0.632150, 0.807823, 0.509656, 0.482035, + 0.001780, 0.259126, 0.358002, 0.280263, 0.192985, 0.290367, 0.208111, + 0.917633, 0.114422, 0.925491, 0.981110, 0.255570, 0.974862, 0.016629, + 0.552599, 0.575741, 0.612978, 0.615965, 0.803615, 0.772334, 0.089745, + 0.838812, 0.634542, 0.113709, 0.755832, 0.577589, 0.667489, 0.529834, + 0.325660, 0.817597, 0.316557, 0.335093, 0.737363, 0.260951, 0.737073, + 0.049540, 0.735541, 0.988891, 0.299116, 0.147695, 0.417271, 0.940811, + 0.524160, 0.857968, 0.176403, 0.244835, 0.485759, 0.033353, 0.280319, + 0.750688, 0.755809, 0.924208, 0.095956, 0.962504, 0.275584, 0.173715, + 0.942716, 0.706721, 0.078464, 0.576716, 0.804667, 0.559249, 0.900611, + 0.646904, 0.432111, 0.927885, 0.383277, 0.269973, 0.114244, 0.574867, + 0.150703, 0.241855, 0.272871, 0.199950, 0.079719, 0.868566, 0.962833, + 0.789122, 0.320025, 0.905554, 0.234876, 0.991356, 0.061913, 0.732911, + 0.785960, 0.874074, 0.069035, 0.658632, 0.309901, 0.023676, 0.791603, + 0.764661, 0.661278, 0.319583, 0.829650, 0.117091, 0.903124, 0.982098, + 0.161631, 0.193576, 0.670428, 0.857390, 0.003760, 0.572578, 0.222162, + 0.114551, 0.420118, 0.530404, 0.470682, 0.525527, 0.764281, 0.040596, + 0.443275, 0.501124, 0.816161, 0.417467, 0.332172, 0.447565, 0.614591, + 0.559246, 0.805295, 0.226342, 0.155065, 0.714630, 0.160925, 0.760001, + 0.453456, 0.093869, 0.406092, 0.264801, 0.720370, 0.743388, 0.373269, + 0.403098, 0.911923, 0.897249, 0.147038, 0.753037, 0.516093, 0.739257, + 0.175018, 0.045768, 0.735857, 0.801330, 0.927708, 0.240977, 0.591870, + 0.921831, 0.540733, 0.149100, 0.423152, 0.806876, 0.397081, 0.061100, + 0.811630, 0.044899, 0.460915, 0.961202, 0.822098, 0.971524, 0.867608, + 0.773604, 0.226616, 0.686286, 0.926972, 0.411613, 0.267873, 0.081937, + 0.226124, 0.295664, 0.374594, 0.533240, 0.237876, 0.669629, 0.599083, + 0.513081, 0.878719, 0.201577, 0.721296, 0.495038, 0.079760, 0.965959, + 0.233090, 0.052496, 0.714748, 0.887844, 0.308724, 0.972885, 0.723337, + 0.453089, 0.914474, 0.704063, 0.823198, 0.834769, 0.906561, 0.919600, + 0.100601, 0.307564, 0.901977, 0.468879, 0.265376, 0.885188, 0.683875, + 0.868623, 0.081032, 0.466835, 0.199087, 0.663437, 0.812241, 0.311337, + 0.821361, 0.356628, 0.898054, 0.160781, 0.222539, 0.714889, 0.490287, + 0.984915, 0.951755, 0.964097, 0.641795, 0.815472, 0.852732, 0.862074, + 0.051108, 0.440139, 0.323207, 0.517171, 0.562984, 0.115295, 0.743103, + 0.977914, 0.337596, 0.440694, 0.535879, 0.959427, 0.351427, 0.704361, + 0.010826, 0.131162, 0.577080, 0.349572, 0.774892, 0.425796, 0.072697, + 0.500001, 0.267322, 0.909654, 0.206176, 0.223987, 0.937698, 0.323423, + 0.117501, 0.490308, 0.474372, 0.689943, 0.168671, 0.719417, 0.188928, + 0.330464, 0.265273, 0.446271, 0.171933, 0.176133, 0.474616, 0.140182, + 0.114246, 0.905043, 0.713870, 0.555261, 0.951333 +}; unsigned char hash[512]= { -0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57, -0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D, -0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D, -0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D, -0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57, -0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D, -0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D, -0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D, + 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC, + 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, + 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, + 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57, 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, + 0x5A, 0x55, 0x74, 0x50, 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, + 0x9E, 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34, 0x38, 0xAB, + 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D, 0xBF, 0x33, 0x9C, 0x5F, 0x9, + 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30, 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, + 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23, 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, + 0x73, 0xF, 0xFE, 0x6E, 0x9B, 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, + 0xC9, 0x8D, 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7, 0x2, + 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0, 0x29, 0xA6, 0xC5, 0xE3, + 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD, 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, + 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D, 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, + 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, + 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, + 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57, 0xBC, 0x7F, 0x6B, + 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50, 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, + 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E, 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, + 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34, 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, + 0x31, 0xF9, 0x44, 0x6D, 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, + 0x30, 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23, 0xA7, 0xDF, + 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B, 0x56, 0xEF, 0x12, 0xA5, 0x37, + 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D, 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, + 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7, 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, + 0xE5, 0xAF, 0x53, 0x7, 0xE0, 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, + 0x21, 0xAD, 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D, }; float hashvectf[768]= { -0.33783,0.715698,-0.611206,-0.944031,-0.326599,-0.045624,-0.101074,-0.416443,-0.903503,0.799286,0.49411,-0.341949,-0.854645,0.518036,0.033936,0.42514,-0.437866,-0.792114,-0.358948,0.597046,0.717377,-0.985413,0.144714,0.089294,-0.601776,-0.33728,-0.723907,-0.449921,0.594513,0.666382,0.208313,-0.10791, -0.972076,0.575317,0.060425,0.815643,0.293365,-0.875702,-0.383453,0.293762,0.465759,0.834686,-0.846008,-0.233398,-0.47934,-0.115814,0.143036,-0.98291,0.204681,-0.949036,-0.239532,0.946716,-0.263947,0.184326,-0.235596,0.573822,0.784332,0.203705,-0.372253,-0.905487,0.756989,-0.651031,0.055298,0.497803, -0.814697,-0.297363,-0.16214,0.063995,-0.98468,-0.329254,0.834381,0.441925,0.703827,-0.527039,-0.476227,0.956421,0.266113,0.119781,0.480133,0.482849,0.7323,-0.18631,0.961212,-0.203125,-0.748474,-0.656921,-0.090393,-0.085052,-0.165253,0.982544,-0.76947,0.628174,-0.115234,0.383148,0.537659,0.751068, -0.616486,-0.668488,-0.415924,-0.259979,-0.630005,0.73175,0.570953,-0.087952,0.816223,-0.458008,0.023254,0.888611,-0.196167,0.976563,-0.088287,-0.263885,-0.69812,-0.665527,0.437134,-0.892273,-0.112793,-0.621674,-0.230438,0.748566,0.232422,0.900574,-0.367249,0.22229,-0.796143,0.562744,-0.665497,-0.73764, -0.11377,0.670135,0.704803,0.232605,0.895599,0.429749,-0.114655,-0.11557,-0.474243,0.872742,0.621826,0.604004,-0.498444,-0.832214,0.012756,0.55426,-0.702484,0.705994,-0.089661,-0.692017,0.649292,0.315399,-0.175995,-0.977997,0.111877,0.096954,-0.04953,0.994019,0.635284,-0.606689,-0.477783,-0.261261, --0.607422,-0.750153,0.983276,0.165436,0.075958,-0.29837,0.404083,-0.864655,-0.638672,0.507721,0.578156,0.388214,0.412079,0.824249,0.556183,-0.208832,0.804352,0.778442,0.562012,0.27951,-0.616577,0.781921,-0.091522,0.196289,0.051056,0.979187,-0.121216,0.207153,-0.970734,-0.173401,-0.384735,0.906555, -0.161499,-0.723236,-0.671387,0.178497,-0.006226,-0.983887,-0.126038,0.15799,0.97934,0.830475,-0.024811,0.556458,-0.510132,-0.76944,0.384247,0.81424,0.200104,-0.544891,-0.112549,-0.393311,-0.912445,0.56189,0.152222,-0.813049,0.198914,-0.254517,-0.946381,-0.41217,0.690979,-0.593811,-0.407257,0.324524, -0.853668,-0.690186,0.366119,-0.624115,-0.428345,0.844147,-0.322296,-0.21228,-0.297546,-0.930756,-0.273071,0.516113,0.811798,0.928314,0.371643,0.007233,0.785828,-0.479218,-0.390778,-0.704895,0.058929,0.706818,0.173248,0.203583,0.963562,0.422211,-0.904297,-0.062469,-0.363312,-0.182465,0.913605,0.254028, --0.552307,-0.793945,-0.28891,-0.765747,-0.574554,0.058319,0.291382,0.954803,0.946136,-0.303925,0.111267,-0.078156,0.443695,-0.892731,0.182098,0.89389,0.409515,-0.680298,-0.213318,0.701141,0.062469,0.848389,-0.525635,-0.72879,-0.641846,0.238342,-0.88089,0.427673,0.202637,-0.532501,-0.21405,0.818878, -0.948975,-0.305084,0.07962,0.925446,0.374664,0.055817,0.820923,0.565491,0.079102,0.25882,0.099792,-0.960724,-0.294617,0.910522,0.289978,0.137115,0.320038,-0.937408,-0.908386,0.345276,-0.235718,-0.936218,0.138763,0.322754,0.366577,0.925934,-0.090637,0.309296,-0.686829,-0.657684,0.66983,0.024445, -0.742065,-0.917999,-0.059113,-0.392059,0.365509,0.462158,-0.807922,0.083374,0.996399,-0.014801,0.593842,0.253143,-0.763672,0.974976,-0.165466,0.148285,0.918976,0.137299,0.369537,0.294952,0.694977,0.655731,0.943085,0.152618,-0.295319,0.58783,-0.598236,0.544495,0.203796,0.678223,0.705994,-0.478821, --0.661011,0.577667,0.719055,-0.1698,-0.673828,-0.132172,-0.965332,0.225006,-0.981873,-0.14502,0.121979,0.763458,0.579742,0.284546,-0.893188,0.079681,0.442474,-0.795776,-0.523804,0.303802,0.734955,0.67804,-0.007446,0.15506,0.986267,-0.056183,0.258026,0.571503,-0.778931,-0.681549,-0.702087,-0.206116, --0.96286,-0.177185,0.203613,-0.470978,-0.515106,0.716095,-0.740326,0.57135,0.354095,-0.56012,-0.824982,-0.074982,-0.507874,0.753204,0.417969,-0.503113,0.038147,0.863342,0.594025,0.673553,-0.439758,-0.119873,-0.005524,-0.992737,0.098267,-0.213776,0.971893,-0.615631,0.643951,0.454163,0.896851,-0.441071, -0.032166,-0.555023,0.750763,-0.358093,0.398773,0.304688,0.864929,-0.722961,0.303589,0.620544,-0.63559,-0.621948,-0.457306,-0.293243,0.072327,0.953278,-0.491638,0.661041,-0.566772,-0.304199,-0.572083,-0.761688,0.908081,-0.398956,0.127014,-0.523621,-0.549683,-0.650848,-0.932922,-0.19986,0.299408,0.099426, -0.140869,0.984985,-0.020325,-0.999756,-0.002319,0.952667,0.280853,-0.11615,-0.971893,0.082581,0.220337,0.65921,0.705292,-0.260651,0.733063,-0.175537,0.657043,-0.555206,0.429504,-0.712189,0.400421,-0.89859,0.179352,0.750885,-0.19696,0.630341,0.785675,-0.569336,0.241821,-0.058899,-0.464111,0.883789, -0.129608,-0.94519,0.299622,-0.357819,0.907654,0.219238,-0.842133,-0.439117,-0.312927,-0.313477,0.84433,0.434479,-0.241211,0.053253,0.968994,0.063873,0.823273,0.563965,0.476288,0.862152,-0.172516,0.620941,-0.298126,0.724915,0.25238,-0.749359,-0.612122,-0.577545,0.386566,0.718994,-0.406342,-0.737976, -0.538696,0.04718,0.556305,0.82959,-0.802856,0.587463,0.101166,-0.707733,-0.705963,0.026428,0.374908,0.68457,0.625092,0.472137,0.208405,-0.856506,-0.703064,-0.581085,-0.409821,-0.417206,-0.736328,0.532623,-0.447876,-0.20285,-0.870728,0.086945,-0.990417,0.107086,0.183685,0.018341,-0.982788,0.560638, --0.428864,0.708282,0.296722,-0.952576,-0.0672,0.135773,0.990265,0.030243,-0.068787,0.654724,0.752686,0.762604,-0.551758,0.337585,-0.819611,-0.407684,0.402466,-0.727844,-0.55072,-0.408539,-0.855774,-0.480011,0.19281,0.693176,-0.079285,0.716339,0.226013,0.650116,-0.725433,0.246704,0.953369,-0.173553, --0.970398,-0.239227,-0.03244,0.136383,-0.394318,0.908752,0.813232,0.558167,0.164368,0.40451,0.549042,-0.731323,-0.380249,-0.566711,0.730865,0.022156,0.932739,0.359741,0.00824,0.996552,-0.082306,0.956635,-0.065338,-0.283722,-0.743561,0.008209,0.668579,-0.859589,-0.509674,0.035767,-0.852234,0.363678, --0.375977,-0.201965,-0.970795,-0.12915,0.313477,0.947327,0.06546,-0.254028,-0.528259,0.81015,0.628052,0.601105,0.49411,-0.494385,0.868378,0.037933,0.275635,-0.086426,0.957336,-0.197937,0.468903,-0.860748,0.895599,0.399384,0.195801,0.560791,0.825012,-0.069214,0.304199,-0.849487,0.43103,0.096375, -0.93576,0.339111,-0.051422,0.408966,-0.911072,0.330444,0.942841,-0.042389,-0.452362,-0.786407,0.420563,0.134308,-0.933472,-0.332489,0.80191,-0.566711,-0.188934,-0.987946,-0.105988,0.112518,-0.24408,0.892242,-0.379791,-0.920502,0.229095,-0.316376,0.7789,0.325958,0.535706,-0.912872,0.185211,-0.36377, --0.184784,0.565369,-0.803833,-0.018463,0.119537,0.992615,-0.259247,-0.935608,0.239532,-0.82373,-0.449127,-0.345947,-0.433105,0.659515,0.614349,-0.822754,0.378845,-0.423676,0.687195,-0.674835,-0.26889,-0.246582,-0.800842,0.545715,-0.729187,-0.207794,0.651978,0.653534,-0.610443,-0.447388,0.492584,-0.023346, -0.869934,0.609039,0.009094,-0.79306,0.962494,-0.271088,-0.00885,0.2659,-0.004913,0.963959,0.651245,0.553619,-0.518951,0.280548,-0.84314,0.458618,-0.175293,-0.983215,0.049805,0.035339,-0.979919,0.196045,-0.982941,0.164307,-0.082245,0.233734,-0.97226,-0.005005,-0.747253,-0.611328,0.260437,0.645599, -0.592773,0.481384,0.117706,-0.949524,-0.29068,-0.535004,-0.791901,-0.294312,-0.627167,-0.214447,0.748718,-0.047974,-0.813477,-0.57959,-0.175537,0.477264,-0.860992,0.738556,-0.414246,-0.53183,0.562561,-0.704071,0.433289,-0.754944,0.64801,-0.100586,0.114716,0.044525,-0.992371,0.966003,0.244873,-0.082764, + 0.33783, 0.715698, -0.611206, -0.944031, -0.326599, -0.045624, -0.101074, -0.416443, -0.903503, 0.799286, 0.49411, + -0.341949, -0.854645, 0.518036, 0.033936, 0.42514, -0.437866, -0.792114, -0.358948, 0.597046, 0.717377, -0.985413, + 0.144714, 0.089294, -0.601776, -0.33728, -0.723907, -0.449921, 0.594513, 0.666382, 0.208313, -0.10791, 0.972076, + 0.575317, 0.060425, 0.815643, 0.293365, -0.875702, -0.383453, 0.293762, 0.465759, 0.834686, -0.846008, -0.233398, + -0.47934, -0.115814, 0.143036, -0.98291, 0.204681, -0.949036, -0.239532, 0.946716, -0.263947, 0.184326, -0.235596, + 0.573822, 0.784332, 0.203705, -0.372253, -0.905487, 0.756989, -0.651031, 0.055298, 0.497803, 0.814697, -0.297363, + -0.16214, 0.063995, -0.98468, -0.329254, 0.834381, 0.441925, 0.703827, -0.527039, -0.476227, 0.956421, 0.266113, + 0.119781, 0.480133, 0.482849, 0.7323, -0.18631, 0.961212, -0.203125, -0.748474, -0.656921, -0.090393, -0.085052, + -0.165253, 0.982544, -0.76947, 0.628174, -0.115234, 0.383148, 0.537659, 0.751068, 0.616486, -0.668488, -0.415924, + -0.259979, -0.630005, 0.73175, 0.570953, -0.087952, 0.816223, -0.458008, 0.023254, 0.888611, -0.196167, 0.976563, + -0.088287, -0.263885, -0.69812, -0.665527, 0.437134, -0.892273, -0.112793, -0.621674, -0.230438, 0.748566, 0.232422, + 0.900574, -0.367249, 0.22229, -0.796143, 0.562744, -0.665497, -0.73764, 0.11377, 0.670135, 0.704803, 0.232605, + 0.895599, 0.429749, -0.114655, -0.11557, -0.474243, 0.872742, 0.621826, 0.604004, -0.498444, -0.832214, 0.012756, + 0.55426, -0.702484, 0.705994, -0.089661, -0.692017, 0.649292, 0.315399, -0.175995, -0.977997, 0.111877, 0.096954, + -0.04953, 0.994019, 0.635284, -0.606689, -0.477783, -0.261261, -0.607422, -0.750153, 0.983276, 0.165436, 0.075958, + -0.29837, 0.404083, -0.864655, -0.638672, 0.507721, 0.578156, 0.388214, 0.412079, 0.824249, 0.556183, -0.208832, + 0.804352, 0.778442, 0.562012, 0.27951, -0.616577, 0.781921, -0.091522, 0.196289, 0.051056, 0.979187, -0.121216, + 0.207153, -0.970734, -0.173401, -0.384735, 0.906555, 0.161499, -0.723236, -0.671387, 0.178497, -0.006226, -0.983887, + -0.126038, 0.15799, 0.97934, 0.830475, -0.024811, 0.556458, -0.510132, -0.76944, 0.384247, 0.81424, 0.200104, + -0.544891, -0.112549, -0.393311, -0.912445, 0.56189, 0.152222, -0.813049, 0.198914, -0.254517, -0.946381, -0.41217, + 0.690979, -0.593811, -0.407257, 0.324524, 0.853668, -0.690186, 0.366119, -0.624115, -0.428345, 0.844147, -0.322296, + -0.21228, -0.297546, -0.930756, -0.273071, 0.516113, 0.811798, 0.928314, 0.371643, 0.007233, 0.785828, -0.479218, + -0.390778, -0.704895, 0.058929, 0.706818, 0.173248, 0.203583, 0.963562, 0.422211, -0.904297, -0.062469, -0.363312, + -0.182465, 0.913605, 0.254028, -0.552307, -0.793945, -0.28891, -0.765747, -0.574554, 0.058319, 0.291382, 0.954803, + 0.946136, -0.303925, 0.111267, -0.078156, 0.443695, -0.892731, 0.182098, 0.89389, 0.409515, -0.680298, -0.213318, + 0.701141, 0.062469, 0.848389, -0.525635, -0.72879, -0.641846, 0.238342, -0.88089, 0.427673, 0.202637, -0.532501, + -0.21405, 0.818878, 0.948975, -0.305084, 0.07962, 0.925446, 0.374664, 0.055817, 0.820923, 0.565491, 0.079102, + 0.25882, 0.099792, -0.960724, -0.294617, 0.910522, 0.289978, 0.137115, 0.320038, -0.937408, -0.908386, 0.345276, + -0.235718, -0.936218, 0.138763, 0.322754, 0.366577, 0.925934, -0.090637, 0.309296, -0.686829, -0.657684, 0.66983, + 0.024445, 0.742065, -0.917999, -0.059113, -0.392059, 0.365509, 0.462158, -0.807922, 0.083374, 0.996399, -0.014801, + 0.593842, 0.253143, -0.763672, 0.974976, -0.165466, 0.148285, 0.918976, 0.137299, 0.369537, 0.294952, 0.694977, + 0.655731, 0.943085, 0.152618, -0.295319, 0.58783, -0.598236, 0.544495, 0.203796, 0.678223, 0.705994, -0.478821, + -0.661011, 0.577667, 0.719055, -0.1698, -0.673828, -0.132172, -0.965332, 0.225006, -0.981873, -0.14502, 0.121979, + 0.763458, 0.579742, 0.284546, -0.893188, 0.079681, 0.442474, -0.795776, -0.523804, 0.303802, 0.734955, 0.67804, + -0.007446, 0.15506, 0.986267, -0.056183, 0.258026, 0.571503, -0.778931, -0.681549, -0.702087, -0.206116, -0.96286, + -0.177185, 0.203613, -0.470978, -0.515106, 0.716095, -0.740326, 0.57135, 0.354095, -0.56012, -0.824982, -0.074982, + -0.507874, 0.753204, 0.417969, -0.503113, 0.038147, 0.863342, 0.594025, 0.673553, -0.439758, -0.119873, -0.005524, + -0.992737, 0.098267, -0.213776, 0.971893, -0.615631, 0.643951, 0.454163, 0.896851, -0.441071, 0.032166, -0.555023, + 0.750763, -0.358093, 0.398773, 0.304688, 0.864929, -0.722961, 0.303589, 0.620544, -0.63559, -0.621948, -0.457306, + -0.293243, 0.072327, 0.953278, -0.491638, 0.661041, -0.566772, -0.304199, -0.572083, -0.761688, 0.908081, -0.398956, + 0.127014, -0.523621, -0.549683, -0.650848, -0.932922, -0.19986, 0.299408, 0.099426, 0.140869, 0.984985, -0.020325, + -0.999756, -0.002319, 0.952667, 0.280853, -0.11615, -0.971893, 0.082581, 0.220337, 0.65921, 0.705292, -0.260651, + 0.733063, -0.175537, 0.657043, -0.555206, 0.429504, -0.712189, 0.400421, -0.89859, 0.179352, 0.750885, -0.19696, + 0.630341, 0.785675, -0.569336, 0.241821, -0.058899, -0.464111, 0.883789, 0.129608, -0.94519, 0.299622, -0.357819, + 0.907654, 0.219238, -0.842133, -0.439117, -0.312927, -0.313477, 0.84433, 0.434479, -0.241211, 0.053253, 0.968994, + 0.063873, 0.823273, 0.563965, 0.476288, 0.862152, -0.172516, 0.620941, -0.298126, 0.724915, 0.25238, -0.749359, + -0.612122, -0.577545, 0.386566, 0.718994, -0.406342, -0.737976, 0.538696, 0.04718, 0.556305, 0.82959, -0.802856, + 0.587463, 0.101166, -0.707733, -0.705963, 0.026428, 0.374908, 0.68457, 0.625092, 0.472137, 0.208405, -0.856506, + -0.703064, -0.581085, -0.409821, -0.417206, -0.736328, 0.532623, -0.447876, -0.20285, -0.870728, 0.086945, + -0.990417, 0.107086, 0.183685, 0.018341, -0.982788, 0.560638, -0.428864, 0.708282, 0.296722, -0.952576, -0.0672, + 0.135773, 0.990265, 0.030243, -0.068787, 0.654724, 0.752686, 0.762604, -0.551758, 0.337585, -0.819611, -0.407684, + 0.402466, -0.727844, -0.55072, -0.408539, -0.855774, -0.480011, 0.19281, 0.693176, -0.079285, 0.716339, 0.226013, + 0.650116, -0.725433, 0.246704, 0.953369, -0.173553, -0.970398, -0.239227, -0.03244, 0.136383, -0.394318, 0.908752, + 0.813232, 0.558167, 0.164368, 0.40451, 0.549042, -0.731323, -0.380249, -0.566711, 0.730865, 0.022156, 0.932739, + 0.359741, 0.00824, 0.996552, -0.082306, 0.956635, -0.065338, -0.283722, -0.743561, 0.008209, 0.668579, -0.859589, + -0.509674, 0.035767, -0.852234, 0.363678, -0.375977, -0.201965, -0.970795, -0.12915, 0.313477, 0.947327, 0.06546, + -0.254028, -0.528259, 0.81015, 0.628052, 0.601105, 0.49411, -0.494385, 0.868378, 0.037933, 0.275635, -0.086426, + 0.957336, -0.197937, 0.468903, -0.860748, 0.895599, 0.399384, 0.195801, 0.560791, 0.825012, -0.069214, 0.304199, + -0.849487, 0.43103, 0.096375, 0.93576, 0.339111, -0.051422, 0.408966, -0.911072, 0.330444, 0.942841, -0.042389, + -0.452362, -0.786407, 0.420563, 0.134308, -0.933472, -0.332489, 0.80191, -0.566711, -0.188934, -0.987946, -0.105988, + 0.112518, -0.24408, 0.892242, -0.379791, -0.920502, 0.229095, -0.316376, 0.7789, 0.325958, 0.535706, -0.912872, + 0.185211, -0.36377, -0.184784, 0.565369, -0.803833, -0.018463, 0.119537, 0.992615, -0.259247, -0.935608, 0.239532, + -0.82373, -0.449127, -0.345947, -0.433105, 0.659515, 0.614349, -0.822754, 0.378845, -0.423676, 0.687195, -0.674835, + -0.26889, -0.246582, -0.800842, 0.545715, -0.729187, -0.207794, 0.651978, 0.653534, -0.610443, -0.447388, 0.492584, + -0.023346, 0.869934, 0.609039, 0.009094, -0.79306, 0.962494, -0.271088, -0.00885, 0.2659, -0.004913, 0.963959, + 0.651245, 0.553619, -0.518951, 0.280548, -0.84314, 0.458618, -0.175293, -0.983215, 0.049805, 0.035339, -0.979919, + 0.196045, -0.982941, 0.164307, -0.082245, 0.233734, -0.97226, -0.005005, -0.747253, -0.611328, 0.260437, 0.645599, + 0.592773, 0.481384, 0.117706, -0.949524, -0.29068, -0.535004, -0.791901, -0.294312, -0.627167, -0.214447, 0.748718, + -0.047974, -0.813477, -0.57959, -0.175537, 0.477264, -0.860992, 0.738556, -0.414246, -0.53183, 0.562561, -0.704071, +0.433289, -0.754944, 0.64801, -0.100586, 0.114716, 0.044525, -0.992371, 0.966003, 0.244873, -0.082764, }; /**************************/ @@ -375,7 +440,7 @@ float BLI_turbulence1(float noisesize, float x, float y, float z, int nr) { float s, d= 0.5, div=1.0; - s= fabsf( (-1.0f+2.0f*BLI_hnoise(noisesize, x, y, z))); + s= fabsf((-1.0f + 2.0f * BLI_hnoise(noisesize, x, y, z))); while (nr>0) { diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index f52921cd19b..9f775028c1a 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -135,7 +135,7 @@ int BLI_stringdec(const char *string, char *head, char *tail, unsigned short *nu if (found) { if (tail) strcpy(tail, &string[nume+1]); if (head) { - strcpy(head,string); + strcpy(head, string); head[nums]=0; } if (numlen) *numlen = nume-nums+1; @@ -364,12 +364,12 @@ void BLI_cleanup_path(const char *relabase, char *dir) } } - while ( (start = strstr(dir,"\\.\\")) ) { + while ( (start = strstr(dir, "\\.\\")) ) { eind = start + strlen("\\.\\") - 1; memmove(start, eind, strlen(eind) + 1); } - while ( (start = strstr(dir,"\\\\" )) ) { + while ( (start = strstr(dir, "\\\\" )) ) { eind = start + strlen("\\\\") - 1; memmove(start, eind, strlen(eind) + 1); } @@ -402,12 +402,12 @@ void BLI_cleanup_path(const char *relabase, char *dir) } } - while ( (start = strstr(dir,"/./")) ) { + while ( (start = strstr(dir, "/./")) ) { eind = start + (3 - 1) /* strlen("/./") - 1 */; memmove(start, eind, strlen(eind) + 1); } - while ( (start = strstr(dir,"//" )) ) { + while ( (start = strstr(dir, "//" )) ) { eind = start + (2 - 1) /* strlen("//") - 1 */; memmove(start, eind, strlen(eind) + 1); } @@ -758,7 +758,7 @@ int BLI_path_cwd(char *path) BLI_current_working_dir(cwd, sizeof(cwd)); /* in case the full path to the blend isn't used */ if (cwd[0] == '\0') { - printf( "Could not get the current working directory - $PWD for an unknown reason."); + printf("Could not get the current working directory - $PWD for an unknown reason.\n"); } else { /* uses the blend path relative to cwd important for loading relative linked files. @@ -835,7 +835,7 @@ const char *BLI_getDefaultDocumentFolder(void) HRESULT hResult; /* Check for %HOME% env var */ - if (uput_getenv("HOME",documentfolder,MAXPATHLEN)) { + if (uput_getenv("HOME", documentfolder, MAXPATHLEN)) { if (BLI_is_dir(documentfolder)) return documentfolder; } @@ -1265,7 +1265,7 @@ void BLI_make_exist(char *dir) #ifdef WIN32 get_default_root(dir); #else - strcpy(dir,"/"); + strcpy(dir, "/"); #endif break; } @@ -1787,7 +1787,7 @@ static void bli_where_am_i(char *fullname, const size_t maxlen, const char *name #ifdef WITH_BINRELOC /* linux uses binreloc since argv[0] is not reliable, call br_init( NULL ) first */ - path = br_find_exe( NULL ); + path = br_find_exe(NULL); if (path) { BLI_strncpy(fullname, path, maxlen); free((void *)path); @@ -1798,7 +1798,7 @@ static void bli_where_am_i(char *fullname, const size_t maxlen, const char *name #ifdef _WIN32 wchar_t * fullname_16 = MEM_mallocN(maxlen*sizeof(wchar_t), "ProgramPath"); if (GetModuleFileNameW(0, fullname_16, maxlen)) { - conv_utf_16_to_8(fullname_16,fullname, maxlen); + conv_utf_16_to_8(fullname_16, fullname, maxlen); if (!BLI_exists(fullname)) { printf("path can't be found: \"%.*s\"\n", maxlen, fullname); MessageBox(NULL, "path contains invalid characters or is too long (see console)", "Error", MB_OK); diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c index f4481c37f2d..8ab55f9ac85 100644 --- a/source/blender/blenlib/intern/pbvh.c +++ b/source/blender/blenlib/intern/pbvh.c @@ -1012,15 +1012,15 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes, * we have to store for each vertex which node it is in */ vnor= MEM_callocN(sizeof(float)*3*bvh->totvert, "bvh temp vnors"); - /* subtle assumptions: - * - We know that for all edited vertices, the nodes with faces - * adjacent to these vertices have been marked with PBVH_UpdateNormals. - * This is true because if the vertex is inside the brush radius, the - * bounding box of it's adjacent faces will be as well. - * - However this is only true for the vertices that have actually been - * edited, not for all vertices in the nodes marked for update, so we - * can only update vertices marked with ME_VERT_PBVH_UPDATE. - */ + /* subtle assumptions: + * - We know that for all edited vertices, the nodes with faces + * adjacent to these vertices have been marked with PBVH_UpdateNormals. + * This is true because if the vertex is inside the brush radius, the + * bounding box of it's adjacent faces will be as well. + * - However this is only true for the vertices that have actually been + * edited, not for all vertices in the nodes marked for update, so we + * can only update vertices marked with ME_VERT_PBVH_UPDATE. + */ #pragma omp parallel for private(n) schedule(static) for (n = 0; n < totnode; n++) { diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 25850e14ae7..503de31616a 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -99,7 +99,7 @@ typedef struct ScanFillVertLink { #define SF_VERT_ZERO_LEN 255 /* Optionally set ScanFillEdge f to this to mark original boundary edges. - * Only needed if there are internal diagonal edges passed to BLI_edgefill. */ + * Only needed if there are internal diagonal edges passed to BLI_scanfill_calc. */ #define SF_EDGE_BOUNDARY 1 #define SF_EDGE_UNKNOWN 2 /* TODO, what is this for exactly? - need to document it! */ @@ -191,7 +191,7 @@ static void mem_element_reset(ScanFillContext *sf_ctx, int keep_first) sf_ctx->melem__offs = 0; } -void BLI_end_edgefill(ScanFillContext *sf_ctx) +void BLI_scanfill_end(ScanFillContext *sf_ctx) { mem_element_reset(sf_ctx, FALSE); @@ -202,7 +202,7 @@ void BLI_end_edgefill(ScanFillContext *sf_ctx) /* **** FILL ROUTINES *************************** */ -ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]) +ScanFillVert *BLI_scanfill_vert_add(ScanFillContext *sf_ctx, const float vec[3]) { ScanFillVert *eve; @@ -214,7 +214,7 @@ ScanFillVert *BLI_addfillvert(ScanFillContext *sf_ctx, const float vec[3]) return eve; } -ScanFillEdge *BLI_addfilledge(ScanFillContext *sf_ctx, ScanFillVert *v1, ScanFillVert *v2) +ScanFillEdge *BLI_scanfill_edge_add(ScanFillContext *sf_ctx, ScanFillVert *v1, ScanFillVert *v2) { ScanFillEdge *newed; @@ -453,7 +453,7 @@ static void testvertexnearedge(ScanFillContext *sf_ctx) const float dist = dist_to_line_v2(eed->v1->xy, eed->v2->xy, eve->xy); if (dist < SF_EPSILON) { /* new edge */ - ed1 = BLI_addfilledge(sf_ctx, eed->v1, eve); + ed1 = BLI_scanfill_edge_add(sf_ctx, eed->v1, eve); /* printf("fill: vertex near edge %x\n",eve); */ ed1->f = 0; @@ -681,7 +681,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) /* make new edge, and start over */ /* printf("add new edge %x %x and start again\n",v2,sc1->v1); */ - ed3 = BLI_addfilledge(sf_ctx, v2, sc1->v1); + ed3 = BLI_scanfill_edge_add(sf_ctx, v2, sc1->v1); BLI_remlink(&sf_ctx->filledgebase, ed3); BLI_insertlinkbefore((ListBase *)&(sc->first), ed2, ed3); ed3->v2->f = SF_VERT_UNKNOWN; @@ -709,7 +709,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) } /* new edge */ - ed3 = BLI_addfilledge(sf_ctx, v1, v3); + ed3 = BLI_scanfill_edge_add(sf_ctx, v1, v3); BLI_remlink(&sf_ctx->filledgebase, ed3); ed3->f = SF_EDGE_UNKNOWN; ed3->v1->h++; @@ -764,19 +764,19 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf) } -int BLI_begin_edgefill(ScanFillContext *sf_ctx) +int BLI_scanfill_begin(ScanFillContext *sf_ctx) { memset(sf_ctx, 0, sizeof(*sf_ctx)); return 1; } -int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) +int BLI_scanfill_calc(ScanFillContext *sf_ctx, const short do_quad_tri_speedup) { - return BLI_edgefill_ex(sf_ctx, do_quad_tri_speedup, NULL); + return BLI_scanfill_calc_ex(sf_ctx, do_quad_tri_speedup, NULL); } -int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, const float nor_proj[3]) +int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, const float nor_proj[3]) { /* * - fill works with its own lists, so create that first (no faces!) diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 1c55d5b5a39..047463f1e26 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -95,7 +95,7 @@ #include "BKE_utildefines.h" /* vars: */ -static int totnum,actnum; +static int totnum, actnum; static struct direntry *files; static struct ListBase dirbase_={NULL, NULL}; @@ -139,7 +139,7 @@ static int bli_compare(struct direntry *entry1, struct direntry *entry2) if ( strcmp(entry1->relname, "..")==0 ) return (-1); if ( strcmp(entry2->relname, "..")==0 ) return (1); - return (BLI_natstrcmp(entry1->relname,entry2->relname)); + return (BLI_natstrcmp(entry1->relname, entry2->relname)); } @@ -161,7 +161,7 @@ double BLI_dir_free_space(const char *dir) tmp[3]=0; } - GetDiskFreeSpace(tmp,§orspc, &bytesps, &freec, &clusters); + GetDiskFreeSpace(tmp, §orspc, &bytesps, &freec, &clusters); return (double) (freec*bytesps*sectorspc); #else @@ -171,19 +171,19 @@ double BLI_dir_free_space(const char *dir) #else struct statfs disk; #endif - char name[FILE_MAXDIR],*slash; + char name[FILE_MAXDIR], *slash; int len = strlen(dir); if (len >= FILE_MAXDIR) /* path too long */ return -1; - strcpy(name,dir); + strcpy(name, dir); if (len) { - slash = strrchr(name,'/'); + slash = strrchr(name, '/'); if (slash) slash[1] = 0; } - else strcpy(name,"/"); + else strcpy(name, "/"); #if defined (__FreeBSD__) || defined (linux) || defined (__OpenBSD__) || defined (__APPLE__) || defined(__GNU__) || defined(__GLIBC__) if (statfs(name, &disk)) return(-1); @@ -234,9 +234,9 @@ static void bli_builddir(const char *dirname, const char *relname) while ((fname = (struct dirent*) readdir(dir)) != NULL) { dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); if (dlink) { - BLI_strncpy(buf + rellen ,fname->d_name, sizeof(buf) - rellen); + BLI_strncpy(buf + rellen, fname->d_name, sizeof(buf) - rellen); dlink->name = BLI_strdup(buf); - BLI_addhead(dirbase,dlink); + BLI_addhead(dirbase, dlink); newnum++; } } @@ -260,22 +260,22 @@ static void bli_builddir(const char *dirname, const char *relname) if (files) { dlink = (struct dirlink *) dirbase->first; while (dlink) { - memset(&files[actnum], 0 , sizeof(struct direntry)); + memset(&files[actnum], 0, sizeof(struct direntry)); files[actnum].relname = dlink->name; files[actnum].path = BLI_strdupcat(dirname, dlink->name); // use 64 bit file size, only needed for WIN32 and WIN64. // Excluding other than current MSVC compiler until able to test #ifdef WIN32 - {wchar_t * name_16 = alloc_utf16_from_8(dlink->name,0); + {wchar_t * name_16 = alloc_utf16_from_8(dlink->name, 0); #if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500) - _wstat64(name_16,&files[actnum].s); + _wstat64(name_16, &files[actnum].s); #elif defined(__MINGW32__) - _stati64(dlink->name,&files[actnum].s); + _stati64(dlink->name, &files[actnum].s); #endif free(name_16);}; #else - stat(dlink->name,&files[actnum].s); + stat(dlink->name, &files[actnum].s); #endif files[actnum].type=files[actnum].s.st_mode; files[actnum].flags = 0; @@ -290,16 +290,16 @@ static void bli_builddir(const char *dirname, const char *relname) } BLI_freelist(dirbase); - if (files) qsort(files, actnum, sizeof(struct direntry), (int (*)(const void *,const void*))bli_compare); + if (files) qsort(files, actnum, sizeof(struct direntry), (int (*)(const void *, const void*))bli_compare); } else { - printf("%s empty directory\n",dirname); + printf("%s empty directory\n", dirname); } closedir(dir); } else { - printf("%s non-existant directory\n",dirname); + printf("%s non-existant directory\n", dirname); } } @@ -349,7 +349,7 @@ static void bli_adddirstrings(void) #endif #ifdef WIN32 - strcpy(file->owner,"user"); + strcpy(file->owner, "user"); #else { struct passwd *pwuser; @@ -426,7 +426,7 @@ unsigned int BLI_dir_contents(const char *dirname, struct direntry **filelist) actnum = totnum = 0; files = NULL; - bli_builddir(dirname,""); + bli_builddir(dirname, ""); bli_adddirstrings(); if (files) { @@ -488,11 +488,28 @@ int BLI_exists(const char *name) if (res == -1) return(0); #else struct stat st; - if (stat(name,&st)) return(0); + if (stat(name, &st)) return(0); #endif return(st.st_mode); } + +#ifdef WIN32 +int BLI_stat(const char *path, struct stat *buffer) +{ + int r; + UTF16_ENCODE(path); + r=_wstat(path_16,buffer); + UTF16_UN_ENCODE(path); + return r; +} +#else +int BLI_stat(const char *path, struct stat *buffer) +{ + return stat(path, buffer); +} +#endif + /* would be better in fileops.c except that it needs stat.h so add here */ int BLI_is_dir(const char *file) { diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index b2245226a3c..d880b895ced 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -391,10 +391,10 @@ void BLI_timestr(double _time, char *str) int hun= ( (int) (_time * 100.0)) % 100; if (hr) { - sprintf(str, "%.2d:%.2d:%.2d.%.2d",hr,min,sec,hun); + sprintf(str, "%.2d:%.2d:%.2d.%.2d", hr, min, sec, hun); } else { - sprintf(str, "%.2d:%.2d.%.2d",min,sec,hun); + sprintf(str, "%.2d:%.2d.%.2d", min, sec, hun); } str[11]=0; diff --git a/source/blender/blenlib/intern/string_cursor_utf8.c b/source/blender/blenlib/intern/string_cursor_utf8.c index 97559d6ba10..422a600e51c 100644 --- a/source/blender/blenlib/intern/string_cursor_utf8.c +++ b/source/blender/blenlib/intern/string_cursor_utf8.c @@ -93,6 +93,7 @@ static strCursorDelimType test_special_char(const char *ch_utf8) return STRCUR_DELIM_QUOTE; case ' ': + case '\t': return STRCUR_DELIM_WHITESPACE; case '\\': diff --git a/source/blender/blenlib/intern/string_utf8.c b/source/blender/blenlib/intern/string_utf8.c index 20c5c8082ce..77bebfaf2e8 100644 --- a/source/blender/blenlib/intern/string_utf8.c +++ b/source/blender/blenlib/intern/string_utf8.c @@ -46,14 +46,14 @@ * it's hard to know how many characters there are! */ static const char trailingBytesForUTF8[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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,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, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 }; int BLI_utf8_invalid_byte(const char *str, int length) @@ -153,14 +153,14 @@ int BLI_utf8_invalid_strip(char *str, int length) * note: this looks to be at odd's with 'trailingBytesForUTF8', * need to find out what gives here! - campbell */ static const size_t utf8_skip_data[256] = { - 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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,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, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1 }; #define BLI_STR_UTF8_CPY(dst, src, maxncpy) \ diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 05d8ded7764..448f1c1b408 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -304,7 +302,7 @@ void BLI_end_threads(ListBase *threadbase) /* System Information */ /* how many threads are native on this system? */ -int BLI_system_thread_count( void ) +int BLI_system_thread_count(void) { int t; #ifdef WIN32 diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c index 89621cdf48d..a630084e79d 100644 --- a/source/blender/blenlib/intern/uvproject.c +++ b/source/blender/blenlib/intern/uvproject.c @@ -32,7 +32,7 @@ #include "BLI_math.h" #include "BLI_uvproject.h" -typedef struct UvCameraInfo { +typedef struct ProjCameraInfo { float camangle; float camsize; float xasp, yasp; @@ -40,9 +40,9 @@ typedef struct UvCameraInfo { float rotmat[4][4]; float caminv[4][4]; short do_persp, do_pano, do_rotmat; -} UvCameraInfo; +} ProjCameraInfo; -void project_from_camera(float target[2], float source[3], UvCameraInfo *uci) +void BLI_uvproject_from_camera(float target[2], float source[3], ProjCameraInfo *uci) { float pv4[4]; @@ -93,7 +93,7 @@ void project_from_camera(float target[2], float source[3], UvCameraInfo *uci) } /* could rv3d->persmat */ -void project_from_view(float target[2], float source[3], float persmat[4][4], float rotmat[4][4], float winx, float winy) +void BLI_uvproject_from_view(float target[2], float source[3], float persmat[4][4], float rotmat[4][4], float winx, float winy) { float pv[3], pv4[4], x = 0.0, y = 0.0; @@ -133,12 +133,12 @@ void project_from_view(float target[2], float source[3], float persmat[4][4], fl /* 'rotmat' can be obedit->obmat when uv project is used. * 'winx' and 'winy' can be from scene->r.xsch/ysch */ -UvCameraInfo *project_camera_info(Object *ob, float(*rotmat)[4], float winx, float winy) +ProjCameraInfo *BLI_uvproject_camera_info(Object *ob, float(*rotmat)[4], float winx, float winy) { - UvCameraInfo uci; + ProjCameraInfo uci; Camera *camera = ob->data; - uci.do_pano = (camera->flag & CAM_PANORAMA); + uci.do_pano = (camera->type == CAM_PANO); uci.do_persp = (camera->type == CAM_PERSP); uci.camangle = focallength_to_fov(camera->lens, camera->sensor_x) / 2.0f; @@ -149,7 +149,7 @@ UvCameraInfo *project_camera_info(Object *ob, float(*rotmat)[4], float winx, flo normalize_m4(uci.caminv); if (invert_m4(uci.caminv)) { - UvCameraInfo *uci_pt; + ProjCameraInfo *uci_pt; /* normal projection */ if (rotmat) { @@ -174,7 +174,7 @@ UvCameraInfo *project_camera_info(Object *ob, float(*rotmat)[4], float winx, flo uci.shiftx = 0.5f - (camera->shiftx * uci.xasp); uci.shifty = 0.5f - (camera->shifty * uci.yasp); - uci_pt = MEM_mallocN(sizeof(UvCameraInfo), "UvCameraInfo"); + uci_pt = MEM_mallocN(sizeof(ProjCameraInfo), "ProjCameraInfo"); *uci_pt = uci; return uci_pt; } @@ -182,7 +182,7 @@ UvCameraInfo *project_camera_info(Object *ob, float(*rotmat)[4], float winx, flo return NULL; } -void project_from_view_ortho(float target[2], float source[3], float rotmat[4][4]) +void BLI_uvproject_from_view_ortho(float target[2], float source[3], float rotmat[4][4]) { float pv[3]; @@ -193,7 +193,7 @@ void project_from_view_ortho(float target[2], float source[3], float rotmat[4][4 target[1] = pv[2]; } -void project_camera_info_scale(UvCameraInfo *uci, float scale_x, float scale_y) +void BLI_uvproject_camera_info_scale(ProjCameraInfo *uci, float scale_x, float scale_y) { uci->xasp *= scale_x; uci->yasp *= scale_y; diff --git a/source/blender/blenlib/intern/voxel.c b/source/blender/blenlib/intern/voxel.c index 34862c724e1..3ad9edd14a3 100644 --- a/source/blender/blenlib/intern/voxel.c +++ b/source/blender/blenlib/intern/voxel.c @@ -37,15 +37,15 @@ BLI_INLINE float D(float *data, const int res[3], int x, int y, int z) { - CLAMP(x, 0, res[0]-1); - CLAMP(y, 0, res[1]-1); - CLAMP(z, 0, res[2]-1); - return data[ V_I(x, y, z, res) ]; + CLAMP(x, 0, res[0] - 1); + CLAMP(y, 0, res[1] - 1); + CLAMP(z, 0, res[2] - 1); + return data[ BLI_VOXEL_INDEX(x, y, z, res) ]; } /* *** nearest neighbor *** */ /* input coordinates must be in bounding box 0.0 - 1.0 */ -float voxel_sample_nearest(float *data, const int res[3], const float co[3]) +float BLI_voxel_sample_nearest(float *data, const int res[3], const float co[3]) { int xi, yi, zi; @@ -70,7 +70,7 @@ BLI_INLINE int _clamp(int a, int b, int c) return (a < b) ? b : ((a > c) ? c : a); } -float voxel_sample_trilinear(float *data, const int res[3], const float co[3]) +float BLI_voxel_sample_trilinear(float *data, const int res[3], const float co[3]) { if (data) { @@ -102,7 +102,7 @@ float voxel_sample_trilinear(float *data, const int res[3], const float co[3]) } -float voxel_sample_triquadratic(float *data, const int res[3], const float co[3]) +float BLI_voxel_sample_triquadratic(float *data, const int res[3], const float co[3]) { if (data) { @@ -132,7 +132,7 @@ float voxel_sample_triquadratic(float *data, const int res[3], const float co[3] return 0.f; } -float voxel_sample_tricubic(float *data, const int res[3], const float co[3], int bspline) +float BLI_voxel_sample_tricubic(float *data, const int res[3], const float co[3], int bspline) { if (data) { diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c index f3cb0dd6f84..d853e398adc 100644 --- a/source/blender/blenlib/intern/winstuff.c +++ b/source/blender/blenlib/intern/winstuff.c @@ -58,12 +58,12 @@ int BLI_getInstallationDir(char * str) char dir[FILE_MAXDIR]; int a; /*change to utf support*/ - GetModuleFileName(NULL,str,FILE_MAX); + GetModuleFileName(NULL, str, FILE_MAX); BLI_split_dir_part(str, dir, sizeof(dir)); /* shouldn't be relative */ a = strlen(dir); if (dir[a-1] == '\\') dir[a-1]=0; - strcpy(str,dir); + strcpy(str, dir); return 1; } @@ -74,8 +74,8 @@ void RegisterBlendExtension_Fail(HKEY root) if (root) RegCloseKey(root); if (!G.background) - MessageBox(0,"Could not register file extension.","Blender error",MB_OK|MB_ICONERROR); - TerminateProcess(GetCurrentProcess(),1); + MessageBox(0, "Could not register file extension.", "Blender error", MB_OK|MB_ICONERROR); + TerminateProcess(GetCurrentProcess(), 1); } void RegisterBlendExtension(void) @@ -90,13 +90,13 @@ void RegisterBlendExtension(void) char BlPath[MAX_PATH]; char InstallDir[FILE_MAXDIR]; char SysDir[FILE_MAXDIR]; - const char *ThumbHandlerDLL; + const char *ThumbHandlerDLL; char RegCmd[MAX_PATH*2]; char MBox[256]; BOOL IsWOW64; printf("Registering file extension..."); - GetModuleFileName(0,BlPath,MAX_PATH); + GetModuleFileName(0, BlPath, MAX_PATH); // root is HKLM by default lresult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Classes", 0, KEY_ALL_ACCESS, &root); @@ -111,7 +111,7 @@ void RegisterBlendExtension(void) lresult = RegCreateKeyEx(root, "blendfile", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd); if (lresult == ERROR_SUCCESS) { - strcpy(buffer,"Blender File"); + strcpy(buffer, "Blender File"); lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1); RegCloseKey(hkey); } @@ -131,7 +131,7 @@ void RegisterBlendExtension(void) lresult = RegCreateKeyEx(root, "blendfile\\DefaultIcon", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd); if (lresult == ERROR_SUCCESS) { - sprintf(buffer, "\"%s\",1", BlPath); + sprintf(buffer, "\"%s\", 1", BlPath); lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1); RegCloseKey(hkey); } @@ -149,37 +149,37 @@ void RegisterBlendExtension(void) RegisterBlendExtension_Fail(root); BLI_getInstallationDir(InstallDir); - GetSystemDirectory(SysDir,FILE_MAXDIR); + GetSystemDirectory(SysDir, FILE_MAXDIR); #ifdef WIN64 ThumbHandlerDLL = "BlendThumb64.dll"; #else - IsWow64Process(GetCurrentProcess(),&IsWOW64); + IsWow64Process(GetCurrentProcess(), &IsWOW64); if (IsWOW64 == TRUE) ThumbHandlerDLL = "BlendThumb64.dll"; else ThumbHandlerDLL = "BlendThumb.dll"; #endif - snprintf(RegCmd,MAX_PATH*2,"%s\\regsvr32 /s \"%s\\%s\"",SysDir,InstallDir,ThumbHandlerDLL); + snprintf(RegCmd, MAX_PATH*2, "%s\\regsvr32 /s \"%s\\%s\"", SysDir, InstallDir, ThumbHandlerDLL); system(RegCmd); RegCloseKey(root); - printf("success (%s)\n",usr_mode ? "user" : "system"); + printf("success (%s)\n", usr_mode ? "user" : "system"); if (!G.background) { - sprintf(MBox,"File extension registered for %s.",usr_mode ? "the current user. To register for all users, run as an administrator" : "all users"); - MessageBox(0,MBox,"Blender",MB_OK|MB_ICONINFORMATION); + sprintf(MBox, "File extension registered for %s.", usr_mode ? "the current user. To register for all users, run as an administrator" : "all users"); + MessageBox(0, MBox, "Blender", MB_OK|MB_ICONINFORMATION); } - TerminateProcess(GetCurrentProcess(),0); + TerminateProcess(GetCurrentProcess(), 0); } DIR *opendir (const char *path) { - wchar_t *path_16 = alloc_utf16_from_8(path, 0); + wchar_t *path_16 = alloc_utf16_from_8(path, 0); if (GetFileAttributesW(path_16) & FILE_ATTRIBUTE_DIRECTORY) { DIR *newd= MEM_mallocN(sizeof(DIR), "opendir"); newd->handle = INVALID_HANDLE_VALUE; - sprintf(newd->path, "%s\\*",path); + sprintf(newd->path, "%s\\*", path); newd->direntry.d_ino= 0; newd->direntry.d_off= 0; @@ -198,20 +198,20 @@ DIR *opendir (const char *path) static char *BLI_alloc_utf_8_from_16(wchar_t *in16, size_t add) { size_t bsize = count_utf_8_from_16(in16); - char *out8 = NULL; + char *out8 = NULL; if (!bsize) return NULL; - out8 = (char*)MEM_mallocN(sizeof(char) * (bsize + add),"UTF-8 String"); - conv_utf_16_to_8(in16,out8, bsize); + out8 = (char*)MEM_mallocN(sizeof(char) * (bsize + add), "UTF-8 String"); + conv_utf_16_to_8(in16, out8, bsize); return out8; } static wchar_t *UNUSED_FUNCTION(BLI_alloc_utf16_from_8)(char *in8, size_t add) { size_t bsize = count_utf_16_from_8(in8); - wchar_t *out16 = NULL; + wchar_t *out16 = NULL; if (!bsize) return NULL; out16 =(wchar_t*) MEM_mallocN(sizeof(wchar_t) * (bsize + add), "UTF-16 String"); - conv_utf_8_to_16(in8,out16, bsize); + conv_utf_8_to_16(in8, out16, bsize); return out16; } @@ -236,7 +236,7 @@ struct dirent *readdir(DIR *dp) return &dp->direntry; } else if (FindNextFileW (dp->handle, &(dp->data))) { - dp->direntry.d_name= BLI_alloc_utf_8_from_16(dp->data.cFileName,0); + dp->direntry.d_name= BLI_alloc_utf_8_from_16(dp->data.cFileName, 0); return &dp->direntry; } @@ -245,7 +245,7 @@ struct dirent *readdir(DIR *dp) } } -int closedir (DIR *dp) +int closedir(DIR *dp) { if (dp->direntry.d_name) MEM_freeN(dp->direntry.d_name); if (dp->handle!=INVALID_HANDLE_VALUE) FindClose(dp->handle); @@ -262,7 +262,7 @@ void get_default_root(char *root) /* the default drive to resolve a directory without a specified drive * should be the Windows installation drive, since this was what the OS * assumes. */ - if (GetWindowsDirectory(str,MAX_PATH+1)) { + if (GetWindowsDirectory(str, MAX_PATH+1)) { root[0] = str[0]; root[1] = ':'; root[2] = '\\'; @@ -271,7 +271,7 @@ void get_default_root(char *root) else { /* if GetWindowsDirectory fails, something has probably gone wrong, * we are trying the blender install dir though */ - if (GetModuleFileName(NULL,str,MAX_PATH+1)) { + if (GetModuleFileName(NULL, str, MAX_PATH+1)) { printf("Error! Could not get the Windows Directory - Defaulting to Blender installation Dir!"); root[0] = str[0]; root[1] = ':'; diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index 35271f7b873..a0fe042e7fb 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -44,6 +44,8 @@ set(SRC intern/readfile.c intern/runtime.c intern/undofile.c + intern/versioning_250.c + intern/versioning_legacy.c intern/writefile.c BLO_readfile.h diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 181ed88ed87..5a8a74e1ba2 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -78,6 +78,7 @@ #include "DNA_nla_types.h" #include "DNA_node_types.h" #include "DNA_object_fluidsim.h" // NT +#include "DNA_object_types.h" #include "DNA_packedFile_types.h" #include "DNA_particle_types.h" #include "DNA_property_types.h" @@ -328,6 +329,11 @@ static void oldnewmap_insert(OldNewMap *onm, void *oldaddr, void *newaddr, int n entry->nr= nr; } +void blo_do_versions_oldnewmap_insert(OldNewMap *onm, void *oldaddr, void *newaddr, int nr) +{ + oldnewmap_insert(onm, oldaddr, newaddr, nr); +} + static void *oldnewmap_lookup_and_inc(OldNewMap *onm, void *addr) { int i; @@ -1177,6 +1183,11 @@ static void *newlibadr(FileData *fd, void *lib, void *adr) /* only lib data */ return oldnewmap_liblookup(fd->libmap, adr, lib); } +void *blo_do_versions_newlibadr(FileData *fd, void *lib, void *adr) /* only lib data */ +{ + return newlibadr(fd, lib, adr); +} + static void *newlibadr_us(FileData *fd, void *lib, void *adr) /* increases user number */ { ID *id= newlibadr(fd, lib, adr); @@ -1187,6 +1198,11 @@ static void *newlibadr_us(FileData *fd, void *lib, void *adr) /* increases user return id; } +void *blo_do_versions_newlibadr_us(FileData *fd, void *lib, void *adr) /* increases user number */ +{ + return newlibadr_us(fd, lib, adr); +} + static void change_idid_adr_fd(FileData *fd, void *old, void *new) { int i; @@ -1477,7 +1493,7 @@ static void test_pointer_array(FileData *fd, void **mat) len= MEM_allocN_len(*mat)/fd->filesdna->pointerlen; if (fd->filesdna->pointerlen==8 && fd->memsdna->pointerlen==4) { - ipoin=imat= MEM_mallocN( len*4, "newmatar"); + ipoin=imat= MEM_mallocN(len*4, "newmatar"); lpoin= *mat; while (len-- > 0) { @@ -1492,7 +1508,7 @@ static void test_pointer_array(FileData *fd, void **mat) } if (fd->filesdna->pointerlen==4 && fd->memsdna->pointerlen==8) { - lpoin=lmat= MEM_mallocN( len*8, "newmatar"); + lpoin=lmat= MEM_mallocN(len*8, "newmatar"); ipoin= *mat; while (len-- > 0) { @@ -1670,7 +1686,7 @@ static void direct_link_brush(FileData *fd, Brush *brush) if (brush->curve) direct_link_curvemapping(fd, brush->curve); else - brush_curve_preset(brush, CURVE_PRESET_SHARP); + BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP); brush->preview= NULL; brush->icon_imbuf= NULL; @@ -2202,7 +2218,7 @@ static void do_versions_socket_default_value(bNodeSocket *sock) } } -static void do_versions_nodetree_default_value(bNodeTree *ntree) +void blo_do_versions_nodetree_default_value(bNodeTree *ntree) { bNode *node; bNodeSocket *sock; @@ -2225,7 +2241,7 @@ static void lib_nodetree_init_types_cb(void *UNUSED(data), ID *UNUSED(id), bNode ntreeInitTypes(ntree); /* need to do this here instead of in do_versions, otherwise next function can crash */ - do_versions_nodetree_default_value(ntree); + blo_do_versions_nodetree_default_value(ntree); /* XXX could be replaced by do_versions for new nodes */ for (node=ntree->nodes.first; node; node=node->next) @@ -3541,7 +3557,7 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase } else { /* particle modifier must be removed before particle system */ - ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys); + ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys); BLI_remlink(&ob->modifiers, psmd); modifier_free((ModifierData *)psmd); @@ -3557,15 +3573,15 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles) int a; for (psys=particles->first; psys; psys=psys->next) { - psys->particles=newdataadr(fd,psys->particles); + psys->particles=newdataadr(fd, psys->particles); if (psys->particles && psys->particles->hair) { - for (a=0,pa=psys->particles; a<psys->totpart; a++, pa++) - pa->hair=newdataadr(fd,pa->hair); + for (a=0, pa=psys->particles; a<psys->totpart; a++, pa++) + pa->hair=newdataadr(fd, pa->hair); } if (psys->particles && psys->particles->keys) { - for (a=0,pa=psys->particles; a<psys->totpart; a++, pa++) { + for (a=0, pa=psys->particles; a<psys->totpart; a++, pa++) { pa->keys= NULL; pa->totkey= 0; } @@ -3576,17 +3592,17 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles) if (psys->particles && psys->particles->boid) { pa = psys->particles; pa->boid = newdataadr(fd, pa->boid); - for (a=1,pa++; a<psys->totpart; a++, pa++) + for (a=1, pa++; a<psys->totpart; a++, pa++) pa->boid = (pa-1)->boid + 1; } else if (psys->particles) { - for (a=0,pa=psys->particles; a<psys->totpart; a++, pa++) + for (a=0, pa=psys->particles; a<psys->totpart; a++, pa++) pa->boid = NULL; } psys->fluid_springs = newdataadr(fd, psys->fluid_springs); - psys->child = newdataadr(fd,psys->child); + psys->child = newdataadr(fd, psys->child); psys->effectors = NULL; link_list(fd, &psys->targets); @@ -4454,9 +4470,9 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) collmd->xnew = newdataadr(fd, collmd->xnew); collmd->mfaces = newdataadr(fd, collmd->mfaces); - collmd->current_x = MEM_callocN(sizeof(MVert)*collmd->numverts,"current_x"); - collmd->current_xnew = MEM_callocN(sizeof(MVert)*collmd->numverts,"current_xnew"); - collmd->current_v = MEM_callocN(sizeof(MVert)*collmd->numverts,"current_v"); + collmd->current_x = MEM_callocN(sizeof(MVert)*collmd->numverts, "current_x"); + collmd->current_xnew = MEM_callocN(sizeof(MVert)*collmd->numverts, "current_xnew"); + collmd->current_v = MEM_callocN(sizeof(MVert)*collmd->numverts, "current_v"); */ collmd->x = NULL; @@ -4682,7 +4698,7 @@ static void direct_link_object(FileData *fd, Object *ob) ob->fluidsimSettings= newdataadr(fd, ob->fluidsimSettings); /* NT */ link_list(fd, &ob->particlesystem); - direct_link_particlesystems(fd,&ob->particlesystem); + direct_link_particlesystems(fd, &ob->particlesystem); link_list(fd, &ob->prop); prop= ob->prop.first; @@ -4843,7 +4859,8 @@ static void lib_link_scene(FileData *fd, Main *main) } } - SEQ_BEGIN (sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) + { if (seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo); seq->scene_sound = NULL; if (seq->scene) { @@ -4979,7 +4996,8 @@ static void direct_link_scene(FileData *fd, Scene *sce) /* recursive link sequences, lb will be correctly initialized */ link_recurs_seq(fd, &ed->seqbase); - SEQ_BEGIN (ed, seq) { + SEQ_BEGIN (ed, seq) + { seq->seq1= newdataadr(fd, seq->seq1); seq->seq2= newdataadr(fd, seq->seq2); seq->seq3= newdataadr(fd, seq->seq3); @@ -5403,6 +5421,7 @@ static void lib_link_screen(FileData *fd, Main *main) sclip->clip= newlibadr_us(fd, sc->id.lib, sclip->clip); sclip->scopes.track_preview = NULL; + sclip->draw_context = NULL; sclip->scopes.ok = 0; } } @@ -5723,7 +5742,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype) /* for the saved 2.50 files without regiondata */ /* and as patch for 2.48 and older */ -static void view3d_split_250(View3D *v3d, ListBase *regions) +void blo_do_versions_view3d_split_250(View3D *v3d, ListBase *regions) { ARegion *ar; @@ -5809,7 +5828,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc) } /* add local view3d too */ else if (sa->spacetype==SPACE_VIEW3D) - view3d_split_250(sa->spacedata.first, &sa->regionbase); + blo_do_versions_view3d_split_250(sa->spacedata.first, &sa->regionbase); for (sl= sa->spacedata.first; sl; sl= sl->next) { link_list(fd, &(sl->regionbase)); @@ -5849,7 +5868,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc) if (v3d->drawtype == OB_RENDER) v3d->drawtype = OB_WIRE; - view3d_split_250(v3d, &sl->regionbase); + blo_do_versions_view3d_split_250(v3d, &sl->regionbase); } else if (sl->spacetype==SPACE_IPO) { SpaceIpo *sipo= (SpaceIpo*)sl; @@ -6206,6 +6225,9 @@ static void direct_link_movieclip(FileData *fd, MovieClip *clip) clip->tracking.stabilization.scaleibuf= NULL; clip->tracking.stabilization.rot_track= newdataadr(fd, clip->tracking.stabilization.rot_track); + clip->tracking.dopesheet.ok = 0; + clip->tracking.dopesheet.channels.first = clip->tracking.dopesheet.channels.last = NULL; + link_list(fd, &tracking->objects); object= tracking->objects.first; @@ -6676,1012 +6698,7 @@ static void link_global(FileData *fd, BlendFileData *bfd) } } -static void vcol_to_fcol(Mesh *me) -{ - MFace *mface; - unsigned int *mcol, *mcoln, *mcolmain; - int a; - - if (me->totface==0 || me->mcol==NULL) return; - - mcoln= mcolmain= MEM_mallocN(4*sizeof(int)*me->totface, "mcoln"); - mcol = (unsigned int *)me->mcol; - mface= me->mface; - for (a=me->totface; a>0; a--, mface++) { - mcoln[0]= mcol[mface->v1]; - mcoln[1]= mcol[mface->v2]; - mcoln[2]= mcol[mface->v3]; - mcoln[3]= mcol[mface->v4]; - mcoln+= 4; - } - - MEM_freeN(me->mcol); - me->mcol= (MCol *)mcolmain; -} - -static int map_223_keybd_code_to_224_keybd_code(int code) -{ - switch (code) { - case 312: return 311; /* F12KEY */ - case 159: return 161; /* PADSLASHKEY */ - case 161: return 150; /* PAD0 */ - case 154: return 151; /* PAD1 */ - case 150: return 152; /* PAD2 */ - case 155: return 153; /* PAD3 */ - case 151: return 154; /* PAD4 */ - case 156: return 155; /* PAD5 */ - case 152: return 156; /* PAD6 */ - case 157: return 157; /* PAD7 */ - case 153: return 158; /* PAD8 */ - case 158: return 159; /* PAD9 */ - default: return code; - } -} - -static void do_version_bone_head_tail_237(Bone *bone) -{ - Bone *child; - float vec[3]; - - /* head */ - copy_v3_v3(bone->arm_head, bone->arm_mat[3]); - - /* tail is in current local coord system */ - copy_v3_v3(vec, bone->arm_mat[1]); - mul_v3_fl(vec, bone->length); - add_v3_v3v3(bone->arm_tail, bone->arm_head, vec); - - for (child= bone->childbase.first; child; child= child->next) - do_version_bone_head_tail_237(child); -} - -static void bone_version_238(ListBase *lb) -{ - Bone *bone; - - for (bone= lb->first; bone; bone= bone->next) { - if (bone->rad_tail==0.0f && bone->rad_head==0.0f) { - bone->rad_head= 0.25f*bone->length; - bone->rad_tail= 0.1f*bone->length; - - bone->dist-= bone->rad_head; - if (bone->dist<=0.0f) bone->dist= 0.0f; - } - bone_version_238(&bone->childbase); - } -} - -static void bone_version_239(ListBase *lb) -{ - Bone *bone; - - for (bone= lb->first; bone; bone= bone->next) { - if (bone->layer==0) - bone->layer= 1; - bone_version_239(&bone->childbase); - } -} - -static void ntree_version_241(bNodeTree *ntree) -{ - bNode *node; - - if (ntree->type==NTREE_COMPOSIT) { - for (node= ntree->nodes.first; node; node= node->next) { - if (node->type==CMP_NODE_BLUR) { - if (node->storage==NULL) { - NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); - nbd->sizex= node->custom1; - nbd->sizey= node->custom2; - nbd->filtertype= R_FILTER_QUAD; - node->storage= nbd; - } - } - else if (node->type==CMP_NODE_VECBLUR) { - if (node->storage==NULL) { - NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); - nbd->samples= node->custom1; - nbd->maxspeed= node->custom2; - nbd->fac= 1.0f; - node->storage= nbd; - } - } - } - } -} - -static void ntree_version_242(bNodeTree *ntree) -{ - bNode *node; - - if (ntree->type==NTREE_COMPOSIT) { - for (node= ntree->nodes.first; node; node= node->next) { - if (node->type==CMP_NODE_HUE_SAT) { - if (node->storage) { - NodeHueSat *nhs= node->storage; - if (nhs->val==0.0f) nhs->val= 1.0f; - } - } - } - } - else if (ntree->type==NTREE_SHADER) { - for (node= ntree->nodes.first; node; node= node->next) - if (node->type == SH_NODE_GEOMETRY && node->storage == NULL) - node->storage= MEM_callocN(sizeof(NodeGeometry), "NodeGeometry"); - } - -} - -static void customdata_version_242(Mesh *me) -{ - CustomDataLayer *layer; - MTFace *mtf; - MCol *mcol; - TFace *tf; - int a, mtfacen, mcoln; - - if (!me->vdata.totlayer) { - CustomData_add_layer(&me->vdata, CD_MVERT, CD_ASSIGN, me->mvert, me->totvert); - - if (me->msticky) - CustomData_add_layer(&me->vdata, CD_MSTICKY, CD_ASSIGN, me->msticky, me->totvert); - if (me->dvert) - CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_ASSIGN, me->dvert, me->totvert); - } - - if (!me->edata.totlayer) - CustomData_add_layer(&me->edata, CD_MEDGE, CD_ASSIGN, me->medge, me->totedge); - - if (!me->fdata.totlayer) { - CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, me->mface, me->totface); - - if (me->tface) { - if (me->mcol) - MEM_freeN(me->mcol); - - me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_CALLOC, NULL, me->totface); - me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface); - - mtf= me->mtface; - mcol= me->mcol; - tf= me->tface; - - for (a=0; a < me->totface; a++, mtf++, tf++, mcol+=4) { - memcpy(mcol, tf->col, sizeof(tf->col)); - memcpy(mtf->uv, tf->uv, sizeof(tf->uv)); - - mtf->flag= tf->flag; - mtf->unwrap= tf->unwrap; - mtf->mode= tf->mode; - mtf->tile= tf->tile; - mtf->tpage= tf->tpage; - mtf->transp= tf->transp; - } - - MEM_freeN(me->tface); - me->tface= NULL; - } - else if (me->mcol) { - me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, me->mcol, me->totface); - } - } - - if (me->tface) { - MEM_freeN(me->tface); - me->tface= NULL; - } - - for (a=0, mtfacen=0, mcoln=0; a < me->fdata.totlayer; a++) { - layer= &me->fdata.layers[a]; - - if (layer->type == CD_MTFACE) { - if (layer->name[0] == 0) { - if (mtfacen == 0) strcpy(layer->name, "UVMap"); - else BLI_snprintf(layer->name, sizeof(layer->name), "UVMap.%.3d", mtfacen); - } - mtfacen++; - } - else if (layer->type == CD_MCOL) { - if (layer->name[0] == 0) { - if (mcoln == 0) strcpy(layer->name, "Col"); - else BLI_snprintf(layer->name, sizeof(layer->name), "Col.%.3d", mcoln); - } - mcoln++; - } - } - - mesh_update_customdata_pointers(me, TRUE); -} - -/*only copy render texface layer from active*/ -static void customdata_version_243(Mesh *me) -{ - CustomDataLayer *layer; - int a; - - for (a=0; a < me->fdata.totlayer; a++) { - layer= &me->fdata.layers[a]; - layer->active_rnd = layer->active; - } -} - -/* struct NodeImageAnim moved to ImageUser, and we make it default available */ -static void do_version_ntree_242_2(bNodeTree *ntree) -{ - bNode *node; - - if (ntree->type==NTREE_COMPOSIT) { - for (node= ntree->nodes.first; node; node= node->next) { - if (ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { - /* only image had storage */ - if (node->storage) { - NodeImageAnim *nia= node->storage; - ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "ima user node"); - - iuser->frames= nia->frames; - iuser->sfra= nia->sfra; - iuser->offset= nia->nr-1; - iuser->cycl= nia->cyclic; - iuser->fie_ima= 2; - iuser->ok= 1; - - node->storage= iuser; - MEM_freeN(nia); - } - else { - ImageUser *iuser= node->storage= MEM_callocN(sizeof(ImageUser), "node image user"); - iuser->sfra= 1; - iuser->fie_ima= 2; - iuser->ok= 1; - } - } - } - } -} - -static void ntree_version_245(FileData *fd, Library *lib, bNodeTree *ntree) -{ - bNode *node; - NodeTwoFloats *ntf; - ID *nodeid; - Image *image; - ImageUser *iuser; - - if (ntree->type==NTREE_COMPOSIT) { - for (node= ntree->nodes.first; node; node= node->next) { - if (node->type == CMP_NODE_ALPHAOVER) { - if (!node->storage) { - ntf= MEM_callocN(sizeof(NodeTwoFloats), "NodeTwoFloats"); - node->storage= ntf; - if (node->custom1) - ntf->x= 1.0f; - } - } - - /* fix for temporary flag changes during 245 cycle */ - nodeid= newlibadr(fd, lib, node->id); - if (node->storage && nodeid && GS(nodeid->name) == ID_IM) { - image= (Image*)nodeid; - iuser= node->storage; - if (iuser->flag & IMA_OLD_PREMUL) { - iuser->flag &= ~IMA_OLD_PREMUL; - iuser->flag |= IMA_DO_PREMUL; - } - if (iuser->flag & IMA_DO_PREMUL) { - image->flag &= ~IMA_OLD_PREMUL; - image->flag |= IMA_DO_PREMUL; - } - } - } - } -} - -static void idproperties_fix_groups_lengths_recurse(IDProperty *prop) -{ - IDProperty *loop; - int i; - - for (loop=prop->data.group.first, i=0; loop; loop=loop->next, i++) { - if (loop->type == IDP_GROUP) idproperties_fix_groups_lengths_recurse(loop); - } - - if (prop->len != i) { - printf("Found and fixed bad id property group length.\n"); - prop->len = i; - } -} - -static void idproperties_fix_group_lengths(ListBase idlist) -{ - ID *id; - - for (id=idlist.first; id; id=id->next) { - if (id->properties) { - idproperties_fix_groups_lengths_recurse(id->properties); - } - } -} - -static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me) -{ - Material *ma; - MFace *mf; - MTFace *tf; - int a, b, texalpha; - - /* verify we have a tface layer */ - for (b=0; b<me->fdata.totlayer; b++) - if (me->fdata.layers[b].type == CD_MTFACE) - break; - - if (b == me->fdata.totlayer) - return; - - /* if we do, set alpha sort if the game engine did it before */ - for (a=0, mf=me->mface; a<me->totface; a++, mf++) { - if (mf->mat_nr < me->totcol) { - ma= newlibadr(fd, lib, me->mat[mf->mat_nr]); - texalpha = 0; - - /* we can't read from this if it comes from a library, - * because direct_link might not have happened on it, - * so ma->mtex is not pointing to valid memory yet */ - if (ma && ma->id.lib) - ma= NULL; - - for (b=0; ma && b<MAX_MTEX; b++) - if (ma->mtex && ma->mtex[b] && ma->mtex[b]->mapto & MAP_ALPHA) - texalpha = 1; - } - else { - ma= NULL; - texalpha = 0; - } - - for (b=0; b<me->fdata.totlayer; b++) { - if (me->fdata.layers[b].type == CD_MTFACE) { - tf = ((MTFace*)me->fdata.layers[b].data) + a; - - tf->mode &= ~TF_ALPHASORT; - if (ma && (ma->mode & MA_ZTRANSP)) - if (ELEM(tf->transp, TF_ALPHA, TF_ADD) || (texalpha && (tf->transp != TF_CLIP))) - tf->mode |= TF_ALPHASORT; - } - } - } -} - -/* 2.50 patch */ -static void area_add_header_region(ScrArea *sa, ListBase *lb) -{ - ARegion *ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_HEADER; - if (sa->headertype==HEADERDOWN) - ar->alignment= RGN_ALIGN_BOTTOM; - else - ar->alignment= RGN_ALIGN_TOP; - - /* initialize view2d data for header region, to allow panning */ - /* is copy from ui_view2d.c */ - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); - ar->v2d.keepofs = V2D_LOCKOFS_Y; - ar->v2d.keeptot = V2D_KEEPTOT_STRICT; - ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; - ar->v2d.flag = (V2D_PIXELOFS_X|V2D_PIXELOFS_Y); -} - -static void sequencer_init_preview_region(ARegion* ar) -{ - // XXX a bit ugly still, copied from space_sequencer - /* NOTE: if you change values here, also change them in space_sequencer.c, sequencer_new */ - ar->regiontype= RGN_TYPE_PREVIEW; - ar->alignment= RGN_ALIGN_TOP; - ar->flag |= RGN_FLAG_HIDDEN; - ar->v2d.keepzoom= V2D_KEEPASPECT | V2D_KEEPZOOM; - ar->v2d.minzoom= 0.00001f; - ar->v2d.maxzoom= 100000.0f; - ar->v2d.tot.xmin = -960.0f; /* 1920 width centered */ - ar->v2d.tot.ymin = -540.0f; /* 1080 height centered */ - ar->v2d.tot.xmax = 960.0f; - ar->v2d.tot.ymax = 540.0f; - ar->v2d.min[0]= 0.0f; - ar->v2d.min[1]= 0.0f; - ar->v2d.max[0]= 12000.0f; - ar->v2d.max[1]= 12000.0f; - ar->v2d.cur= ar->v2d.tot; - ar->v2d.align= V2D_ALIGN_FREE; // (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y); - ar->v2d.keeptot= V2D_KEEPTOT_FREE; -} - -/* 2.50 patch */ -static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) -{ - ARegion *ar; - ARegion *ar_main; - - if (sl) { - /* first channels for ipo action nla... */ - switch (sl->spacetype) { - case SPACE_IPO: - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - - // for some reason, this doesn't seem to go auto like for NLA... - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_RIGHT; - ar->v2d.scroll= V2D_SCROLL_RIGHT; - ar->v2d.flag = RGN_FLAG_HIDDEN; - break; - - case SPACE_ACTION: - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll= V2D_SCROLL_BOTTOM; - ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - break; - - case SPACE_NLA: - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll= V2D_SCROLL_BOTTOM; - ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - - // for some reason, some files still don't get this auto - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_RIGHT; - ar->v2d.scroll= V2D_SCROLL_RIGHT; - ar->v2d.flag = RGN_FLAG_HIDDEN; - break; - - case SPACE_NODE: - ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - /* temporarily hide it */ - ar->flag = RGN_FLAG_HIDDEN; - break; - case SPACE_FILE: - ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - - ar= MEM_callocN(sizeof(ARegion), "ui area for file"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_TOP; - break; - case SPACE_SEQ: - ar_main = (ARegion*)lb->first; - for (; ar_main; ar_main = ar_main->next) { - if (ar_main->regiontype == RGN_TYPE_WINDOW) - break; - } - ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer"); - BLI_insertlinkbefore(lb, ar_main, ar); - sequencer_init_preview_region(ar); - break; - case SPACE_VIEW3D: - /* toolbar */ - ar= MEM_callocN(sizeof(ARegion), "toolbar for view3d"); - - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_TOOLS; - ar->alignment= RGN_ALIGN_LEFT; - ar->flag = RGN_FLAG_HIDDEN; - - /* tool properties */ - ar= MEM_callocN(sizeof(ARegion), "tool properties for view3d"); - - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_TOOL_PROPS; - ar->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV; - ar->flag = RGN_FLAG_HIDDEN; - - /* buttons/list view */ - ar= MEM_callocN(sizeof(ARegion), "buttons for view3d"); - - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_RIGHT; - ar->flag = RGN_FLAG_HIDDEN; -#if 0 - case SPACE_BUTS: - /* context UI region */ - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_RIGHT; - - break; -#endif - } - } - - /* main region */ - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - - BLI_addtail(lb, ar); - ar->winrct= sa->totrct; - - ar->regiontype= RGN_TYPE_WINDOW; - - if (sl) { - /* if active spacetype has view2d data, copy that over to main region */ - /* and we split view3d */ - switch (sl->spacetype) { - case SPACE_VIEW3D: - view3d_split_250((View3D *)sl, lb); - break; - - case SPACE_OUTLINER: - { - SpaceOops *soops= (SpaceOops *)sl; - - memcpy(&ar->v2d, &soops->v2d, sizeof(View2D)); - - ar->v2d.scroll &= ~V2D_SCROLL_LEFT; - ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); - ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom |= (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPASPECT); - ar->v2d.keeptot = V2D_KEEPTOT_STRICT; - ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; - //ar->v2d.flag |= V2D_IS_INITIALISED; - } - break; - case SPACE_TIME: - { - SpaceTime *stime= (SpaceTime *)sl; - memcpy(&ar->v2d, &stime->v2d, sizeof(View2D)); - - ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.align |= V2D_ALIGN_NO_NEG_Y; - ar->v2d.keepofs |= V2D_LOCKOFS_Y; - ar->v2d.keepzoom |= V2D_LOCKZOOM_Y; - ar->v2d.tot.ymin = ar->v2d.cur.ymin = -10.0; - ar->v2d.min[1]= ar->v2d.max[1]= 20.0; - } - break; - case SPACE_IPO: - { - SpaceIpo *sipo= (SpaceIpo *)sl; - memcpy(&ar->v2d, &sipo->v2d, sizeof(View2D)); - - /* init mainarea view2d */ - ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); - - ar->v2d.min[0]= FLT_MIN; - ar->v2d.min[1]= FLT_MIN; - - ar->v2d.max[0]= MAXFRAMEF; - ar->v2d.max[1]= FLT_MAX; - - //ar->v2d.flag |= V2D_IS_INITIALISED; - break; - } - case SPACE_NLA: - { - SpaceNla *snla= (SpaceNla *)sl; - memcpy(&ar->v2d, &snla->v2d, sizeof(View2D)); - - ar->v2d.tot.ymin = (float)(-sa->winy)/3.0f; - ar->v2d.tot.ymax = 0.0f; - - ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_RIGHT); - ar->v2d.align = V2D_ALIGN_NO_POS_Y; - ar->v2d.flag |= V2D_VIEWSYNC_AREA_VERTICAL; - break; - } - case SPACE_ACTION: - { - SpaceAction *saction= (SpaceAction *)sl; - - /* we totally reinit the view for the Action Editor, as some old instances had some weird cruft set */ - ar->v2d.tot.xmin = -20.0f; - ar->v2d.tot.ymin = (float)(-sa->winy)/3.0f; - ar->v2d.tot.xmax = (float)((sa->winx > 120)? (sa->winx) : 120); - ar->v2d.tot.ymax = 0.0f; - - ar->v2d.cur= ar->v2d.tot; - - ar->v2d.min[0]= 0.0f; - ar->v2d.min[1]= 0.0f; - - ar->v2d.max[0]= MAXFRAMEF; - ar->v2d.max[1]= FLT_MAX; - - ar->v2d.minzoom= 0.01f; - ar->v2d.maxzoom= 50; - ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_RIGHT); - ar->v2d.keepzoom= V2D_LOCKZOOM_Y; - ar->v2d.align= V2D_ALIGN_NO_POS_Y; - ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - - /* for old files with ShapeKey editors open + an action set, clear the action as - * it doesn't make sense in the new system (i.e. violates concept that ShapeKey edit - * only shows ShapeKey-rooted actions only) - */ - if (saction->mode == SACTCONT_SHAPEKEY) - saction->action = NULL; - break; - } - case SPACE_SEQ: - { - SpaceSeq *sseq= (SpaceSeq *)sl; - memcpy(&ar->v2d, &sseq->v2d, sizeof(View2D)); - - ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); - ar->v2d.align= V2D_ALIGN_NO_NEG_Y; - ar->v2d.flag |= V2D_IS_INITIALISED; - break; - } - case SPACE_NODE: - { - SpaceNode *snode= (SpaceNode *)sl; - memcpy(&ar->v2d, &snode->v2d, sizeof(View2D)); - - ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; - break; - } - case SPACE_BUTS: - { - SpaceButs *sbuts= (SpaceButs *)sl; - memcpy(&ar->v2d, &sbuts->v2d, sizeof(View2D)); - - ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - break; - } - case SPACE_FILE: - { - // SpaceFile *sfile= (SpaceFile *)sl; - ar->v2d.tot.xmin = ar->v2d.tot.ymin = 0; - ar->v2d.tot.xmax = ar->winx; - ar->v2d.tot.ymax = ar->winy; - ar->v2d.cur = ar->v2d.tot; - ar->regiontype= RGN_TYPE_WINDOW; - ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); - ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); - break; - } - case SPACE_TEXT: - { - SpaceText *st= (SpaceText *)sl; - st->flags |= ST_FIND_WRAP; - } - //case SPACE_XXX: // FIXME... add other ones - // memcpy(&ar->v2d, &((SpaceXxx *)sl)->v2d, sizeof(View2D)); - // break; - } - } -} - -static void do_versions_windowmanager_2_50(bScreen *screen) -{ - ScrArea *sa; - SpaceLink *sl; - - /* add regions */ - for (sa= screen->areabase.first; sa; sa= sa->next) { - - /* we keep headertype variable to convert old files only */ - if (sa->headertype) - area_add_header_region(sa, &sa->regionbase); - - area_add_window_regions(sa, sa->spacedata.first, &sa->regionbase); - - /* space imageselect is deprecated */ - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IMASEL) - sl->spacetype= SPACE_EMPTY; /* spacedata then matches */ - } - - /* space sound is deprecated */ - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_SOUND) - sl->spacetype= SPACE_EMPTY; /* spacedata then matches */ - } - - /* it seems to be possible in 2.5 to have this saved, filewindow probably */ - sa->butspacetype= sa->spacetype; - - /* pushed back spaces also need regions! */ - if (sa->spacedata.first) { - sl= sa->spacedata.first; - for (sl= sl->next; sl; sl= sl->next) { - if (sa->headertype) - area_add_header_region(sa, &sl->regionbase); - area_add_window_regions(sa, sl, &sl->regionbase); - } - } - } -} - -static void versions_gpencil_add_main(ListBase *lb, ID *id, const char *name) -{ - - BLI_addtail(lb, id); - id->us= 1; - id->flag= LIB_FAKEUSER; - *( (short *)id->name )= ID_GD; - - new_id(lb, id, name); - /* alphabetic insterion: is in new_id */ - - if (G.debug & G_DEBUG) - printf("Converted GPencil to ID: %s\n", id->name+2); -} - -static void do_versions_gpencil_2_50(Main *main, bScreen *screen) -{ - ScrArea *sa; - SpaceLink *sl; - - /* add regions */ - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D*) sl; - if (v3d->gpd) { - versions_gpencil_add_main(&main->gpencil, (ID *)v3d->gpd, "GPencil View3D"); - v3d->gpd= NULL; - } - } - else if (sl->spacetype==SPACE_NODE) { - SpaceNode *snode= (SpaceNode *)sl; - if (snode->gpd) { - versions_gpencil_add_main(&main->gpencil, (ID *)snode->gpd, "GPencil Node"); - snode->gpd= NULL; - } - } - else if (sl->spacetype==SPACE_SEQ) { - SpaceSeq *sseq= (SpaceSeq *)sl; - if (sseq->gpd) { - versions_gpencil_add_main(&main->gpencil, (ID *)sseq->gpd, "GPencil Node"); - sseq->gpd= NULL; - } - } - else if (sl->spacetype==SPACE_IMAGE) { - SpaceImage *sima= (SpaceImage *)sl; -#if 0 /* see comment on r28002 */ - if (sima->gpd) { - versions_gpencil_add_main(&main->gpencil, (ID *)sima->gpd, "GPencil Image"); - sima->gpd= NULL; - } -#else - sima->gpd= NULL; -#endif - } - } - } -} - /* deprecated, only keep this for readfile.c */ -static PartEff *do_version_give_parteff_245(Object *ob) -{ - PartEff *paf; - - paf= ob->effect.first; - while (paf) { - if (paf->type==EFF_PARTICLE) return paf; - paf= paf->next; - } - return NULL; -} -static void do_version_free_effect_245(Effect *eff) -{ - PartEff *paf; - - if (eff->type==EFF_PARTICLE) { - paf= (PartEff *)eff; - if (paf->keys) MEM_freeN(paf->keys); - } - MEM_freeN(eff); -} -static void do_version_free_effects_245(ListBase *lb) -{ - Effect *eff; - - eff= lb->first; - while (eff) { - BLI_remlink(lb, eff); - do_version_free_effect_245(eff); - eff= lb->first; - } -} - -static void do_version_mtex_factor_2_50(MTex **mtex_array, short idtype) -{ - MTex *mtex; - float varfac, colfac; - int a, neg; - - if (!mtex_array) - return; - - for (a=0; a<MAX_MTEX; a++) { - if (mtex_array[a]) { - mtex= mtex_array[a]; - - neg= mtex->maptoneg; - varfac= mtex->varfac; - colfac= mtex->colfac; - - if (neg & MAP_DISP) mtex->dispfac= -mtex->dispfac; - if (neg & MAP_NORM) mtex->norfac= -mtex->norfac; - if (neg & MAP_WARP) mtex->warpfac= -mtex->warpfac; - - mtex->colspecfac= (neg & MAP_COLSPEC)? -colfac: colfac; - mtex->mirrfac= (neg & MAP_COLMIR)? -colfac: colfac; - mtex->alphafac= (neg & MAP_ALPHA)? -varfac: varfac; - mtex->difffac= (neg & MAP_REF)? -varfac: varfac; - mtex->specfac= (neg & MAP_SPEC)? -varfac: varfac; - mtex->emitfac= (neg & MAP_EMIT)? -varfac: varfac; - mtex->hardfac= (neg & MAP_HAR)? -varfac: varfac; - mtex->raymirrfac= (neg & MAP_RAYMIRR)? -varfac: varfac; - mtex->translfac= (neg & MAP_TRANSLU)? -varfac: varfac; - mtex->ambfac= (neg & MAP_AMB)? -varfac: varfac; - mtex->colemitfac= (neg & MAP_EMISSION_COL)? -colfac: colfac; - mtex->colreflfac= (neg & MAP_REFLECTION_COL)? -colfac: colfac; - mtex->coltransfac= (neg & MAP_TRANSMISSION_COL)? -colfac: colfac; - mtex->densfac= (neg & MAP_DENSITY)? -varfac: varfac; - mtex->scatterfac= (neg & MAP_SCATTERING)? -varfac: varfac; - mtex->reflfac= (neg & MAP_REFLECTION)? -varfac: varfac; - - mtex->timefac= (neg & MAP_PA_TIME)? -varfac: varfac; - mtex->lengthfac= (neg & MAP_PA_LENGTH)? -varfac: varfac; - mtex->clumpfac= (neg & MAP_PA_CLUMP)? -varfac: varfac; - mtex->kinkfac= (neg & MAP_PA_KINK)? -varfac: varfac; - mtex->roughfac= (neg & MAP_PA_ROUGH)? -varfac: varfac; - mtex->padensfac= (neg & MAP_PA_DENS)? -varfac: varfac; - mtex->lifefac= (neg & MAP_PA_LIFE)? -varfac: varfac; - mtex->sizefac= (neg & MAP_PA_SIZE)? -varfac: varfac; - mtex->ivelfac= (neg & MAP_PA_IVEL)? -varfac: varfac; - - mtex->shadowfac= (neg & LAMAP_SHAD)? -colfac: colfac; - - mtex->zenupfac= (neg & WOMAP_ZENUP)? -colfac: colfac; - mtex->zendownfac= (neg & WOMAP_ZENDOWN)? -colfac: colfac; - mtex->blendfac= (neg & WOMAP_BLEND)? -varfac: varfac; - - if (idtype == ID_MA) - mtex->colfac= (neg & MAP_COL)? -colfac: colfac; - else if (idtype == ID_LA) - mtex->colfac= (neg & LAMAP_COL)? -colfac: colfac; - else if (idtype == ID_WO) - mtex->colfac= (neg & WOMAP_HORIZ)? -colfac: colfac; - } - } -} - -static void do_version_mdef_250(Main *main) -{ - Object *ob; - ModifierData *md; - MeshDeformModifierData *mmd; - - for (ob= main->object.first; ob; ob=ob->id.next) { - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type == eModifierType_MeshDeform) { - mmd= (MeshDeformModifierData*)md; - - if (mmd->bindcos) { - /* make bindcos NULL in order to trick older versions - * into thinking that the mesh was not bound yet */ - mmd->bindcagecos= mmd->bindcos; - mmd->bindcos= NULL; - - modifier_mdef_compact_influences(md); - } - } - } - } -} - -static void do_version_constraints_radians_degrees_250(ListBase *lb) -{ - bConstraint *con; - - for (con=lb->first; con; con=con->next) { - if (con->type==CONSTRAINT_TYPE_RIGIDBODYJOINT) { - bRigidBodyJointConstraint *data = con->data; - data->axX *= (float)(M_PI/180.0); - data->axY *= (float)(M_PI/180.0); - data->axZ *= (float)(M_PI/180.0); - } - else if (con->type==CONSTRAINT_TYPE_KINEMATIC) { - bKinematicConstraint *data = con->data; - data->poleangle *= (float)(M_PI/180.0); - } - else if (con->type==CONSTRAINT_TYPE_ROTLIMIT) { - bRotLimitConstraint *data = con->data; - - data->xmin *= (float)(M_PI/180.0); - data->xmax *= (float)(M_PI/180.0); - data->ymin *= (float)(M_PI/180.0); - data->ymax *= (float)(M_PI/180.0); - data->zmin *= (float)(M_PI/180.0); - data->zmax *= (float)(M_PI/180.0); - } - } -} - -/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */ -static void do_version_old_trackto_to_constraints(Object *ob) -{ - /* create new trackto constraint from the relationship */ - if (ob->track) { - bConstraint *con= add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); - bTrackToConstraint *data = con->data; - - /* copy tracking settings from the object */ - data->tar = ob->track; - data->reserved1 = ob->trackflag; - data->reserved2 = ob->upflag; - } - - /* clear old track setting */ - ob->track = NULL; -} - -static void do_versions_seq_unique_name_all_strips( - Scene * sce, ListBase *seqbasep) -{ - Sequence * seq = seqbasep->first; - - while (seq) { - seqbase_unique_name_recursive(&sce->ed->seqbase, seq); - if (seq->seqbase.first) { - do_versions_seq_unique_name_all_strips( - sce, &seq->seqbase); - } - seq=seq->next; - } -} - - -static void do_version_bone_roll_256(Bone *bone) -{ - Bone *child; - float submat[3][3]; - - copy_m3_m4(submat, bone->arm_mat); - mat3_to_vec_roll(submat, NULL, &bone->arm_roll); - - for (child = bone->childbase.first; child; child = child->next) - do_version_bone_roll_256(child); -} - -static void do_versions_nodetree_dynamic_sockets(bNodeTree *ntree) -{ - bNodeSocket *sock; - for (sock=ntree->inputs.first; sock; sock=sock->next) - sock->flag |= SOCK_DYNAMIC; - for (sock=ntree->outputs.first; sock; sock=sock->next) - sock->flag |= SOCK_DYNAMIC; -} - void convert_tface_mt(FileData *fd, Main *main) { Main *gmain; @@ -7955,4989 +6972,32 @@ static void do_versions_mesh_mloopcol_swap_2_62_1(Mesh *me) } } -static void do_versions(FileData *fd, Library *lib, Main *main) +static void do_versions_nodetree_multi_file_output_path_2_64_0(bNodeTree *ntree) { - /* WATCH IT!!!: pointers from libdata have not been converted */ - - if (G.debug & G_DEBUG) - printf("read file %s\n Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision); - - if (main->versionfile == 100) { - /* tex->extend and tex->imageflag have changed: */ - Tex *tex = main->tex.first; - while (tex) { - if (tex->id.flag & LIB_NEEDLINK) { - - if (tex->extend==0) { - if (tex->xrepeat || tex->yrepeat) tex->extend= TEX_REPEAT; - else { - tex->extend= TEX_EXTEND; - tex->xrepeat= tex->yrepeat= 1; - } - } - - } - tex= tex->id.next; - } - } - if (main->versionfile <= 101) { - /* frame mapping */ - Scene *sce = main->scene.first; - while (sce) { - sce->r.framapto= 100; - sce->r.images= 100; - sce->r.framelen= 1.0; - sce= sce->id.next; - } - } - if (main->versionfile <= 102) { - /* init halo's at 1.0 */ - Material *ma = main->mat.first; - while (ma) { - ma->add= 1.0; - ma= ma->id.next; - } - } - if (main->versionfile <= 103) { - /* new variable in object: colbits */ - Object *ob = main->object.first; - int a; - while (ob) { - ob->colbits= 0; - if (ob->totcol) { - for (a=0; a<ob->totcol; a++) { - if (ob->mat[a]) ob->colbits |= (1<<a); - } - } - ob= ob->id.next; - } - } - if (main->versionfile <= 104) { - /* timeoffs moved */ - Object *ob = main->object.first; - while (ob) { - if (ob->transflag & 1) { - ob->transflag -= 1; - //ob->ipoflag |= OB_OFFS_OB; - } - ob= ob->id.next; - } - } - if (main->versionfile <= 105) { - Object *ob = main->object.first; - while (ob) { - ob->dupon= 1; ob->dupoff= 0; - ob->dupsta= 1; ob->dupend= 100; - ob= ob->id.next; - } - } - if (main->versionfile <= 106) { - /* mcol changed */ - Mesh *me = main->mesh.first; - while (me) { - if (me->mcol) vcol_to_fcol(me); - me= me->id.next; - } - - } - if (main->versionfile <= 107) { - Object *ob; - Scene *sce = main->scene.first; - while (sce) { - sce->r.mode |= R_GAMMA; - sce= sce->id.next; - } - ob= main->object.first; - while (ob) { - //ob->ipoflag |= OB_OFFS_PARENT; - if (ob->dt==0) ob->dt= OB_SOLID; - ob= ob->id.next; - } - - } - if (main->versionfile <= 109) { - /* new variable: gridlines */ - bScreen *sc = main->screen.first; - while (sc) { - ScrArea *sa= sc->areabase.first; - while (sa) { - SpaceLink *sl= sa->spacedata.first; - while (sl) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D*) sl; - - if (v3d->gridlines==0) v3d->gridlines= 20; - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } - } - if (main->versionfile <= 113) { - Material *ma = main->mat.first; - while (ma) { - if (ma->flaresize==0.0f) ma->flaresize= 1.0f; - ma->subsize= 1.0f; - ma->flareboost= 1.0f; - ma= ma->id.next; - } - } - - if (main->versionfile <= 134) { - Tex *tex = main->tex.first; - while (tex) { - if ((tex->rfac == 0.0f) && - (tex->gfac == 0.0f) && - (tex->bfac == 0.0f)) { - tex->rfac = 1.0f; - tex->gfac = 1.0f; - tex->bfac = 1.0f; - tex->filtersize = 1.0f; - } - tex = tex->id.next; - } - } - if (main->versionfile <= 140) { - /* r-g-b-fac in texture */ - Tex *tex = main->tex.first; - while (tex) { - if ((tex->rfac == 0.0f) && - (tex->gfac == 0.0f) && - (tex->bfac == 0.0f)) { - tex->rfac = 1.0f; - tex->gfac = 1.0f; - tex->bfac = 1.0f; - tex->filtersize = 1.0f; - } - tex = tex->id.next; - } - } - if (main->versionfile <= 153) { - Scene *sce = main->scene.first; - while (sce) { - if (sce->r.blurfac==0.0f) sce->r.blurfac= 1.0f; - sce= sce->id.next; - } - } - if (main->versionfile <= 163) { - Scene *sce = main->scene.first; - while (sce) { - if (sce->r.frs_sec==0) sce->r.frs_sec= 25; - sce= sce->id.next; - } - } - if (main->versionfile <= 164) { - Mesh *me= main->mesh.first; - while (me) { - me->smoothresh= 30; - me= me->id.next; - } - } - if (main->versionfile <= 165) { - Mesh *me= main->mesh.first; - TFace *tface; - int nr; - char *cp; - - while (me) { - if (me->tface) { - nr= me->totface; - tface= me->tface; - while (nr--) { - cp= (char *)&tface->col[0]; - if (cp[1]>126) cp[1]= 255; else cp[1]*=2; - if (cp[2]>126) cp[2]= 255; else cp[2]*=2; - if (cp[3]>126) cp[3]= 255; else cp[3]*=2; - cp= (char *)&tface->col[1]; - if (cp[1]>126) cp[1]= 255; else cp[1]*=2; - if (cp[2]>126) cp[2]= 255; else cp[2]*=2; - if (cp[3]>126) cp[3]= 255; else cp[3]*=2; - cp= (char *)&tface->col[2]; - if (cp[1]>126) cp[1]= 255; else cp[1]*=2; - if (cp[2]>126) cp[2]= 255; else cp[2]*=2; - if (cp[3]>126) cp[3]= 255; else cp[3]*=2; - cp= (char *)&tface->col[3]; - if (cp[1]>126) cp[1]= 255; else cp[1]*=2; - if (cp[2]>126) cp[2]= 255; else cp[2]*=2; - if (cp[3]>126) cp[3]= 255; else cp[3]*=2; - - tface++; - } - } - me= me->id.next; - } - } - - if (main->versionfile <= 169) { - Mesh *me= main->mesh.first; - while (me) { - if (me->subdiv==0) me->subdiv= 1; - me= me->id.next; - } - } - - if (main->versionfile <= 169) { - bScreen *sc= main->screen.first; - while (sc) { - ScrArea *sa= sc->areabase.first; - while (sa) { - SpaceLink *sl= sa->spacedata.first; - while (sl) { - if (sl->spacetype==SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo*) sl; - sipo->v2d.max[0]= 15000.0; - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } - } - - if (main->versionfile <= 170) { - Object *ob = main->object.first; - PartEff *paf; - while (ob) { - paf = do_version_give_parteff_245(ob); - if (paf) { - if (paf->staticstep == 0) { - paf->staticstep= 5; - } - } - ob = ob->id.next; - } - } - - if (main->versionfile <= 171) { - bScreen *sc= main->screen.first; - while (sc) { - ScrArea *sa= sc->areabase.first; - while (sa) { - SpaceLink *sl= sa->spacedata.first; - while (sl) { - if (sl->spacetype==SPACE_TEXT) { - SpaceText *st= (SpaceText*) sl; - st->lheight= 12; - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } - } - - if (main->versionfile <= 173) { - int a, b; - Mesh *me= main->mesh.first; - while (me) { - if (me->tface) { - TFace *tface= me->tface; - for (a=0; a<me->totface; a++, tface++) { - for (b=0; b<4; b++) { - tface->uv[b][0]/= 32767.0f; - tface->uv[b][1]/= 32767.0f; - } - } - } - me= me->id.next; - } - } - - if (main->versionfile <= 191) { - Object *ob= main->object.first; - Material *ma = main->mat.first; - - /* let faces have default add factor of 0.0 */ - while (ma) { - if (!(ma->mode & MA_HALO)) ma->add = 0.0; - ma = ma->id.next; - } - - while (ob) { - ob->mass= 1.0f; - ob->damping= 0.1f; - /*ob->quat[1]= 1.0f;*/ /* quats arnt used yet */ - ob= ob->id.next; - } - } - - if (main->versionfile <= 193) { - Object *ob= main->object.first; - while (ob) { - ob->inertia= 1.0f; - ob->rdamping= 0.1f; - ob= ob->id.next; - } - } - - if (main->versionfile <= 196) { - Mesh *me= main->mesh.first; - int a, b; - while (me) { - if (me->tface) { - TFace *tface= me->tface; - for (a=0; a<me->totface; a++, tface++) { - for (b=0; b<4; b++) { - tface->mode |= TF_DYNAMIC; - tface->mode &= ~TF_INVISIBLE; - } - } - } - me= me->id.next; - } - } - - if (main->versionfile <= 200) { - Object *ob= main->object.first; - while (ob) { - ob->scaflag = ob->gameflag & (OB_DO_FH|OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); - /* 64 is do_fh */ - ob->gameflag &= ~(OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); - ob = ob->id.next; - } - } - - if (main->versionfile <= 201) { - /* add-object + end-object are joined to edit-object actuator */ - Object *ob = main->object.first; - bProperty *prop; - bActuator *act; - bIpoActuator *ia; - bEditObjectActuator *eoa; - bAddObjectActuator *aoa; - while (ob) { - act = ob->actuators.first; - while (act) { - if (act->type==ACT_IPO) { - ia= act->data; - prop= get_ob_property(ob, ia->name); - if (prop) { - ia->type= ACT_IPO_FROM_PROP; - } - } - else if (act->type==ACT_ADD_OBJECT) { - aoa= act->data; - eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); - eoa->type= ACT_EDOB_ADD_OBJECT; - eoa->ob= aoa->ob; - eoa->time= aoa->time; - MEM_freeN(aoa); - act->data= eoa; - act->type= act->otype= ACT_EDIT_OBJECT; - } - else if (act->type==ACT_END_OBJECT) { - eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); - eoa->type= ACT_EDOB_END_OBJECT; - act->data= eoa; - act->type= act->otype= ACT_EDIT_OBJECT; - } - act= act->next; - } - ob = ob->id.next; - } - } - - if (main->versionfile <= 202) { - /* add-object and end-object are joined to edit-object - * actuator */ - Object *ob= main->object.first; - bActuator *act; - bObjectActuator *oa; - while (ob) { - act= ob->actuators.first; - while (act) { - if (act->type==ACT_OBJECT) { - oa= act->data; - oa->flag &= ~(ACT_TORQUE_LOCAL|ACT_DROT_LOCAL); /* this actuator didn't do local/glob rot before */ - } - act= act->next; - } - ob= ob->id.next; - } - } - - if (main->versionfile <= 204) { - /* patches for new physics */ - Object *ob= main->object.first; - bActuator *act; - bObjectActuator *oa; - bSound *sound; - while (ob) { - - /* please check this for demo20 files like - * original Egypt levels etc. converted - * rotation factor of 50 is not workable */ - act= ob->actuators.first; - while (act) { - if (act->type==ACT_OBJECT) { - oa= act->data; - - oa->forceloc[0]*= 25.0f; - oa->forceloc[1]*= 25.0f; - oa->forceloc[2]*= 25.0f; - - oa->forcerot[0]*= 10.0f; - oa->forcerot[1]*= 10.0f; - oa->forcerot[2]*= 10.0f; - } - act= act->next; - } - ob= ob->id.next; - } - - sound = main->sound.first; - while (sound) { - if (sound->volume < 0.01f) { - sound->volume = 1.0f; - } - sound = sound->id.next; - } - } - - if (main->versionfile <= 205) { - /* patches for new physics */ - Object *ob= main->object.first; - bActuator *act; - bSensor *sens; - bEditObjectActuator *oa; - bRaySensor *rs; - bCollisionSensor *cs; - while (ob) { - /* Set anisotropic friction off for old objects, - * values to 1.0. */ - ob->gameflag &= ~OB_ANISOTROPIC_FRICTION; - ob->anisotropicFriction[0] = 1.0; - ob->anisotropicFriction[1] = 1.0; - ob->anisotropicFriction[2] = 1.0; - - act= ob->actuators.first; - while (act) { - if (act->type==ACT_EDIT_OBJECT) { - /* Zero initial velocity for newly - * added objects */ - oa= act->data; - oa->linVelocity[0] = 0.0; - oa->linVelocity[1] = 0.0; - oa->linVelocity[2] = 0.0; - oa->localflag = 0; - } - act= act->next; - } - - sens= ob->sensors.first; - while (sens) { - /* Extra fields for radar sensors. */ - if (sens->type == SENS_RADAR) { - bRadarSensor *s = sens->data; - s->range = 10000.0; - } - - /* Pulsing: defaults for new sensors. */ - if (sens->type != SENS_ALWAYS) { - sens->pulse = 0; - sens->freq = 0; - } - else { - sens->pulse = 1; - } - - /* Invert: off. */ - sens->invert = 0; - - /* Collision and ray: default = trigger - * on property. The material field can - * remain empty. */ - if (sens->type == SENS_COLLISION) { - cs = (bCollisionSensor*) sens->data; - cs->mode = 0; - } - if (sens->type == SENS_RAY) { - rs = (bRaySensor*) sens->data; - rs->mode = 0; - } - sens = sens->next; - } - ob= ob->id.next; - } - /* have to check the exact multiplier */ - } - - if (main->versionfile <= 211) { - /* Render setting: per scene, the applicable gamma value - * can be set. Default is 1.0, which means no - * correction. */ - bActuator *act; - bObjectActuator *oa; - Object *ob; - - /* added alpha in obcolor */ - ob= main->object.first; - while (ob) { - ob->col[3]= 1.0; - ob= ob->id.next; - } - - /* added alpha in obcolor */ - ob= main->object.first; - while (ob) { - act= ob->actuators.first; - while (act) { - if (act->type==ACT_OBJECT) { - /* multiply velocity with 50 in old files */ - oa= act->data; - if (fabsf(oa->linearvelocity[0]) >= 0.01f) - oa->linearvelocity[0] *= 50.0f; - if (fabsf(oa->linearvelocity[1]) >= 0.01f) - oa->linearvelocity[1] *= 50.0f; - if (fabsf(oa->linearvelocity[2]) >= 0.01f) - oa->linearvelocity[2] *= 50.0f; - if (fabsf(oa->angularvelocity[0])>=0.01f) - oa->angularvelocity[0] *= 50.0f; - if (fabsf(oa->angularvelocity[1])>=0.01f) - oa->angularvelocity[1] *= 50.0f; - if (fabsf(oa->angularvelocity[2])>=0.01f) - oa->angularvelocity[2] *= 50.0f; - } - act= act->next; - } - ob= ob->id.next; - } - } - - if (main->versionfile <= 212) { - - bSound* sound; - bProperty *prop; - Object *ob; - Mesh *me; - - sound = main->sound.first; - while (sound) { - sound->max_gain = 1.0; - sound->min_gain = 0.0; - sound->distance = 1.0; - - if (sound->attenuation > 0.0f) - sound->flags |= SOUND_FLAGS_3D; - else - sound->flags &= ~SOUND_FLAGS_3D; - - sound = sound->id.next; - } - - ob = main->object.first; - - while (ob) { - prop= ob->prop.first; - while (prop) { - if (prop->type == GPROP_TIME) { - // convert old GPROP_TIME values from int to float - *((float *)&prop->data) = (float) prop->data; - } - - prop= prop->next; - } - ob = ob->id.next; - } - - /* me->subdiv changed to reflect the actual reparametization - * better, and smeshes were removed - if it was a smesh make - * it a subsurf, and reset the subdiv level because subsurf - * takes a lot more work to calculate. - */ - for (me= main->mesh.first; me; me= me->id.next) { - if (me->flag&ME_SMESH) { - me->flag&= ~ME_SMESH; - me->flag|= ME_SUBSURF; - - me->subdiv= 1; - } - else { - if (me->subdiv<2) - me->subdiv= 1; - else - me->subdiv--; - } - } - } - - if (main->versionfile <= 220) { - Object *ob; - Mesh *me; - - ob = main->object.first; - - /* adapt form factor in order to get the 'old' physics - * behavior back...*/ - - while (ob) { - /* in future, distinguish between different - * object bounding shapes */ - ob->formfactor = 0.4f; - /* patch form factor , note that inertia equiv radius - * of a rotation symmetrical obj */ - if (ob->inertia != 1.0f) { - ob->formfactor /= ob->inertia * ob->inertia; - } - ob = ob->id.next; - } - - /* Began using alpha component of vertex colors, but - * old file vertex colors are undefined, reset them - * to be fully opaque. -zr - */ - for (me= main->mesh.first; me; me= me->id.next) { - if (me->mcol) { - int i; - - for (i=0; i<me->totface*4; i++) { - MCol *mcol= &me->mcol[i]; - mcol->a= 255; - } - } - if (me->tface) { - int i, j; - - for (i=0; i<me->totface; i++) { - TFace *tf= &((TFace*) me->tface)[i]; - - for (j=0; j<4; j++) { - char *col= (char*) &tf->col[j]; - - col[0]= 255; - } - } - } - } - } - if (main->versionfile <= 221) { - Scene *sce= main->scene.first; - - // new variables for std-alone player and runtime - while (sce) { - - sce->r.xplay= 640; - sce->r.yplay= 480; - sce->r.freqplay= 60; - - sce= sce->id.next; - } - - } - if (main->versionfile <= 222) { - Scene *sce= main->scene.first; - - // new variables for std-alone player and runtime - while (sce) { - - sce->r.depth= 32; - - sce= sce->id.next; - } - } - - - if (main->versionfile <= 223) { - VFont *vf; - Image *ima; - Object *ob; - - for (vf= main->vfont.first; vf; vf= vf->id.next) { - if (strcmp(vf->name+strlen(vf->name)-6, ".Bfont")==0) { - strcpy(vf->name, FO_BUILTIN_NAME); - } - } - - /* Old textures animate at 25 FPS */ - for (ima = main->image.first; ima; ima=ima->id.next) { - ima->animspeed = 25; - } - - /* Zr remapped some keyboard codes to be linear (stupid zr) */ - for (ob= main->object.first; ob; ob= ob->id.next) { - bSensor *sens; - - for (sens= ob->sensors.first; sens; sens= sens->next) { - if (sens->type==SENS_KEYBOARD) { - bKeyboardSensor *ks= sens->data; - - ks->key= map_223_keybd_code_to_224_keybd_code(ks->key); - ks->qual= map_223_keybd_code_to_224_keybd_code(ks->qual); - ks->qual2= map_223_keybd_code_to_224_keybd_code(ks->qual2); - } - } - } - } - if (main->versionfile <= 224) { - bSound* sound; - Scene *sce; - Mesh *me; - bScreen *sc; - - for (sound=main->sound.first; sound; sound=sound->id.next) { - if (sound->packedfile) { - if (sound->newpackedfile == NULL) { - sound->newpackedfile = sound->packedfile; - } - sound->packedfile = NULL; - } - } - /* Make sure that old subsurf meshes don't have zero subdivision level for rendering */ - for (me=main->mesh.first; me; me=me->id.next) { - if ((me->flag & ME_SUBSURF) && (me->subdivr==0)) - me->subdivr=me->subdiv; - } - - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->r.stereomode = 1; // no stereo - } - - /* some oldfile patch, moved from set_func_space */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IPO) { - SpaceSeq *sseq= (SpaceSeq*) sl; - sseq->v2d.keeptot= 0; - } - } - } - } - - } - - - if (main->versionfile <= 225) { - World *wo; - /* Use Sumo for old games */ - for (wo = main->world.first; wo; wo= wo->id.next) { - wo->physicsEngine = 2; - } - } - - if (main->versionfile <= 227) { - Scene *sce; - Material *ma; - bScreen *sc; - Object *ob; - - /* As of now, this insures that the transition from the old Track system - * to the new full constraint Track is painless for everyone. - theeth - */ - ob = main->object.first; - - while (ob) { - ListBase *list; - list = &ob->constraints; - - /* check for already existing TrackTo constraint - * set their track and up flag correctly */ - - if (list) { - bConstraint *curcon; - for (curcon = list->first; curcon; curcon=curcon->next) { - if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { - bTrackToConstraint *data = curcon->data; - data->reserved1 = ob->trackflag; - data->reserved2 = ob->upflag; - } - } - } - - if (ob->type == OB_ARMATURE) { - if (ob->pose) { - bConstraint *curcon; - bPoseChannel *pchan; - for (pchan = ob->pose->chanbase.first; - pchan; pchan=pchan->next) { - for (curcon = pchan->constraints.first; - curcon; curcon=curcon->next) { - if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { - bTrackToConstraint *data = curcon->data; - data->reserved1 = ob->trackflag; - data->reserved2 = ob->upflag; - } - } - } - } - } - - /* Change Ob->Track in real TrackTo constraint */ - do_version_old_trackto_to_constraints(ob); - - ob = ob->id.next; - } - - - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->audio.mixrate = 44100; - sce->audio.flag |= AUDIO_SCRUB; - sce->r.mode |= R_ENVMAP; - } - // init new shader vars - for (ma= main->mat.first; ma; ma= ma->id.next) { - ma->refrac= 4.0f; - ma->roughness= 0.5f; - ma->param[0]= 0.5f; - ma->param[1]= 0.1f; - ma->param[2]= 0.1f; - ma->param[3]= 0.05f; - } - // patch for old wrong max view2d settings, allows zooming out more - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_ACTION) { - SpaceAction *sac= (SpaceAction *) sl; - sac->v2d.max[0]= 32000; - } - else if (sl->spacetype==SPACE_NLA) { - SpaceNla *sla= (SpaceNla *) sl; - sla->v2d.max[0]= 32000; - } - } - } - } - } - if (main->versionfile <= 228) { - Scene *sce; - bScreen *sc; - Object *ob; - - - /* As of now, this insures that the transition from the old Track system - * to the new full constraint Track is painless for everyone.*/ - ob = main->object.first; - - while (ob) { - ListBase *list; - list = &ob->constraints; - - /* check for already existing TrackTo constraint - * set their track and up flag correctly */ - - if (list) { - bConstraint *curcon; - for (curcon = list->first; curcon; curcon=curcon->next) { - if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { - bTrackToConstraint *data = curcon->data; - data->reserved1 = ob->trackflag; - data->reserved2 = ob->upflag; - } - } - } - - if (ob->type == OB_ARMATURE) { - if (ob->pose) { - bConstraint *curcon; - bPoseChannel *pchan; - for (pchan = ob->pose->chanbase.first; - pchan; pchan=pchan->next) { - for (curcon = pchan->constraints.first; - curcon; curcon=curcon->next) { - if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { - bTrackToConstraint *data = curcon->data; - data->reserved1 = ob->trackflag; - data->reserved2 = ob->upflag; - } - } - } - } - } - - ob = ob->id.next; - } - - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->r.mode |= R_ENVMAP; - } - - // convert old mainb values for new button panels - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_BUTS) { - SpaceButs *sbuts= (SpaceButs *) sl; - - sbuts->v2d.maxzoom= 1.2f; - sbuts->align= 1; /* horizontal default */ - - if (sbuts->mainb==BUTS_LAMP) { - sbuts->mainb= CONTEXT_SHADING; - //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_LAMP; - } - else if (sbuts->mainb==BUTS_MAT) { - sbuts->mainb= CONTEXT_SHADING; - //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT; - } - else if (sbuts->mainb==BUTS_TEX) { - sbuts->mainb= CONTEXT_SHADING; - //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX; - } - else if (sbuts->mainb==BUTS_ANIM) { - sbuts->mainb= CONTEXT_OBJECT; - } - else if (sbuts->mainb==BUTS_WORLD) { - sbuts->mainb= CONTEXT_SCENE; - //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_WORLD; - } - else if (sbuts->mainb==BUTS_RENDER) { - sbuts->mainb= CONTEXT_SCENE; - //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_RENDER; - } - else if (sbuts->mainb==BUTS_GAME) { - sbuts->mainb= CONTEXT_LOGIC; - } - else if (sbuts->mainb==BUTS_FPAINT) { - sbuts->mainb= CONTEXT_EDITING; - } - else if (sbuts->mainb==BUTS_RADIO) { - sbuts->mainb= CONTEXT_SHADING; - //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_RAD; - } - else if (sbuts->mainb==BUTS_CONSTRAINT) { - sbuts->mainb= CONTEXT_OBJECT; - } - else if (sbuts->mainb==BUTS_SCRIPT) { - sbuts->mainb= CONTEXT_OBJECT; - } - else if (sbuts->mainb==BUTS_EDIT) { - sbuts->mainb= CONTEXT_EDITING; - } - else sbuts->mainb= CONTEXT_SCENE; - } - } - } - } - } - /* ton: made this 230 instead of 229, - * to be sure (tuho files) and this is a reliable check anyway - * nevertheless, we might need to think over a fitness (initialize) - * check apart from the do_versions() */ - - if (main->versionfile <= 230) { - bScreen *sc; - - // new variable blockscale, for panels in any area - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->blockscale==0.0f) sl->blockscale= 0.7f; - /* added: 5x better zoom in for action */ - if (sl->spacetype==SPACE_ACTION) { - SpaceAction *sac= (SpaceAction *)sl; - sac->v2d.maxzoom= 50; - } - } - } - } - } - if (main->versionfile <= 231) { - /* new bit flags for showing/hiding grid floor and axes */ - bScreen *sc = main->screen.first; - while (sc) { - ScrArea *sa= sc->areabase.first; - while (sa) { - SpaceLink *sl= sa->spacedata.first; - while (sl) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D*) sl; - - if (v3d->gridflag==0) { - v3d->gridflag |= V3D_SHOW_X; - v3d->gridflag |= V3D_SHOW_Y; - v3d->gridflag |= V3D_SHOW_FLOOR; - v3d->gridflag &= ~V3D_SHOW_Z; - } - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } - } - if (main->versionfile <= 231) { - Material *ma= main->mat.first; - bScreen *sc = main->screen.first; - Scene *sce; - Lamp *la; - World *wrld; - - /* introduction of raytrace */ - while (ma) { - if (ma->fresnel_tra_i==0.0f) ma->fresnel_tra_i= 1.25f; - if (ma->fresnel_mir_i==0.0f) ma->fresnel_mir_i= 1.25f; - - ma->ang= 1.0; - ma->ray_depth= 2; - ma->ray_depth_tra= 2; - ma->fresnel_tra= 0.0; - ma->fresnel_mir= 0.0; - - ma= ma->id.next; - } - sce= main->scene.first; - while (sce) { - if (sce->r.gauss==0.0f) sce->r.gauss= 1.0f; - sce= sce->id.next; - } - la= main->lamp.first; - while (la) { - if (la->k==0.0f) la->k= 1.0; - if (la->ray_samp==0) la->ray_samp= 1; - if (la->ray_sampy==0) la->ray_sampy= 1; - if (la->ray_sampz==0) la->ray_sampz= 1; - if (la->area_size==0.0f) la->area_size= 1.0f; - if (la->area_sizey==0.0f) la->area_sizey= 1.0f; - if (la->area_sizez==0.0f) la->area_sizez= 1.0f; - la= la->id.next; - } - wrld= main->world.first; - while (wrld) { - if (wrld->range==0.0f) { - wrld->range= 1.0f/wrld->exposure; - } - wrld= wrld->id.next; - } - - /* new bit flags for showing/hiding grid floor and axes */ - - while (sc) { - ScrArea *sa= sc->areabase.first; - while (sa) { - SpaceLink *sl= sa->spacedata.first; - while (sl) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D*) sl; - - if (v3d->gridflag==0) { - v3d->gridflag |= V3D_SHOW_X; - v3d->gridflag |= V3D_SHOW_Y; - v3d->gridflag |= V3D_SHOW_FLOOR; - v3d->gridflag &= ~V3D_SHOW_Z; - } - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } - } - if (main->versionfile <= 232) { - Tex *tex= main->tex.first; - World *wrld= main->world.first; - bScreen *sc; - Scene *sce; - - while (tex) { - if ((tex->flag & (TEX_CHECKER_ODD+TEX_CHECKER_EVEN))==0) { - tex->flag |= TEX_CHECKER_ODD; - } - /* copied from kernel texture.c */ - if (tex->ns_outscale==0.0f) { - /* musgrave */ - tex->mg_H = 1.0f; - tex->mg_lacunarity = 2.0f; - tex->mg_octaves = 2.0f; - tex->mg_offset = 1.0f; - tex->mg_gain = 1.0f; - tex->ns_outscale = 1.0f; - /* distnoise */ - tex->dist_amount = 1.0f; - /* voronoi */ - tex->vn_w1 = 1.0f; - tex->vn_mexp = 2.5f; - } - tex= tex->id.next; - } - - while (wrld) { - if (wrld->aodist==0.0f) { - wrld->aodist= 10.0f; - wrld->aobias= 0.05f; - } - if (wrld->aosamp==0) wrld->aosamp= 5; - if (wrld->aoenergy==0.0f) wrld->aoenergy= 1.0f; - wrld= wrld->id.next; - } - - - // new variable blockscale, for panels in any area, do again because new - // areas didnt initialize it to 0.7 yet - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->blockscale==0.0f) sl->blockscale= 0.7f; - - /* added: 5x better zoom in for nla */ - if (sl->spacetype==SPACE_NLA) { - SpaceNla *snla= (SpaceNla *)sl; - snla->v2d.maxzoom= 50; - } - } - } - } - sce= main->scene.first; - while (sce) { - if (sce->r.ocres==0) sce->r.ocres= 64; - sce= sce->id.next; - } - - } - if (main->versionfile <= 233) { - bScreen *sc; - Material *ma= main->mat.first; - /* Object *ob= main->object.first; */ - - while (ma) { - if (ma->rampfac_col==0.0f) ma->rampfac_col= 1.0; - if (ma->rampfac_spec==0.0f) ma->rampfac_spec= 1.0; - if (ma->pr_lamp==0) ma->pr_lamp= 3; - ma= ma->id.next; - } - - /* this should have been done loooong before! */ -#if 0 /* deprecated in 2.5+ */ - while (ob) { - if (ob->ipowin==0) ob->ipowin= ID_OB; - ob= ob->id.next; - } -#endif - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D *)sl; - v3d->flag |= V3D_SELECT_OUTLINE; - } - } - } - } - } - - - - - if (main->versionfile <= 234) { - World *wo; - bScreen *sc; - - // force sumo engine to be active - for (wo = main->world.first; wo; wo= wo->id.next) { - if (wo->physicsEngine==0) wo->physicsEngine = 2; - } - - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D *)sl; - v3d->flag |= V3D_ZBUF_SELECT; - } - else if (sl->spacetype==SPACE_TEXT) { - SpaceText *st= (SpaceText *)sl; - if (st->tabnumber==0) st->tabnumber= 2; - } - } - } - } - } - if (main->versionfile <= 235) { - Tex *tex= main->tex.first; - Scene *sce= main->scene.first; - Sequence *seq; - Editing *ed; - - while (tex) { - if (tex->nabla==0.0f) tex->nabla= 0.025f; - tex= tex->id.next; - } - while (sce) { - ed= sce->ed; - if (ed) { - SEQ_BEGIN (sce->ed, seq) { - if (seq->type==SEQ_IMAGE || seq->type==SEQ_MOVIE) - seq->flag |= SEQ_MAKE_PREMUL; - } - SEQ_END - } - - sce= sce->id.next; - } - } - if (main->versionfile <= 236) { - Object *ob; - Camera *cam= main->camera.first; - Material *ma; - bScreen *sc; - - while (cam) { - if (cam->ortho_scale==0.0f) { - cam->ortho_scale= 256.0f/cam->lens; - if (cam->type==CAM_ORTHO) printf("NOTE: ortho render has changed, tweak new Camera 'scale' value.\n"); - } - cam= cam->id.next; - } - /* set manipulator type */ - /* force oops draw if depgraph was set*/ - /* set time line var */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D *)sl; - if (v3d->twtype==0) v3d->twtype= V3D_MANIP_TRANSLATE; - } - } - } - } - // init new shader vars - for (ma= main->mat.first; ma; ma= ma->id.next) { - if (ma->darkness==0.0f) { - ma->rms=0.1f; - ma->darkness=1.0f; - } - } - - /* softbody init new vars */ - for (ob= main->object.first; ob; ob= ob->id.next) { - if (ob->soft) { - if (ob->soft->defgoal==0.0f) ob->soft->defgoal= 0.7f; - if (ob->soft->physics_speed==0.0f) ob->soft->physics_speed= 1.0f; - - if (ob->soft->interval==0) { - ob->soft->interval= 2; - ob->soft->sfra= 1; - ob->soft->efra= 100; - } - } - if (ob->soft && ob->soft->vertgroup==0) { - bDeformGroup *locGroup = defgroup_find_name(ob, "SOFTGOAL"); - if (locGroup) { - /* retrieve index for that group */ - ob->soft->vertgroup = 1 + BLI_findindex(&ob->defbase, locGroup); - } - } - } - } - if (main->versionfile <= 237) { - bArmature *arm; - bConstraint *con; - Object *ob; - Bone *bone; - - // armature recode checks - for (arm= main->armature.first; arm; arm= arm->id.next) { - where_is_armature(arm); - - for (bone= arm->bonebase.first; bone; bone= bone->next) - do_version_bone_head_tail_237(bone); - } - for (ob= main->object.first; ob; ob= ob->id.next) { - if (ob->parent) { - Object *parent= newlibadr(fd, lib, ob->parent); - if (parent && parent->type==OB_LATTICE) - ob->partype = PARSKEL; - } - - // btw. armature_rebuild_pose is further only called on leave editmode - if (ob->type==OB_ARMATURE) { - if (ob->pose) - ob->pose->flag |= POSE_RECALC; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; // cannot call stuff now (pointers!), done in setup_app_data - - /* new generic xray option */ - arm= newlibadr(fd, lib, ob->data); - if (arm->flag & ARM_DRAWXRAY) { - ob->dtx |= OB_DRAWXRAY; - } - } - else if (ob->type==OB_MESH) { - Mesh *me = newlibadr(fd, lib, ob->data); - - if ((me->flag&ME_SUBSURF)) { - SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf); - - smd->levels = MAX2(1, me->subdiv); - smd->renderLevels = MAX2(1, me->subdivr); - smd->subdivType = me->subsurftype; - - smd->modifier.mode = 0; - if (me->subdiv!=0) - smd->modifier.mode |= 1; - if (me->subdivr!=0) - smd->modifier.mode |= 2; - if (me->flag&ME_OPT_EDGES) - smd->flags |= eSubsurfModifierFlag_ControlEdges; - - BLI_addtail(&ob->modifiers, smd); - - modifier_unique_name(&ob->modifiers, (ModifierData*)smd); - } - } - - // follow path constraint needs to set the 'path' option in curves... - for (con=ob->constraints.first; con; con= con->next) { - if (con->type==CONSTRAINT_TYPE_FOLLOWPATH) { - bFollowPathConstraint *data = con->data; - Object *obc= newlibadr(fd, lib, data->tar); - - if (obc && obc->type==OB_CURVE) { - Curve *cu= newlibadr(fd, lib, obc->data); - if (cu) cu->flag |= CU_PATH; - } - } - } - } - } - if (main->versionfile <= 238) { - Lattice *lt; - Object *ob; - bArmature *arm; - Mesh *me; - Key *key; - Scene *sce= main->scene.first; - - while (sce) { - if (sce->toolsettings == NULL) { - sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings),"Tool Settings Struct"); - sce->toolsettings->cornertype=0; - sce->toolsettings->degr = 90; - sce->toolsettings->step = 9; - sce->toolsettings->turn = 1; - sce->toolsettings->extr_offs = 1; - sce->toolsettings->doublimit = 0.001f; - sce->toolsettings->segments = 32; - sce->toolsettings->rings = 32; - sce->toolsettings->vertices = 32; - } - sce= sce->id.next; - } - - for (lt=main->latt.first; lt; lt=lt->id.next) { - if (lt->fu==0.0f && lt->fv==0.0f && lt->fw==0.0f) { - calc_lat_fudu(lt->flag, lt->pntsu, <->fu, <->du); - calc_lat_fudu(lt->flag, lt->pntsv, <->fv, <->dv); - calc_lat_fudu(lt->flag, lt->pntsw, <->fw, <->dw); - } - } - - for (ob=main->object.first; ob; ob= ob->id.next) { - ModifierData *md; - PartEff *paf; - - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Subsurf) { - SubsurfModifierData *smd = (SubsurfModifierData*) md; - - smd->flags &= ~(eSubsurfModifierFlag_Incremental|eSubsurfModifierFlag_DebugIncr); - } - } - - if ((ob->softflag&OB_SB_ENABLE) && !modifiers_findByType(ob, eModifierType_Softbody)) { - if (ob->softflag&OB_SB_POSTDEF) { - md = ob->modifiers.first; - - while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) { - md = md->next; - } - - BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(eModifierType_Softbody)); - } - else { - BLI_addhead(&ob->modifiers, modifier_new(eModifierType_Softbody)); - } - - ob->softflag &= ~OB_SB_ENABLE; - } - if (ob->pose) { - bPoseChannel *pchan; - bConstraint *con; - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - // note, pchan->bone is also lib-link stuff - if (pchan->limitmin[0] == 0.0f && pchan->limitmax[0] == 0.0f) { - pchan->limitmin[0]= pchan->limitmin[1]= pchan->limitmin[2]= -180.0f; - pchan->limitmax[0]= pchan->limitmax[1]= pchan->limitmax[2]= 180.0f; - - for (con= pchan->constraints.first; con; con= con->next) { - if (con->type == CONSTRAINT_TYPE_KINEMATIC) { - bKinematicConstraint *data = (bKinematicConstraint*)con->data; - data->weight = 1.0f; - data->orientweight = 1.0f; - data->flag &= ~CONSTRAINT_IK_ROT; - - /* enforce conversion from old IK_TOPARENT to rootbone index */ - data->rootbone= -1; - - /* update_pose_etc handles rootbone==-1 */ - ob->pose->flag |= POSE_RECALC; - } - } - } - } - } - - paf = do_version_give_parteff_245(ob); - if (paf) { - if (paf->disp == 0) - paf->disp = 100; - if (paf->speedtex == 0) - paf->speedtex = 8; - if (paf->omat == 0) - paf->omat = 1; - } - } - - for (arm=main->armature.first; arm; arm= arm->id.next) { - bone_version_238(&arm->bonebase); - arm->deformflag |= ARM_DEF_VGROUP; - } - - for (me=main->mesh.first; me; me= me->id.next) { - if (!me->medge) { - make_edges(me, 1); /* 1 = use mface->edcode */ - } - else { - mesh_strip_loose_faces(me); - } - } - - for (key= main->key.first; key; key= key->id.next) { - KeyBlock *kb; - int index = 1; - - for (kb= key->block.first; kb; kb= kb->next) { - if (kb==key->refkey) { - if (kb->name[0]==0) - strcpy(kb->name, "Basis"); - } - else { - if (kb->name[0]==0) { - BLI_snprintf(kb->name, sizeof(kb->name), "Key %d", index); - } - index++; - } - } - } - } - if (main->versionfile <= 239) { - bArmature *arm; - Object *ob; - Scene *sce= main->scene.first; - Camera *cam= main->camera.first; - Material *ma= main->mat.first; - int set_passepartout= 0; - - /* deformflag is local in modifier now */ - for (ob=main->object.first; ob; ob= ob->id.next) { - ModifierData *md; - - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Armature) { - ArmatureModifierData *amd = (ArmatureModifierData*) md; - if (amd->object && amd->deformflag==0) { - Object *oba= newlibadr(fd, lib, amd->object); - arm= newlibadr(fd, lib, oba->data); - amd->deformflag= arm->deformflag; - } - } - } - } - - /* updating stepsize for ghost drawing */ - for (arm= main->armature.first; arm; arm= arm->id.next) { - if (arm->ghostsize==0) arm->ghostsize=1; - bone_version_239(&arm->bonebase); - if (arm->layer==0) arm->layer= 1; - } - - for (;sce;sce= sce->id.next) { - /* make 'innervert' the default subdivide type, for backwards compat */ - sce->toolsettings->cornertype=1; - - if (sce->r.scemode & R_PASSEPARTOUT) { - set_passepartout= 1; - sce->r.scemode &= ~R_PASSEPARTOUT; - } - /* gauss is filter variable now */ - if (sce->r.mode & R_GAUSS) { - sce->r.filtertype= R_FILTER_GAUSS; - sce->r.mode &= ~R_GAUSS; - } - } - - for (;cam; cam= cam->id.next) { - if (set_passepartout) - cam->flag |= CAM_SHOWPASSEPARTOUT; - - /* make sure old cameras have title safe on */ - if (!(cam->flag & CAM_SHOWTITLESAFE)) - cam->flag |= CAM_SHOWTITLESAFE; - - /* set an appropriate camera passepartout alpha */ - if (!(cam->passepartalpha)) cam->passepartalpha = 0.2f; - } - - for (; ma; ma= ma->id.next) { - if (ma->strand_sta==0.0f) { - ma->strand_sta= ma->strand_end= 1.0f; - ma->mode |= MA_TANGENT_STR; - } - if (ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF; - } - } - - if (main->versionfile <= 241) { - Object *ob; - Tex *tex; - Scene *sce; - World *wo; - Lamp *la; - Material *ma; - bArmature *arm; - bNodeTree *ntree; - - for (wo = main->world.first; wo; wo= wo->id.next) { - /* Migrate to Bullet for games, except for the NaN versions */ - /* People can still explicitly choose for Sumo (after 2.42 is out) */ - if (main->versionfile > 225) - wo->physicsEngine = WOPHY_BULLET; - if (WO_AODIST == wo->aomode) - wo->aocolor= WO_AOPLAIN; - } - - /* updating layers still */ - for (arm= main->armature.first; arm; arm= arm->id.next) { - bone_version_239(&arm->bonebase); - if (arm->layer==0) arm->layer= 1; - } - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->audio.mixrate==0) sce->audio.mixrate= 44100; - - if (sce->r.xparts<2) sce->r.xparts= 4; - if (sce->r.yparts<2) sce->r.yparts= 4; - /* adds default layer */ - if (sce->r.layers.first==NULL) - scene_add_render_layer(sce, NULL); - else { - SceneRenderLayer *srl; - /* new layer flag for sky, was default for solid */ - for (srl= sce->r.layers.first; srl; srl= srl->next) { - if (srl->layflag & SCE_LAY_SOLID) - srl->layflag |= SCE_LAY_SKY; - srl->passflag &= (SCE_PASS_COMBINED|SCE_PASS_Z|SCE_PASS_NORMAL|SCE_PASS_VECTOR); - } - } - - /* node version changes */ - if (sce->nodetree) - ntree_version_241(sce->nodetree); - - /* uv calculation options moved to toolsettings */ - if (sce->toolsettings->uvcalc_radius == 0.0f) { - sce->toolsettings->uvcalc_radius = 1.0f; - sce->toolsettings->uvcalc_cubesize = 1.0f; - sce->toolsettings->uvcalc_mapdir = 1; - sce->toolsettings->uvcalc_mapalign = 1; - sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES; - sce->toolsettings->unwrapper = 1; - } - - if (sce->r.mode & R_PANORAMA) { - /* all these checks to ensure saved files with svn version keep working... */ - if (sce->r.xsch < sce->r.ysch) { - Object *obc= newlibadr(fd, lib, sce->camera); - if (obc && obc->type==OB_CAMERA) { - Camera *cam= newlibadr(fd, lib, obc->data); - if (cam->lens>=10.0f) { - sce->r.xsch*= sce->r.xparts; - cam->lens*= (float)sce->r.ysch/(float)sce->r.xsch; - } - } - } - } - } - - for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) - ntree_version_241(ntree); - - for (la= main->lamp.first; la; la= la->id.next) - if (la->buffers==0) - la->buffers= 1; - - for (tex= main->tex.first; tex; tex= tex->id.next) { - if (tex->env && tex->env->viewscale==0.0f) - tex->env->viewscale= 1.0f; -// tex->imaflag |= TEX_GAUSS_MIP; - } - - /* for empty drawsize and drawtype */ - for (ob=main->object.first; ob; ob= ob->id.next) { - if (ob->empty_drawsize==0.0f) { - ob->empty_drawtype = OB_ARROWS; - ob->empty_drawsize = 1.0; - } - } - - for (ma= main->mat.first; ma; ma= ma->id.next) { - /* stucci returns intensity from now on */ - int a; - for (a=0; a<MAX_MTEX; a++) { - if (ma->mtex[a] && ma->mtex[a]->tex) { - tex= newlibadr(fd, lib, ma->mtex[a]->tex); - if (tex && tex->type==TEX_STUCCI) - ma->mtex[a]->mapto &= ~(MAP_COL|MAP_SPEC|MAP_REF); - } - } - /* transmissivity defaults */ - if (ma->tx_falloff==0.0f) ma->tx_falloff= 1.0f; - } - - /* during 2.41 images with this name were used for viewer node output, lets fix that */ - if (main->versionfile == 241) { - Image *ima; - for (ima= main->image.first; ima; ima= ima->id.next) - if (strcmp(ima->name, "Compositor")==0) { - strcpy(ima->id.name+2, "Viewer Node"); - strcpy(ima->name, "Viewer Node"); - } - } - } - - if (main->versionfile <= 242) { - Scene *sce; - bScreen *sc; - Object *ob; - Curve *cu; - Material *ma; - Mesh *me; - Group *group; - Nurb *nu; - BezTriple *bezt; - BPoint *bp; - bNodeTree *ntree; - int a; - - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - sa= sc->areabase.first; - while (sa) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D*) sl; - if (v3d->gridsubdiv == 0) - v3d->gridsubdiv = 10; - } - } - sa = sa->next; - } - } - - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->toolsettings->select_thresh == 0.0f) - sce->toolsettings->select_thresh= 0.01f; - if (sce->toolsettings->clean_thresh == 0.0f) - sce->toolsettings->clean_thresh = 0.1f; - - if (sce->r.threads==0) { - if (sce->r.mode & R_THREADS) - sce->r.threads= 2; - else - sce->r.threads= 1; - } - if (sce->nodetree) - ntree_version_242(sce->nodetree); - } - - for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) - ntree_version_242(ntree); - - /* add default radius values to old curve points */ - for (cu= main->curve.first; cu; cu= cu->id.next) { - for (nu= cu->nurb.first; nu; nu= nu->next) { - if (nu) { - if (nu->bezt) { - for (bezt=nu->bezt, a=0; a<nu->pntsu; a++, bezt++) { - if (!bezt->radius) bezt->radius= 1.0; - } - } - else if (nu->bp) { - for (bp=nu->bp, a=0; a<nu->pntsu*nu->pntsv; a++, bp++) { - if (!bp->radius) bp->radius= 1.0; - } - } - } - } - } - - for (ob = main->object.first; ob; ob= ob->id.next) { - ModifierData *md; - ListBase *list; - list = &ob->constraints; - - /* check for already existing MinMax (floor) constraint - * and update the sticky flagging */ - - if (list) { - bConstraint *curcon; - for (curcon = list->first; curcon; curcon=curcon->next) { - switch (curcon->type) { - case CONSTRAINT_TYPE_MINMAX: - { - bMinMaxConstraint *data = curcon->data; - if (data->sticky==1) - data->flag |= MINMAX_STICKY; - else - data->flag &= ~MINMAX_STICKY; - } - break; - case CONSTRAINT_TYPE_ROTLIKE: - { - bRotateLikeConstraint *data = curcon->data; - - /* version patch from buttons_object.c */ - if (data->flag==0) - data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; - } - break; - } - } - } - - if (ob->type == OB_ARMATURE) { - if (ob->pose) { - bConstraint *curcon; - bPoseChannel *pchan; - for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { - for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { - switch (curcon->type) { - case CONSTRAINT_TYPE_MINMAX: - { - bMinMaxConstraint *data = curcon->data; - if (data->sticky==1) - data->flag |= MINMAX_STICKY; - else - data->flag &= ~MINMAX_STICKY; - } - break; - case CONSTRAINT_TYPE_KINEMATIC: - { - bKinematicConstraint *data = curcon->data; - if (!(data->flag & CONSTRAINT_IK_POS)) { - data->flag |= CONSTRAINT_IK_POS; - data->flag |= CONSTRAINT_IK_STRETCH; - } - } - break; - case CONSTRAINT_TYPE_ROTLIKE: - { - bRotateLikeConstraint *data = curcon->data; - - /* version patch from buttons_object.c */ - if (data->flag==0) - data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; - } - break; - } - } - } - } - } - - /* copy old object level track settings to curve modifers */ - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Curve) { - CurveModifierData *cmd = (CurveModifierData*) md; - - if (cmd->defaxis == 0) cmd->defaxis = ob->trackflag+1; - } - } - - } - - for (ma = main->mat.first; ma; ma= ma->id.next) { - if (ma->shad_alpha==0.0f) - ma->shad_alpha= 1.0f; - if (ma->nodetree) - ntree_version_242(ma->nodetree); - } - - for (me=main->mesh.first; me; me=me->id.next) - customdata_version_242(me); - - for (group= main->group.first; group; group= group->id.next) - if (group->layer==0) - group->layer= (1<<20)-1; - - /* now, subversion control! */ - if (main->subversionfile < 3) { - Image *ima; - Tex *tex; - - /* Image refactor initialize */ - for (ima= main->image.first; ima; ima= ima->id.next) { - ima->source= IMA_SRC_FILE; - ima->type= IMA_TYPE_IMAGE; - - ima->gen_x= 256; ima->gen_y= 256; - ima->gen_type= 1; - - if (0==strncmp(ima->id.name+2, "Viewer Node", sizeof(ima->id.name)-2)) { - ima->source= IMA_SRC_VIEWER; - ima->type= IMA_TYPE_COMPOSITE; - } - if (0==strncmp(ima->id.name+2, "Render Result", sizeof(ima->id.name)-2)) { - ima->source= IMA_SRC_VIEWER; - ima->type= IMA_TYPE_R_RESULT; - } - - } - for (tex= main->tex.first; tex; tex= tex->id.next) { - if (tex->type==TEX_IMAGE && tex->ima) { - ima= newlibadr(fd, lib, tex->ima); - if (tex->imaflag & TEX_ANIM5_) - ima->source= IMA_SRC_MOVIE; - if (tex->imaflag & TEX_FIELDS_) - ima->flag |= IMA_FIELDS; - if (tex->imaflag & TEX_STD_FIELD_) - ima->flag |= IMA_STD_FIELD; - } - tex->iuser.frames= tex->frames; - tex->iuser.fie_ima= (char)tex->fie_ima; - tex->iuser.offset= tex->offset; - tex->iuser.sfra= tex->sfra; - tex->iuser.cycl= (tex->imaflag & TEX_ANIMCYCLIC_)!=0; - } - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->nodetree) - do_version_ntree_242_2(sce->nodetree); - } - for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) - do_version_ntree_242_2(ntree); - for (ma = main->mat.first; ma; ma= ma->id.next) - if (ma->nodetree) - do_version_ntree_242_2(ma->nodetree); - - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IMAGE) - ((SpaceImage *)sl)->iuser.fie_ima= 2; - else if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d= (View3D *)sl; - BGpic *bgpic; - for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) - bgpic->iuser.fie_ima= 2; - } - } - } - } - } - - if (main->subversionfile < 4) { - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->r.bake_mode= 1; /* prevent to include render stuff here */ - sce->r.bake_filter= 2; - sce->r.bake_osa= 5; - sce->r.bake_flag= R_BAKE_CLEAR; - } - } - - if (main->subversionfile < 5) { - for (sce= main->scene.first; sce; sce= sce->id.next) { - /* improved triangle to quad conversion settings */ - if (sce->toolsettings->jointrilimit==0.0f) - sce->toolsettings->jointrilimit= 0.8f; - } - } - } - if (main->versionfile <= 243) { - Object *ob= main->object.first; - Material *ma; - - for (ma=main->mat.first; ma; ma= ma->id.next) { - if (ma->sss_scale==0.0f) { - ma->sss_radius[0]= 1.0f; - ma->sss_radius[1]= 1.0f; - ma->sss_radius[2]= 1.0f; - ma->sss_col[0]= 0.8f; - ma->sss_col[1]= 0.8f; - ma->sss_col[2]= 0.8f; - ma->sss_error= 0.05f; - ma->sss_scale= 0.1f; - ma->sss_ior= 1.3f; - ma->sss_colfac= 1.0f; - ma->sss_texfac= 0.0f; - } - if (ma->sss_front==0 && ma->sss_back==0) { - ma->sss_front= 1.0f; - ma->sss_back= 1.0f; - } - if (ma->sss_col[0]==0 && ma->sss_col[1]==0 && ma->sss_col[2]==0) { - ma->sss_col[0]= ma->r; - ma->sss_col[1]= ma->g; - ma->sss_col[2]= ma->b; - } - } - - for (; ob; ob= ob->id.next) { - bDeformGroup *curdef; - - for (curdef= ob->defbase.first; curdef; curdef=curdef->next) { - /* replace an empty-string name with unique name */ - if (curdef->name[0] == '\0') { - defgroup_unique_name(curdef, ob); - } - } - - if (main->versionfile < 243 || main->subversionfile < 1) { - ModifierData *md; - - /* translate old mirror modifier axis values to new flags */ - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Mirror) { - MirrorModifierData *mmd = (MirrorModifierData*) md; - - switch (mmd->axis) { - case 0: - mmd->flag |= MOD_MIR_AXIS_X; - break; - case 1: - mmd->flag |= MOD_MIR_AXIS_Y; - break; - case 2: - mmd->flag |= MOD_MIR_AXIS_Z; - break; - } - - mmd->axis = 0; - } - } - } - } - - /* render layer added, this is not the active layer */ - if (main->versionfile <= 243 || main->subversionfile < 2) { - Mesh *me; - for (me=main->mesh.first; me; me=me->id.next) - customdata_version_243(me); - } - - } - - if (main->versionfile <= 244) { - Scene *sce; - bScreen *sc; - Lamp *la; - World *wrld; - - if (main->versionfile != 244 || main->subversionfile < 2) { - for (sce= main->scene.first; sce; sce= sce->id.next) - sce->r.mode |= R_SSS; - - /* correct older action editors - incorrect scrolling */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - sa= sc->areabase.first; - while (sa) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_ACTION) { - SpaceAction *saction= (SpaceAction*) sl; - - saction->v2d.tot.ymin = -1000.0; - saction->v2d.tot.ymax = 0.0; - - saction->v2d.cur.ymin = -75.0; - saction->v2d.cur.ymax = 5.0; - } - } - sa = sa->next; - } - } - } - if (main->versionfile != 244 || main->subversionfile < 3) { - /* constraints recode version patch used to be here. Moved to 245 now... */ - - - for (wrld=main->world.first; wrld; wrld= wrld->id.next) { - if (wrld->mode & WO_AMB_OCC) - wrld->ao_samp_method = WO_AOSAMP_CONSTANT; - else - wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY; - - wrld->ao_adapt_thresh = 0.005f; - } - - for (la=main->lamp.first; la; la= la->id.next) { - if (la->type == LA_AREA) - la->ray_samp_method = LA_SAMP_CONSTANT; - else - la->ray_samp_method = LA_SAMP_HALTON; - - la->adapt_thresh = 0.001f; - } - } - } - if (main->versionfile <= 245) { - Scene *sce; - Object *ob; - Image *ima; - Lamp *la; - Material *ma; - ParticleSettings *part; - World *wrld; - Mesh *me; - bNodeTree *ntree; - Tex *tex; - ModifierData *md; - ParticleSystem *psys; - - /* unless the file was created 2.44.3 but not 2.45, update the constraints */ - if ( !(main->versionfile==244 && main->subversionfile==3) && - ((main->versionfile<245) || (main->versionfile==245 && main->subversionfile==0)) ) - { - for (ob = main->object.first; ob; ob= ob->id.next) { - ListBase *list; - list = &ob->constraints; - - /* fix up constraints due to constraint recode changes (originally at 2.44.3) */ - if (list) { - bConstraint *curcon; - for (curcon = list->first; curcon; curcon=curcon->next) { - /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ - if (curcon->flag & 0x20) { - curcon->ownspace = CONSTRAINT_SPACE_LOCAL; - curcon->tarspace = CONSTRAINT_SPACE_LOCAL; - } - - switch (curcon->type) { - case CONSTRAINT_TYPE_LOCLIMIT: - { - bLocLimitConstraint *data= (bLocLimitConstraint *)curcon->data; - - /* old limit without parent option for objects */ - if (data->flag2) - curcon->ownspace = CONSTRAINT_SPACE_LOCAL; - } - break; - } - } - } - - /* correctly initialize constinv matrix */ - unit_m4(ob->constinv); - - if (ob->type == OB_ARMATURE) { - if (ob->pose) { - bConstraint *curcon; - bPoseChannel *pchan; - - for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { - /* make sure constraints are all up to date */ - for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { - /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ - if (curcon->flag & 0x20) { - curcon->ownspace = CONSTRAINT_SPACE_LOCAL; - curcon->tarspace = CONSTRAINT_SPACE_LOCAL; - } - - switch (curcon->type) { - case CONSTRAINT_TYPE_ACTION: - { - bActionConstraint *data= (bActionConstraint *)curcon->data; - - /* 'data->local' used to mean that target was in local-space */ - if (data->local) - curcon->tarspace = CONSTRAINT_SPACE_LOCAL; - } - break; - } - } - - /* correctly initialize constinv matrix */ - unit_m4(pchan->constinv); - } - } - } - } - } - - /* fix all versions before 2.45 */ - if (main->versionfile != 245) { - - /* repair preview from 242 - 244*/ - for (ima= main->image.first; ima; ima= ima->id.next) { - ima->preview = NULL; - } - } - - /* add point caches */ - for (ob=main->object.first; ob; ob=ob->id.next) { - if (ob->soft && !ob->soft->pointcache) - ob->soft->pointcache= BKE_ptcache_add(&ob->soft->ptcaches); - - for (psys=ob->particlesystem.first; psys; psys=psys->next) { - if (psys->pointcache) { - if (psys->pointcache->flag & PTCACHE_BAKED && (psys->pointcache->flag & PTCACHE_DISK_CACHE)==0) { - printf("Old memory cache isn't supported for particles, so re-bake the simulation!\n"); - psys->pointcache->flag &= ~PTCACHE_BAKED; - } - } - else - psys->pointcache= BKE_ptcache_add(&psys->ptcaches); - } - - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Cloth) { - ClothModifierData *clmd = (ClothModifierData*) md; - if (!clmd->point_cache) - clmd->point_cache= BKE_ptcache_add(&clmd->ptcaches); - } - } - } - - /* Copy over old per-level multires vertex data - * into a single vertex array in struct Multires */ - for (me = main->mesh.first; me; me=me->id.next) { - if (me->mr && !me->mr->verts) { - MultiresLevel *lvl = me->mr->levels.last; - if (lvl) { - me->mr->verts = lvl->verts; - lvl->verts = NULL; - /* Don't need the other vert arrays */ - for (lvl = lvl->prev; lvl; lvl = lvl->prev) { - MEM_freeN(lvl->verts); - lvl->verts = NULL; - } - } - } - } - - if (main->versionfile != 245 || main->subversionfile < 1) { - for (la=main->lamp.first; la; la= la->id.next) { - if (la->mode & LA_QUAD) la->falloff_type = LA_FALLOFF_SLIDERS; - else la->falloff_type = LA_FALLOFF_INVLINEAR; - - if (la->curfalloff == NULL) { - la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f); - curvemapping_initialize(la->curfalloff); - } - } - } - - for (ma=main->mat.first; ma; ma= ma->id.next) { - if (ma->samp_gloss_mir == 0) { - ma->gloss_mir = ma->gloss_tra= 1.0f; - ma->aniso_gloss_mir = 1.0f; - ma->samp_gloss_mir = ma->samp_gloss_tra= 18; - ma->adapt_thresh_mir = ma->adapt_thresh_tra = 0.005f; - ma->dist_mir = 0.0f; - ma->fadeto_mir = MA_RAYMIR_FADETOSKY; - } - - if (ma->strand_min == 0.0f) - ma->strand_min= 1.0f; - } - - for (part=main->particle.first; part; part=part->id.next) { - if (part->ren_child_nbr==0) - part->ren_child_nbr= part->child_nbr; - - if (part->simplify_refsize==0) { - part->simplify_refsize= 1920; - part->simplify_rate= 1.0f; - part->simplify_transition= 0.1f; - part->simplify_viewport= 0.8f; - } - } - - for (wrld=main->world.first; wrld; wrld= wrld->id.next) { - if (wrld->ao_approx_error == 0.0f) - wrld->ao_approx_error= 0.25f; - } - - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->nodetree) - ntree_version_245(fd, lib, sce->nodetree); - - if (sce->r.simplify_shadowsamples == 0) { - sce->r.simplify_subsurf= 6; - sce->r.simplify_particles= 1.0f; - sce->r.simplify_shadowsamples= 16; - sce->r.simplify_aosss= 1.0f; - } - - if (sce->r.cineongamma == 0) { - sce->r.cineonblack= 95; - sce->r.cineonwhite= 685; - sce->r.cineongamma= 1.7f; - } - } - - for (ntree=main->nodetree.first; ntree; ntree= ntree->id.next) - ntree_version_245(fd, lib, ntree); - - /* fix for temporary flag changes during 245 cycle */ - for (ima= main->image.first; ima; ima= ima->id.next) { - if (ima->flag & IMA_OLD_PREMUL) { - ima->flag &= ~IMA_OLD_PREMUL; - ima->flag |= IMA_DO_PREMUL; - } - } - - for (tex=main->tex.first; tex; tex=tex->id.next) { - if (tex->iuser.flag & IMA_OLD_PREMUL) { - tex->iuser.flag &= ~IMA_OLD_PREMUL; - tex->iuser.flag |= IMA_DO_PREMUL; - - } - - ima= newlibadr(fd, lib, tex->ima); - if (ima && (tex->iuser.flag & IMA_DO_PREMUL)) { - ima->flag &= ~IMA_OLD_PREMUL; - ima->flag |= IMA_DO_PREMUL; - } - } - } - - /* sanity check for skgen - * */ - { - Scene *sce; - for (sce=main->scene.first; sce; sce = sce->id.next) { - if (sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[1] || - sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[2] || - sce->toolsettings->skgen_subdivisions[1] == sce->toolsettings->skgen_subdivisions[2]) - { - sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; - sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; - sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; - } - } - } - - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 2)) { - Image *ima; - - /* initialize 1:1 Aspect */ - for (ima= main->image.first; ima; ima= ima->id.next) { - ima->aspx = ima->aspy = 1.0f; - } - - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 4)) { - bArmature *arm; - ModifierData *md; - Object *ob; - - for (arm= main->armature.first; arm; arm= arm->id.next) - arm->deformflag |= ARM_DEF_B_BONE_REST; - - for (ob = main->object.first; ob; ob= ob->id.next) { - for (md=ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Armature) - ((ArmatureModifierData*)md)->deformflag |= ARM_DEF_B_BONE_REST; - } - } - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 5)) { - /* foreground color needs to be something other then black */ - Scene *sce; - for (sce= main->scene.first; sce; sce=sce->id.next) { - sce->r.fg_stamp[0] = sce->r.fg_stamp[1] = sce->r.fg_stamp[2] = 0.8f; - sce->r.fg_stamp[3] = 1.0f; /* don't use text alpha yet */ - sce->r.bg_stamp[3] = 0.25f; /* make sure the background has full alpha */ - } - } - - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 6)) { - Scene *sce; - /* fix frs_sec_base */ - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->r.frs_sec_base == 0) { - sce->r.frs_sec_base = 1; - } - } - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 7)) { - Object *ob; - bPoseChannel *pchan; - bConstraint *con; - bConstraintTarget *ct; - - for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->pose) { - for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { - for (con=pchan->constraints.first; con; con=con->next) { - if (con->type == CONSTRAINT_TYPE_PYTHON) { - bPythonConstraint *data= (bPythonConstraint *)con->data; - if (data->tar) { - /* version patching needs to be done */ - ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); - - ct->tar = data->tar; - BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); - ct->space = con->tarspace; - - BLI_addtail(&data->targets, ct); - data->tarnum++; - - /* clear old targets to avoid problems */ - data->tar = NULL; - data->subtarget[0]= '\0'; - } - } - else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { - bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; - - /* new headtail functionality makes Bone-Tip function obsolete */ - if (data->flag & LOCLIKE_TIP) - con->headtail = 1.0f; - } - } - } - } - - for (con=ob->constraints.first; con; con=con->next) { - if (con->type==CONSTRAINT_TYPE_PYTHON) { - bPythonConstraint *data= (bPythonConstraint *)con->data; - if (data->tar) { - /* version patching needs to be done */ - ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); - - ct->tar = data->tar; - BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); - ct->space = con->tarspace; - - BLI_addtail(&data->targets, ct); - data->tarnum++; - - /* clear old targets to avoid problems */ - data->tar = NULL; - data->subtarget[0]= '\0'; - } - } - else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { - bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; - - /* new headtail functionality makes Bone-Tip function obsolete */ - if (data->flag & LOCLIKE_TIP) - con->headtail = 1.0f; - } - } - - if (ob->soft && ob->soft->keys) { - SoftBody *sb = ob->soft; - int k; - - for (k=0; k<sb->totkey; k++) { - if (sb->keys[k]) - MEM_freeN(sb->keys[k]); - } - - MEM_freeN(sb->keys); - - sb->keys = NULL; - sb->totkey = 0; - } - } - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 8)) { - Scene *sce; - Object *ob; - PartEff *paf=NULL; - - for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->soft && ob->soft->keys) { - SoftBody *sb = ob->soft; - int k; - - for (k=0; k<sb->totkey; k++) { - if (sb->keys[k]) - MEM_freeN(sb->keys[k]); - } - - MEM_freeN(sb->keys); - - sb->keys = NULL; - sb->totkey = 0; - } - - /* convert old particles to new system */ - if ((paf = do_version_give_parteff_245(ob))) { - ParticleSystem *psys; - ModifierData *md; - ParticleSystemModifierData *psmd; - ParticleSettings *part; - - /* create new particle system */ - psys = MEM_callocN(sizeof(ParticleSystem), "particle_system"); - psys->pointcache = BKE_ptcache_add(&psys->ptcaches); - - part = psys->part = psys_new_settings("ParticleSettings", main); - - /* needed for proper libdata lookup */ - oldnewmap_insert(fd->libmap, psys->part, psys->part, 0); - part->id.lib= ob->id.lib; - - part->id.us--; - part->id.flag |= (ob->id.flag & LIB_NEEDLINK); - - psys->totpart=0; - psys->flag= PSYS_ENABLED|PSYS_CURRENT; - - BLI_addtail(&ob->particlesystem, psys); - - md= modifier_new(eModifierType_ParticleSystem); - BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); - psmd= (ParticleSystemModifierData*) md; - psmd->psys=psys; - BLI_addtail(&ob->modifiers, md); - - /* convert settings from old particle system */ - /* general settings */ - part->totpart = MIN2(paf->totpart, 100000); - part->sta = paf->sta; - part->end = paf->end; - part->lifetime = paf->lifetime; - part->randlife = paf->randlife; - psys->seed = paf->seed; - part->disp = paf->disp; - part->omat = paf->mat[0]; - part->hair_step = paf->totkey; - - part->eff_group = paf->group; - - /* old system didn't interpolate between keypoints at render time */ - part->draw_step = part->ren_step = 0; - - /* physics */ - part->normfac = paf->normfac * 25.0f; - part->obfac = paf->obfac; - part->randfac = paf->randfac * 25.0f; - part->dampfac = paf->damp; - copy_v3_v3(part->acc, paf->force); - - /* flags */ - if (paf->stype & PAF_VECT) { - if (paf->flag & PAF_STATIC) { - /* new hair lifetime is always 100.0f */ - float fac = paf->lifetime / 100.0f; - - part->draw_as = PART_DRAW_PATH; - part->type = PART_HAIR; - psys->recalc |= PSYS_RECALC_REDO; - - part->normfac *= fac; - part->randfac *= fac; - } - else { - part->draw_as = PART_DRAW_LINE; - part->draw |= PART_DRAW_VEL_LENGTH; - part->draw_line[1] = 0.04f; - } - } - - part->rotmode = PART_ROT_VEL; - - part->flag |= (paf->flag & PAF_BSPLINE) ? PART_HAIR_BSPLINE : 0; - part->flag |= (paf->flag & PAF_TRAND) ? PART_TRAND : 0; - part->flag |= (paf->flag & PAF_EDISTR) ? PART_EDISTR : 0; - part->flag |= (paf->flag & PAF_UNBORN) ? PART_UNBORN : 0; - part->flag |= (paf->flag & PAF_DIED) ? PART_DIED : 0; - part->from |= (paf->flag & PAF_FACE) ? PART_FROM_FACE : 0; - part->draw |= (paf->flag & PAF_SHOWE) ? PART_DRAW_EMITTER : 0; - - psys->vgroup[PSYS_VG_DENSITY] = paf->vertgroup; - psys->vgroup[PSYS_VG_VEL] = paf->vertgroup_v; - psys->vgroup[PSYS_VG_LENGTH] = paf->vertgroup_v; - - /* dupliobjects */ - if (ob->transflag & OB_DUPLIVERTS) { - Object *dup = main->object.first; - - for (; dup; dup= dup->id.next) { - if (ob == newlibadr(fd, lib, dup->parent)) { - part->dup_ob = dup; - ob->transflag |= OB_DUPLIPARTS; - ob->transflag &= ~OB_DUPLIVERTS; - - part->draw_as = PART_DRAW_OB; - - /* needed for proper libdata lookup */ - oldnewmap_insert(fd->libmap, dup, dup, 0); - } - } - } - - - { - FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); - if (fluidmd && fluidmd->fss && fluidmd->fss->type == OB_FLUIDSIM_PARTICLE) - part->type = PART_FLUID; - } - - do_version_free_effects_245(&ob->effect); - - printf("Old particle system converted to new system.\n"); - } - } - - for (sce= main->scene.first; sce; sce=sce->id.next) { - ParticleEditSettings *pset= &sce->toolsettings->particle; - int a; - - if (pset->brush[0].size == 0) { - pset->flag= PE_KEEP_LENGTHS|PE_LOCK_FIRST|PE_DEFLECT_EMITTER; - pset->emitterdist= 0.25f; - pset->totrekey= 5; - pset->totaddkey= 5; - pset->brushtype= PE_BRUSH_NONE; - - for (a=0; a<PE_TOT_BRUSH; a++) { - pset->brush[a].strength= 50; - pset->brush[a].size= 50; - pset->brush[a].step= 10; - } - - pset->brush[PE_BRUSH_CUT].strength= 100; - } - } - } - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 9)) { - Material *ma; - int a; - - for (ma=main->mat.first; ma; ma= ma->id.next) - if (ma->mode & MA_NORMAP_TANG) - for (a=0; a<MAX_MTEX; a++) - if (ma->mtex[a] && ma->mtex[a]->tex) - ma->mtex[a]->normapspace = MTEX_NSPACE_TANGENT; - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 10)) { - Object *ob; - - /* dupliface scale */ - for (ob= main->object.first; ob; ob= ob->id.next) - ob->dupfacesca = 1.0f; - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 11)) { - Object *ob; - bActionStrip *strip; - - /* nla-strips - scale */ - for (ob= main->object.first; ob; ob= ob->id.next) { - for (strip= ob->nlastrips.first; strip; strip= strip->next) { - float length, actlength, repeat; - - if (strip->flag & ACTSTRIP_USESTRIDE) - repeat= 1.0f; - else - repeat= strip->repeat; - - length = strip->end-strip->start; - if (length == 0.0f) length= 1.0f; - actlength = strip->actend-strip->actstart; - - strip->scale = length / (repeat * actlength); - if (strip->scale == 0.0f) strip->scale= 1.0f; - } - if (ob->soft) { - ob->soft->inpush = ob->soft->inspring; - ob->soft->shearstiff = 1.0f; - } - } - } - - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 14)) { - Scene *sce; - Sequence *seq; - - for (sce=main->scene.first; sce; sce=sce->id.next) { - SEQ_BEGIN (sce->ed, seq) { - if (seq->blend_mode == 0) - seq->blend_opacity = 100.0f; - } - SEQ_END - } - } - - /*fix broken group lengths in id properties*/ - if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 15)) { - idproperties_fix_group_lengths(main->scene); - idproperties_fix_group_lengths(main->library); - idproperties_fix_group_lengths(main->object); - idproperties_fix_group_lengths(main->mesh); - idproperties_fix_group_lengths(main->curve); - idproperties_fix_group_lengths(main->mball); - idproperties_fix_group_lengths(main->mat); - idproperties_fix_group_lengths(main->tex); - idproperties_fix_group_lengths(main->image); - idproperties_fix_group_lengths(main->latt); - idproperties_fix_group_lengths(main->lamp); - idproperties_fix_group_lengths(main->camera); - idproperties_fix_group_lengths(main->ipo); - idproperties_fix_group_lengths(main->key); - idproperties_fix_group_lengths(main->world); - idproperties_fix_group_lengths(main->screen); - idproperties_fix_group_lengths(main->script); - idproperties_fix_group_lengths(main->vfont); - idproperties_fix_group_lengths(main->text); - idproperties_fix_group_lengths(main->sound); - idproperties_fix_group_lengths(main->group); - idproperties_fix_group_lengths(main->armature); - idproperties_fix_group_lengths(main->action); - idproperties_fix_group_lengths(main->nodetree); - idproperties_fix_group_lengths(main->brush); - idproperties_fix_group_lengths(main->particle); - } - - /* sun/sky */ - if (main->versionfile < 246) { - Object *ob; - bActuator *act; - - /* dRot actuator change direction in 2.46 */ - for (ob = main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_OBJECT) { - bObjectActuator *ba= act->data; - - ba->drot[0] = -ba->drot[0]; - ba->drot[1] = -ba->drot[1]; - ba->drot[2] = -ba->drot[2]; - } - } - } - } - - // convert fluids to modifier - if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { - Object *ob; - - for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->fluidsimSettings) { - FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim); - BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd); - - MEM_freeN(fluidmd->fss); - fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings); - fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo); - MEM_freeN(ob->fluidsimSettings); - - fluidmd->fss->lastgoodframe = INT_MAX; - fluidmd->fss->flag = 0; - fluidmd->fss->meshVelocities = NULL; - } - } - } - - - if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { - Mesh *me; - - for (me=main->mesh.first; me; me= me->id.next) - alphasort_version_246(fd, lib, me); - } - - if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { - Object *ob; - for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->pd && (ob->pd->forcefield == PFIELD_WIND)) - ob->pd->f_noise = 0.0f; - } - } - - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 2)) { - Object *ob; - for (ob = main->object.first; ob; ob= ob->id.next) { - ob->gameflag |= OB_COLLISION; - ob->margin = 0.06f; - } - } - - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 3)) { - Object *ob; - for (ob = main->object.first; ob; ob= ob->id.next) { - // Starting from subversion 3, ACTOR is a separate feature. - // Before it was conditioning all the other dynamic flags - if (!(ob->gameflag & OB_ACTOR)) - ob->gameflag &= ~(OB_GHOST|OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION_RESPONSE); - /* suitable default for older files */ - } - } - - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 5)) { - Lamp *la= main->lamp.first; - for (; la; la= la->id.next) { - la->skyblendtype= MA_RAMP_ADD; - la->skyblendfac= 1.0f; - } - } - - /* set the curve radius interpolation to 2.47 default - easy */ - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 6)) { - Curve *cu; - Nurb *nu; - - for (cu= main->curve.first; cu; cu= cu->id.next) { - for (nu= cu->nurb.first; nu; nu= nu->next) { - if (nu) { - nu->radius_interp = 3; - - /* resolu and resolv are now used differently for surfaces - * rather than using the resolution to define the entire number of divisions, - * use it for the number of divisions per segment - */ - if (nu->pntsv > 1) { - nu->resolu = MAX2( 1, (int)(((float)nu->resolu / (float)nu->pntsu)+0.5f) ); - nu->resolv = MAX2( 1, (int)(((float)nu->resolv / (float)nu->pntsv)+0.5f) ); - } - } - } - } - } - /* direction constraint actuators were always local in previous version */ - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 7)) { - bActuator *act; - Object *ob; - - for (ob = main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_CONSTRAINT) { - bConstraintActuator *coa = act->data; - if (coa->type == ACT_CONST_TYPE_DIST) { - coa->flag |= ACT_CONST_LOCAL; - } - } - } - } - } - - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 9)) { - Lamp *la= main->lamp.first; - for (; la; la= la->id.next) { - la->sky_exposure= 1.0f; - } - } - - /* BGE message actuators needed OB prefix, very confusing */ - if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 10)) { - bActuator *act; - Object *ob; - - for (ob = main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_MESSAGE) { - bMessageActuator *msgAct = (bMessageActuator *) act->data; - if (BLI_strnlen(msgAct->toPropName, 3) > 2) { - /* strip first 2 chars, would have only worked if these were OB anyway */ - memmove(msgAct->toPropName, msgAct->toPropName + 2, sizeof(msgAct->toPropName) - 2); - } - else { - msgAct->toPropName[0] = '\0'; - } - } - } - } - } - - if (main->versionfile < 248) { - Lamp *la; - - for (la=main->lamp.first; la; la= la->id.next) { - if (la->atm_turbidity == 0.0f) { - la->sun_effect_type = 0; - la->horizon_brightness = 1.0f; - la->spread = 1.0f; - la->sun_brightness = 1.0f; - la->sun_size = 1.0f; - la->backscattered_light = 1.0f; - la->atm_turbidity = 2.0f; - la->atm_inscattering_factor = 1.0f; - la->atm_extinction_factor = 1.0f; - la->atm_distance_factor = 1.0f; - la->sun_intensity = 1.0f; - } - } - } - - if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 2)) { - Scene *sce; - - /* Note, these will need to be added for painting */ - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->toolsettings->imapaint.seam_bleed = 2; - sce->toolsettings->imapaint.normal_angle = 80; - - /* initialize skeleton generation toolsettings */ - sce->toolsettings->skgen_resolution = 250; - sce->toolsettings->skgen_threshold_internal = 0.1f; - sce->toolsettings->skgen_threshold_external = 0.1f; - sce->toolsettings->skgen_angle_limit = 30.0f; - sce->toolsettings->skgen_length_ratio = 1.3f; - sce->toolsettings->skgen_length_limit = 1.5f; - sce->toolsettings->skgen_correlation_limit = 0.98f; - sce->toolsettings->skgen_symmetry_limit = 0.1f; - sce->toolsettings->skgen_postpro = SKGEN_SMOOTH; - sce->toolsettings->skgen_postpro_passes = 3; - sce->toolsettings->skgen_options = SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_FILTER_SMART|SKGEN_SUB_CORRELATION|SKGEN_HARMONIC; - sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; - sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; - sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; - - - sce->toolsettings->skgen_retarget_angle_weight = 1.0f; - sce->toolsettings->skgen_retarget_length_weight = 1.0f; - sce->toolsettings->skgen_retarget_distance_weight = 1.0f; - - /* Skeleton Sketching */ - sce->toolsettings->bone_sketching = 0; - sce->toolsettings->skgen_retarget_roll = SK_RETARGET_ROLL_VIEW; - } - } - if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { - bScreen *sc; - - /* adjust default settings for Animation Editors */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - for (sl= sa->spacedata.first; sl; sl= sl->next) { - switch (sl->spacetype) { - case SPACE_ACTION: - { - SpaceAction *sact= (SpaceAction *)sl; - - sact->mode= SACTCONT_DOPESHEET; - sact->autosnap= SACTSNAP_FRAME; - } - break; - case SPACE_IPO: - { - SpaceIpo *sipo= (SpaceIpo *)sl; - sipo->autosnap= SACTSNAP_FRAME; - } - break; - case SPACE_NLA: - { - SpaceNla *snla= (SpaceNla *)sl; - snla->autosnap= SACTSNAP_FRAME; - } - break; - } - } - } - } - } - - if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { - Object *ob; - - /* Adjustments needed after Bullets update */ - for (ob = main->object.first; ob; ob= ob->id.next) { - ob->damping *= 0.635f; - ob->rdamping = 0.1f + (0.8f * ob->rdamping); - } - } - - if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 4)) { - Scene *sce; - World *wrld; - - /* Dome (Fisheye) default parameters */ - for (sce= main->scene.first; sce; sce= sce->id.next) { - sce->r.domeangle = 180; - sce->r.domemode = 1; - sce->r.domeres = 4; - sce->r.domeresbuf = 1.0f; - sce->r.dometilt = 0; - } - /* DBVT culling by default */ - for (wrld=main->world.first; wrld; wrld= wrld->id.next) { - wrld->mode |= WO_DBVT_CULLING; - wrld->occlusionRes = 128; - } - } - - if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 5)) { - Object *ob; - World *wrld; - for (ob = main->object.first; ob; ob= ob->id.next) { - ob->m_contactProcessingThreshold = 1.0f; //pad3 is used for m_contactProcessingThreshold - if (ob->parent) { - /* check if top parent has compound shape set and if yes, set this object - * to compound shaper as well (was the behavior before, now it's optional) */ - Object *parent= newlibadr(fd, lib, ob->parent); - while (parent && parent != ob && parent->parent != NULL) { - parent = newlibadr(fd, lib, parent->parent); - } - if (parent) { - if (parent->gameflag & OB_CHILD) - ob->gameflag |= OB_CHILD; - } - } - } - for (wrld=main->world.first; wrld; wrld= wrld->id.next) { - wrld->ticrate = 60; - wrld->maxlogicstep = 5; - wrld->physubstep = 1; - wrld->maxphystep = 5; - } - } - - // correct introduce of seed for wind force - if (main->versionfile < 249 && main->subversionfile < 1) { - Object *ob; - for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->pd) - ob->pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128; - } - - } - - if (main->versionfile < 249 && main->subversionfile < 2) { - Scene *sce= main->scene.first; - Sequence *seq; - Editing *ed; - - while (sce) { - ed= sce->ed; - if (ed) { - SEQP_BEGIN (ed, seq) { - if (seq->strip && seq->strip->proxy) { - seq->strip->proxy->quality =90; - } - } - SEQ_END - } - - sce= sce->id.next; - } - - } - - if (main->versionfile < 250) { - bScreen *screen; - Scene *scene; - Base *base; - Material *ma; - Camera *cam; - Mesh *me; - Curve *cu; - Scene *sce; - Tex *tx; - ParticleSettings *part; - Object *ob; - //PTCacheID *pid; - //ListBase pidlist; - - bSound *sound; - Sequence *seq; - bActuator *act; - int a; - - for (sound = main->sound.first; sound; sound = sound->id.next) { - if (sound->newpackedfile) { - sound->packedfile = sound->newpackedfile; - sound->newpackedfile = NULL; - } - } - - for (ob = main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_SOUND) { - bSoundActuator *sAct = (bSoundActuator*) act->data; - if (sAct->sound) { - sound = newlibadr(fd, lib, sAct->sound); - sAct->flag = sound->flags & SOUND_FLAGS_3D ? ACT_SND_3D_SOUND : 0; - sAct->pitch = sound->pitch; - sAct->volume = sound->volume; - sAct->sound3D.reference_distance = sound->distance; - sAct->sound3D.max_gain = sound->max_gain; - sAct->sound3D.min_gain = sound->min_gain; - sAct->sound3D.rolloff_factor = sound->attenuation; - } - else { - sAct->sound3D.reference_distance = 1.0f; - sAct->volume = 1.0f; - sAct->sound3D.max_gain = 1.0f; - sAct->sound3D.rolloff_factor = 1.0f; - } - sAct->sound3D.cone_inner_angle = 360.0f; - sAct->sound3D.cone_outer_angle = 360.0f; - sAct->sound3D.max_distance = FLT_MAX; - } - } - } - - for (scene = main->scene.first; scene; scene = scene->id.next) { - if (scene->ed && scene->ed->seqbasep) { - SEQ_BEGIN (scene->ed, seq) { - if (seq->type == SEQ_HD_SOUND) { - char str[FILE_MAX]; - BLI_join_dirfile(str, sizeof(str), seq->strip->dir, seq->strip->stripdata->name); - BLI_path_abs(str, main->name); - seq->sound = sound_new_file(main, str); - } - /* don't know, if anybody used that - * this way, but just in case, upgrade - * to new way... */ - if ((seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) && - !(seq->flag & SEQ_USE_PROXY_CUSTOM_DIR)) - { - - BLI_snprintf(seq->strip->proxy->dir, - FILE_MAXDIR, "%s/BL_proxy", - seq->strip->dir); - } - } - SEQ_END - } - } - - for (screen= main->screen.first; screen; screen= screen->id.next) { - do_versions_windowmanager_2_50(screen); - do_versions_gpencil_2_50(main, screen); - } - - /* shader, composite and texture node trees have id.name empty, put something in - * to have them show in RNA viewer and accessible otherwise. - */ - for (ma= main->mat.first; ma; ma= ma->id.next) { - if (ma->nodetree && ma->nodetree->id.name[0] == '\0') - strcpy(ma->nodetree->id.name, "NTShader Nodetree"); - - /* which_output 0 is now "not specified" */ - for (a=0; a<MAX_MTEX; a++) { - if (ma->mtex[a]) { - tx= newlibadr(fd, lib, ma->mtex[a]->tex); - if (tx && tx->use_nodes) - ma->mtex[a]->which_output++; - } - } - } - /* and composite trees */ - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->nodetree && sce->nodetree->id.name[0] == '\0') - strcpy(sce->nodetree->id.name, "NTCompositing Nodetree"); - - /* move to cameras */ - if (sce->r.mode & R_PANORAMA) { - for (base=sce->base.first; base; base=base->next) { - ob= newlibadr(fd, lib, base->object); - - if (ob->type == OB_CAMERA && !ob->id.lib) { - cam= newlibadr(fd, lib, ob->data); - cam->flag |= CAM_PANORAMA; - } - } - - sce->r.mode &= ~R_PANORAMA; - } - } - /* and texture trees */ - for (tx= main->tex.first; tx; tx= tx->id.next) { - bNode *node; - - if (tx->nodetree) { - if (tx->nodetree->id.name[0] == '\0') - strcpy(tx->nodetree->id.name, "NTTexture Nodetree"); - - /* which_output 0 is now "not specified" */ - for (node=tx->nodetree->nodes.first; node; node=node->next) - if (node->type == TEX_NODE_OUTPUT) - node->custom1++; - } - } - - /* copy standard draw flag to meshes(used to be global, is not available here) */ - for (me= main->mesh.first; me; me= me->id.next) { - me->drawflag= ME_DRAWEDGES|ME_DRAWFACES|ME_DRAWCREASES; - } - - /* particle draw and render types */ - for (part= main->particle.first; part; part= part->id.next) { - if (part->draw_as) { - if (part->draw_as == PART_DRAW_DOT) { - part->ren_as = PART_DRAW_HALO; - part->draw_as = PART_DRAW_REND; - } - else if (part->draw_as <= PART_DRAW_AXIS) { - part->ren_as = PART_DRAW_HALO; - } - else { - part->ren_as = part->draw_as; - part->draw_as = PART_DRAW_REND; - } - } - part->path_end = 1.0f; - part->clength = 1.0f; - } - /* set old pointcaches to have disk cache flag */ - for (ob = main->object.first; ob; ob= ob->id.next) { - - //BKE_ptcache_ids_from_object(&pidlist, ob); - - //for (pid=pidlist.first; pid; pid=pid->next) - // pid->cache->flag |= PTCACHE_DISK_CACHE; - - //BLI_freelistN(&pidlist); - } - - /* type was a mixed flag & enum. move the 2d flag elsewhere */ - for (cu = main->curve.first; cu; cu= cu->id.next) { - Nurb *nu; - - for (nu= cu->nurb.first; nu; nu= nu->next) { - nu->flag |= (nu->type & CU_2D); - nu->type &= CU_TYPE; - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 1)) { - Object *ob; - Material *ma; - Tex *tex; - Scene *sce; - ToolSettings *ts; - //PTCacheID *pid; - //ListBase pidlist; - - for (ob = main->object.first; ob; ob = ob->id.next) { - //BKE_ptcache_ids_from_object(&pidlist, ob); - - //for (pid=pidlist.first; pid; pid=pid->next) { - // if (pid->ptcaches->first == NULL) - // pid->ptcaches->first = pid->ptcaches->last = pid->cache; - //} - - //BLI_freelistN(&pidlist); - - if (ob->type == OB_MESH) { - Mesh *me = newlibadr(fd, lib, ob->data); - void *olddata = ob->data; - ob->data = me; - - /* XXX - library meshes crash on loading most yoFrankie levels, - * the multires pointer gets invalid - Campbell */ - if (me && me->id.lib==NULL && me->mr && me->mr->level_count > 1) { - multires_load_old(ob, me); - } - - ob->data = olddata; - } - - if (ob->totcol && ob->matbits == NULL) { - int a; - - ob->matbits= MEM_callocN(sizeof(char)*ob->totcol, "ob->matbits"); - for (a=0; a<ob->totcol; a++) - ob->matbits[a]= ob->colbits & (1<<a); - } - } - - /* texture filter */ - for (tex = main->tex.first; tex; tex = tex->id.next) { - if (tex->afmax == 0) - tex->afmax= 8; - } - - for (ma = main->mat.first; ma; ma = ma->id.next) { - int a; - if (ma->mode & MA_WIRE) { - ma->material_type= MA_TYPE_WIRE; - ma->mode &= ~MA_WIRE; - } - if (ma->mode & MA_HALO) { - ma->material_type= MA_TYPE_HALO; - ma->mode &= ~MA_HALO; - } - - if (ma->mode & (MA_ZTRANSP|MA_RAYTRANSP)) { - ma->mode |= MA_TRANSP; - } - else { - /* ma->mode |= MA_ZTRANSP; */ /* leave ztransp as is even if its not used [#28113] */ - ma->mode &= ~MA_TRANSP; - } - - /* set new bump for unused slots */ - for (a=0; a<MAX_MTEX; a++) { - if (ma->mtex[a]) { - tex= ma->mtex[a]->tex; - if (!tex) { - ma->mtex[a]->texflag |= MTEX_3TAP_BUMP; - ma->mtex[a]->texflag |= MTEX_BUMP_OBJECTSPACE; - } - else { - tex= (Tex*)newlibadr(fd, ma->id.lib, tex); - if (tex && tex->type == 0) { /* invalid type */ - ma->mtex[a]->texflag |= MTEX_3TAP_BUMP; - ma->mtex[a]->texflag |= MTEX_BUMP_OBJECTSPACE; - } - } - } - } - - /* volume rendering settings */ - if (ma->vol.stepsize < 0.0001f) { - ma->vol.density = 1.0f; - ma->vol.emission = 0.0f; - ma->vol.scattering = 1.0f; - ma->vol.emission_col[0] = ma->vol.emission_col[1] = ma->vol.emission_col[2] = 1.0f; - ma->vol.density_scale = 1.0f; - ma->vol.depth_cutoff = 0.01f; - ma->vol.stepsize_type = MA_VOL_STEP_RANDOMIZED; - ma->vol.stepsize = 0.2f; - ma->vol.shade_type = MA_VOL_SHADE_SHADED; - ma->vol.shadeflag |= MA_VOL_PRECACHESHADING; - ma->vol.precache_resolution = 50; - } - } - - for (sce = main->scene.first; sce; sce = sce->id.next) { - ts= sce->toolsettings; - if (ts->normalsize == 0.0f || !ts->uv_selectmode || ts->vgroup_weight == 0.0f) { - ts->normalsize= 0.1f; - ts->selectmode= SCE_SELECT_VERTEX; - - /* autokeying - setting should be taken from the user-prefs - * but the userprefs version may not have correct flags set - * (i.e. will result in blank box when enabled) - */ - ts->autokey_mode= U.autokey_mode; - if (ts->autokey_mode == 0) - ts->autokey_mode= 2; /* 'add/replace' but not on */ - ts->uv_selectmode= UV_SELECT_VERTEX; - ts->vgroup_weight= 1.0f; - } - - /* Game Settings */ - //Dome - sce->gm.dome.angle = sce->r.domeangle; - sce->gm.dome.mode = sce->r.domemode; - sce->gm.dome.res = sce->r.domeres; - sce->gm.dome.resbuf = sce->r.domeresbuf; - sce->gm.dome.tilt = sce->r.dometilt; - sce->gm.dome.warptext = sce->r.dometext; - - //Stand Alone - sce->gm.playerflag |= (sce->r.fullscreen?GAME_PLAYER_FULLSCREEN:0); - sce->gm.xplay = sce->r.xplay; - sce->gm.yplay = sce->r.yplay; - sce->gm.freqplay = sce->r.freqplay; - sce->gm.depth = sce->r.depth; - sce->gm.attrib = sce->r.attrib; - - //Stereo - sce->gm.stereomode = sce->r.stereomode; - /* reassigning stereomode NO_STEREO and DOME to a separeted flag*/ - if (sce->gm.stereomode == 1) { //1 = STEREO_NOSTEREO - sce->gm.stereoflag = STEREO_NOSTEREO; - sce->gm.stereomode = STEREO_ANAGLYPH; - } - else if (sce->gm.stereomode == 8) { //8 = STEREO_DOME - sce->gm.stereoflag = STEREO_DOME; - sce->gm.stereomode = STEREO_ANAGLYPH; - } - else - sce->gm.stereoflag = STEREO_ENABLED; - - //Framing - sce->gm.framing = sce->framing; - sce->gm.xplay = sce->r.xplay; - sce->gm.yplay = sce->r.yplay; - sce->gm.freqplay= sce->r.freqplay; - sce->gm.depth= sce->r.depth; - - //Physic (previously stored in world) - sce->gm.gravity =9.8f; - sce->gm.physicsEngine= WOPHY_BULLET;// Bullet by default - sce->gm.mode = WO_DBVT_CULLING; // DBVT culling by default - sce->gm.occlusionRes = 128; - sce->gm.ticrate = 60; - sce->gm.maxlogicstep = 5; - sce->gm.physubstep = 1; - sce->gm.maxphystep = 5; - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 2)) { - Scene *sce; - Object *ob; - - for (sce = main->scene.first; sce; sce = sce->id.next) { - if (fd->fileflags & G_FILE_ENABLE_ALL_FRAMES) - sce->gm.flag |= GAME_ENABLE_ALL_FRAMES; - if (fd->fileflags & G_FILE_SHOW_DEBUG_PROPS) - sce->gm.flag |= GAME_SHOW_DEBUG_PROPS; - if (fd->fileflags & G_FILE_SHOW_FRAMERATE) - sce->gm.flag |= GAME_SHOW_FRAMERATE; - if (fd->fileflags & G_FILE_SHOW_PHYSICS) - sce->gm.flag |= GAME_SHOW_PHYSICS; - if (fd->fileflags & G_FILE_GLSL_NO_SHADOWS) - sce->gm.flag |= GAME_GLSL_NO_SHADOWS; - if (fd->fileflags & G_FILE_GLSL_NO_SHADERS) - sce->gm.flag |= GAME_GLSL_NO_SHADERS; - if (fd->fileflags & G_FILE_GLSL_NO_RAMPS) - sce->gm.flag |= GAME_GLSL_NO_RAMPS; - if (fd->fileflags & G_FILE_GLSL_NO_NODES) - sce->gm.flag |= GAME_GLSL_NO_NODES; - if (fd->fileflags & G_FILE_GLSL_NO_EXTRA_TEX) - sce->gm.flag |= GAME_GLSL_NO_EXTRA_TEX; - if (fd->fileflags & G_FILE_IGNORE_DEPRECATION_WARNINGS) - sce->gm.flag |= GAME_IGNORE_DEPRECATION_WARNINGS; - - if (fd->fileflags & G_FILE_GAME_MAT_GLSL) - sce->gm.matmode= GAME_MAT_GLSL; - else if (fd->fileflags & G_FILE_GAME_MAT) - sce->gm.matmode= GAME_MAT_MULTITEX; - else - sce->gm.matmode= GAME_MAT_TEXFACE; - - sce->gm.flag |= GAME_DISPLAY_LISTS; - } - - for (ob = main->object.first; ob; ob = ob->id.next) { - if (ob->flag & 8192) // OB_POSEMODE = 8192 - ob->mode |= OB_MODE_POSE; - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 4)) { - Scene *sce; - Object *ob; - Material *ma; - Lamp *la; - World *wo; - Tex *tex; - ParticleSettings *part; - int do_gravity = 0; - - for (sce = main->scene.first; sce; sce = sce->id.next) - if (sce->unit.scale_length == 0.0f) - sce->unit.scale_length= 1.0f; - - for (ob = main->object.first; ob; ob = ob->id.next) { - /* fluid-sim stuff */ - FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); - if (fluidmd) fluidmd->fss->fmd = fluidmd; - - /* rotation modes were added, but old objects would now default to being 'quaternion based' */ - ob->rotmode= ROT_MODE_EUL; - } - - for (ma = main->mat.first; ma; ma=ma->id.next) { - if (ma->vol.reflection == 0.f) { - ma->vol.reflection = 1.f; - ma->vol.transmission_col[0] = ma->vol.transmission_col[1] = ma->vol.transmission_col[2] = 1.0f; - ma->vol.reflection_col[0] = ma->vol.reflection_col[1] = ma->vol.reflection_col[2] = 1.0f; - } - - do_version_mtex_factor_2_50(ma->mtex, ID_MA); - } - - for (la = main->lamp.first; la; la=la->id.next) - do_version_mtex_factor_2_50(la->mtex, ID_LA); - - for (wo = main->world.first; wo; wo=wo->id.next) - do_version_mtex_factor_2_50(wo->mtex, ID_WO); - - for (tex = main->tex.first; tex; tex=tex->id.next) - if (tex->vd) - if (tex->vd->extend == 0) - tex->vd->extend = TEX_CLIP; - - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->audio.main == 0.0f) - sce->audio.main = 1.0f; - - sce->r.ffcodecdata.audio_mixrate = sce->audio.mixrate; - sce->r.ffcodecdata.audio_volume = sce->audio.main; - sce->audio.distance_model = 2; - sce->audio.doppler_factor = 1.0f; - sce->audio.speed_of_sound = 343.3f; - } - - /* Add default gravity to scenes */ - for (sce= main->scene.first; sce; sce= sce->id.next) { - if ((sce->physics_settings.flag & PHYS_GLOBAL_GRAVITY) == 0 && - len_v3(sce->physics_settings.gravity) == 0.0f) - { - sce->physics_settings.gravity[0] = sce->physics_settings.gravity[1] = 0.0f; - sce->physics_settings.gravity[2] = -9.81f; - sce->physics_settings.flag = PHYS_GLOBAL_GRAVITY; - do_gravity = 1; - } - } - - /* Assign proper global gravity weights for dynamics (only z-coordinate is taken into account) */ - if (do_gravity) for (part= main->particle.first; part; part= part->id.next) - part->effector_weights->global_gravity = part->acc[2]/-9.81f; - - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - - if (do_gravity) { - for (md= ob->modifiers.first; md; md= md->next) { - ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth); - if (clmd) - clmd->sim_parms->effector_weights->global_gravity = clmd->sim_parms->gravity[2]/-9.81f; - } - - if (ob->soft) - ob->soft->effector_weights->global_gravity = ob->soft->grav/9.81f; - } - - /* Normal wind shape is plane */ - if (ob->pd) { - if (ob->pd->forcefield == PFIELD_WIND) - ob->pd->shape = PFIELD_SHAPE_PLANE; - - if (ob->pd->flag & PFIELD_PLANAR) - ob->pd->shape = PFIELD_SHAPE_PLANE; - else if (ob->pd->flag & PFIELD_SURFACE) - ob->pd->shape = PFIELD_SHAPE_SURFACE; - - ob->pd->flag |= PFIELD_DO_LOCATION; - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 6)) { - Object *ob; - Lamp *la; - - /* New variables for axis-angle rotations and/or quaternion rotations were added, and need proper initialization */ - for (ob= main->object.first; ob; ob= ob->id.next) { - /* new variables for all objects */ - ob->quat[0]= 1.0f; - ob->rotAxis[1]= 1.0f; - - /* bones */ - if (ob->pose) { - bPoseChannel *pchan; - - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - /* just need to initalise rotation axis properly... */ - pchan->rotAxis[1]= 1.0f; - } - } - } - - for (la = main->lamp.first; la; la=la->id.next) - la->compressthresh= 0.05f; - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 7)) { - Mesh *me; - Nurb *nu; - Lattice *lt; - Curve *cu; - Key *key; - float *data; - int a, tot; - - /* shape keys are no longer applied to the mesh itself, but rather - * to the derivedmesh/displist, so here we ensure that the basis - * shape key is always set in the mesh coordinates. */ - - for (me= main->mesh.first; me; me= me->id.next) { - if ((key = newlibadr(fd, lib, me->key)) && key->refkey) { - data= key->refkey->data; - tot= MIN2(me->totvert, key->refkey->totelem); - - for (a=0; a<tot; a++, data+=3) - copy_v3_v3(me->mvert[a].co, data); - } - } - - for (lt= main->latt.first; lt; lt= lt->id.next) { - if ((key = newlibadr(fd, lib, lt->key)) && key->refkey) { - data= key->refkey->data; - tot= MIN2(lt->pntsu*lt->pntsv*lt->pntsw, key->refkey->totelem); - - for (a=0; a<tot; a++, data+=3) - copy_v3_v3(lt->def[a].vec, data); - } - } - - for (cu= main->curve.first; cu; cu= cu->id.next) { - if ((key = newlibadr(fd, lib, cu->key)) && key->refkey) { - data= key->refkey->data; - - for (nu=cu->nurb.first; nu; nu=nu->next) { - if (nu->bezt) { - BezTriple *bezt = nu->bezt; - - for (a=0; a<nu->pntsu; a++, bezt++) { - copy_v3_v3(bezt->vec[0], data); data+=3; - copy_v3_v3(bezt->vec[1], data); data+=3; - copy_v3_v3(bezt->vec[2], data); data+=3; - bezt->alfa= *data; data++; - } - } - else if (nu->bp) { - BPoint *bp = nu->bp; - - for (a=0; a<nu->pntsu*nu->pntsv; a++, bp++) { - copy_v3_v3(bp->vec, data); data+=3; - bp->alfa= *data; data++; - } - } - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 8)) { - { - Scene *sce= main->scene.first; - while (sce) { - if (sce->r.frame_step==0) - sce->r.frame_step= 1; - if (sce->r.mblur_samples==0) - sce->r.mblur_samples = sce->r.osa; - - if (sce->ed && sce->ed->seqbase.first) { - do_versions_seq_unique_name_all_strips( - sce, &sce->ed->seqbase); - } - - sce= sce->id.next; - } - } - { - /* ensure all nodes have unique names */ - bNodeTree *ntree= main->nodetree.first; - while (ntree) { - bNode *node=ntree->nodes.first; - - while (node) { - nodeUniqueName(ntree, node); - node= node->next; - } - - ntree= ntree->id.next; - } - } - { - Object *ob=main->object.first; - while (ob) { - /* shaded mode disabled for now */ - if (ob->dt == OB_MATERIAL) ob->dt = OB_TEXTURE; - ob=ob->id.next; - } - } - - { - bScreen *screen; - ScrArea *sa; - SpaceLink *sl; - - for (screen= main->screen.first; screen; screen= screen->id.next) { - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D *v3d = (View3D *)sl; - if (v3d->drawtype == OB_MATERIAL) v3d->drawtype = OB_SOLID; - } - } - } - } - } - - /* only convert old 2.50 files with color management */ - if (main->versionfile == 250) { - Scene *sce=main->scene.first; - Material *ma=main->mat.first; - World *wo=main->world.first; - Tex *tex=main->tex.first; - int i, convert=0; - - /* convert to new color management system: - * while previously colors were stored as srgb, - * now they are stored as linear internally, - * with screen gamma correction in certain places in the UI. */ - - /* don't know what scene is active, so we'll convert if any scene has it enabled... */ - while (sce) { - if (sce->r.color_mgt_flag & R_COLOR_MANAGEMENT) - convert=1; - sce=sce->id.next; - } - - if (convert) { - while (ma) { - if (ma->ramp_col) { - ColorBand *band = (ColorBand *)ma->ramp_col; - for (i=0; i<band->tot; i++) { - CBData *data = band->data + i; - srgb_to_linearrgb_v3_v3(&data->r, &data->r); - } - } - if (ma->ramp_spec) { - ColorBand *band = (ColorBand *)ma->ramp_spec; - for (i=0; i<band->tot; i++) { - CBData *data = band->data + i; - srgb_to_linearrgb_v3_v3(&data->r, &data->r); - } - } - - srgb_to_linearrgb_v3_v3(&ma->r, &ma->r); - srgb_to_linearrgb_v3_v3(&ma->specr, &ma->specr); - srgb_to_linearrgb_v3_v3(&ma->mirr, &ma->mirr); - srgb_to_linearrgb_v3_v3(ma->sss_col, ma->sss_col); - ma=ma->id.next; - } - - while (tex) { - if (tex->coba) { - ColorBand *band = (ColorBand *)tex->coba; - for (i=0; i<band->tot; i++) { - CBData *data = band->data + i; - srgb_to_linearrgb_v3_v3(&data->r, &data->r); - } - } - tex=tex->id.next; - } - - while (wo) { - srgb_to_linearrgb_v3_v3(&wo->ambr, &wo->ambr); - srgb_to_linearrgb_v3_v3(&wo->horr, &wo->horr); - srgb_to_linearrgb_v3_v3(&wo->zenr, &wo->zenr); - wo=wo->id.next; - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 9)) { - Scene *sce; - Mesh *me; - Object *ob; - - for (sce=main->scene.first; sce; sce=sce->id.next) - if (!sce->toolsettings->particle.selectmode) - sce->toolsettings->particle.selectmode= SCE_SELECT_PATH; - - if (main->versionfile == 250 && main->subversionfile > 1) { - for (me=main->mesh.first; me; me=me->id.next) - multires_load_old_250(me); - - for (ob=main->object.first; ob; ob=ob->id.next) { - MultiresModifierData *mmd = (MultiresModifierData *)modifiers_findByType(ob, eModifierType_Multires); - - if (mmd) { - mmd->totlvl--; - mmd->lvl--; - mmd->sculptlvl= mmd->lvl; - mmd->renderlvl= mmd->lvl; - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 10)) { - Object *ob; - - /* properly initialize hair clothsim data on old files */ - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - for (md= ob->modifiers.first; md; md= md->next) { - if (md->type == eModifierType_Cloth) { - ClothModifierData *clmd = (ClothModifierData *)md; - if (clmd->sim_parms->velocity_smooth < 0.01f) - clmd->sim_parms->velocity_smooth = 0.f; - } - } - } - } - - /* fix bad area setup in subversion 10 */ - if (main->versionfile == 250 && main->subversionfile == 10) { - /* fix for new view type in sequencer */ - bScreen *screen; - ScrArea *sa; - SpaceLink *sl; - - - /* remove all preview window in wrong spaces */ - for (screen= main->screen.first; screen; screen= screen->id.next) { - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype!=SPACE_SEQ) { - ARegion *ar; - ListBase *regionbase; - - if (sl == sa->spacedata.first) { - regionbase = &sa->regionbase; - } - else { - regionbase = &sl->regionbase; - } - - - for ( ar = regionbase->first; ar; ar = ar->next) { - if (ar->regiontype == RGN_TYPE_PREVIEW) - break; - } - - if (ar && (ar->regiontype == RGN_TYPE_PREVIEW)) { - SpaceType *st= BKE_spacetype_from_id(SPACE_SEQ); - BKE_area_region_free(st, ar); - BLI_freelinkN(regionbase, ar); - } - } - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 11)) { - { - /* fix for new view type in sequencer */ - bScreen *screen; - ScrArea *sa; - SpaceLink *sl; - - - for (screen= main->screen.first; screen; screen= screen->id.next) { - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_SEQ) { - ARegion *ar; - ARegion *ar_main; - ListBase *regionbase; - SpaceSeq *sseq = (SpaceSeq *)sl; - - if (sl == sa->spacedata.first) { - regionbase = &sa->regionbase; - } - else { - regionbase = &sl->regionbase; - } - - if (sseq->view == 0) sseq->view = SEQ_VIEW_SEQUENCE; - if (sseq->mainb == 0) sseq->mainb = SEQ_DRAW_IMG_IMBUF; - - ar_main = (ARegion*)regionbase->first; - for (; ar_main; ar_main = ar_main->next) { - if (ar_main->regiontype == RGN_TYPE_WINDOW) - break; - } - ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer"); - BLI_insertlinkbefore(regionbase, ar_main, ar); - sequencer_init_preview_region(ar); - } - } - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 12)) { - Scene *sce; - Object *ob; - Brush *brush; - Material *ma; - - /* game engine changes */ - for (sce = main->scene.first; sce; sce = sce->id.next) { - sce->gm.eyeseparation = 0.10f; - } - - /* anim viz changes */ - for (ob= main->object.first; ob; ob= ob->id.next) { - /* initialize object defaults */ - animviz_settings_init(&ob->avs); - - /* if armature, copy settings for pose from armature data - * performing initialization where appropriate - */ - if (ob->pose && ob->data) { - bArmature *arm= newlibadr(fd, lib, ob->data); - if (arm) { /* XXX - why does this fail in some cases? */ - bAnimVizSettings *avs= &ob->pose->avs; - - /* ghosting settings ---------------- */ - /* ranges */ - avs->ghost_bc= avs->ghost_ac= arm->ghostep; - - avs->ghost_sf= arm->ghostsf; - avs->ghost_ef= arm->ghostef; - if ((avs->ghost_sf == avs->ghost_ef) && (avs->ghost_sf == 0)) { - avs->ghost_sf= 1; - avs->ghost_ef= 100; - } - - /* type */ - if (arm->ghostep == 0) - avs->ghost_type= GHOST_TYPE_NONE; - else - avs->ghost_type= arm->ghosttype + 1; - - /* stepsize */ - avs->ghost_step= arm->ghostsize; - if (avs->ghost_step == 0) - avs->ghost_step= 1; - - /* path settings --------------------- */ - /* ranges */ - avs->path_bc= arm->pathbc; - avs->path_ac= arm->pathac; - if ((avs->path_bc == avs->path_ac) && (avs->path_bc == 0)) - avs->path_bc= avs->path_ac= 10; - - avs->path_sf= arm->pathsf; - avs->path_ef= arm->pathef; - if ((avs->path_sf == avs->path_ef) && (avs->path_sf == 0)) { - avs->path_sf= 1; - avs->path_ef= 250; - } - - /* flags */ - if (arm->pathflag & ARM_PATH_FNUMS) - avs->path_viewflag |= MOTIONPATH_VIEW_FNUMS; - if (arm->pathflag & ARM_PATH_KFRAS) - avs->path_viewflag |= MOTIONPATH_VIEW_KFRAS; - if (arm->pathflag & ARM_PATH_KFNOS) - avs->path_viewflag |= MOTIONPATH_VIEW_KFNOS; - - /* bake flags */ - if (arm->pathflag & ARM_PATH_HEADS) - avs->path_bakeflag |= MOTIONPATH_BAKE_HEADS; - - /* type */ - if (arm->pathflag & ARM_PATH_ACFRA) - avs->path_type = MOTIONPATH_TYPE_ACFRA; - - /* stepsize */ - avs->path_step= arm->pathsize; - if (avs->path_step == 0) - avs->path_step= 1; - } - else - animviz_settings_init(&ob->pose->avs); - } - } - - /* brush texture changes */ - for (brush= main->brush.first; brush; brush= brush->id.next) { - default_mtex(&brush->mtex); - } - - for (ma= main->mat.first; ma; ma= ma->id.next) { - if (ma->vol.ms_spread < 0.0001f) { - ma->vol.ms_spread = 0.2f; - ma->vol.ms_diff = 1.f; - ma->vol.ms_intensity = 1.f; - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 13)) { - /* NOTE: if you do more conversion, be sure to do it outside of this and - * increase subversion again, otherwise it will not be correct */ - Object *ob; - - /* convert degrees to radians for internal use */ - for (ob=main->object.first; ob; ob=ob->id.next) { - bPoseChannel *pchan; - - do_version_constraints_radians_degrees_250(&ob->constraints); - - if (ob->pose) { - for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { - pchan->limitmin[0] *= (float)(M_PI/180.0); - pchan->limitmin[1] *= (float)(M_PI/180.0); - pchan->limitmin[2] *= (float)(M_PI/180.0); - pchan->limitmax[0] *= (float)(M_PI/180.0); - pchan->limitmax[1] *= (float)(M_PI/180.0); - pchan->limitmax[2] *= (float)(M_PI/180.0); - - do_version_constraints_radians_degrees_250(&pchan->constraints); - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 14)) { - /* fix for bad View2D extents for Animation Editors */ - bScreen *screen; - ScrArea *sa; - SpaceLink *sl; - - for (screen= main->screen.first; screen; screen= screen->id.next) { - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - ListBase *regionbase; - ARegion *ar; - - if (sl == sa->spacedata.first) - regionbase = &sa->regionbase; - else - regionbase = &sl->regionbase; - - if (ELEM(sl->spacetype, SPACE_ACTION, SPACE_NLA)) { - for (ar = (ARegion*)regionbase->first; ar; ar = ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - ar->v2d.cur.ymax = ar->v2d.tot.ymax = 0.0f; - ar->v2d.cur.ymin = ar->v2d.tot.ymin = (float)(-sa->winy) / 3.0f; - } - } - } - } - } - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 15)) { - World *wo; - Material *ma; - - /* ambient default from 0.5f to 1.0f */ - for (ma= main->mat.first; ma; ma=ma->id.next) - ma->amb *= 2.0f; - - for (wo= main->world.first; wo; wo=wo->id.next) { - /* ao splitting into ao/env/indirect */ - wo->ao_env_energy= wo->aoenergy; - wo->aoenergy= 1.0f; - - if (wo->ao_indirect_bounces == 0) - wo->ao_indirect_bounces= 1; - else - wo->mode |= WO_INDIRECT_LIGHT; - - if (wo->aomix == WO_AOSUB) - wo->ao_env_energy= -wo->ao_env_energy; - else if (wo->aomix == WO_AOADDSUB) - wo->mode |= WO_AMB_OCC; - - wo->aomix= WO_AOMUL; - - /* ambient default from 0.5f to 1.0f */ - mul_v3_fl(&wo->ambr, 0.5f); - wo->ao_env_energy *= 0.5f; - } - } - - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 17)) { - Scene *sce; - Sequence *seq; - Material *ma; - - /* initialize to sane default so toggling on border shows something */ - for (sce = main->scene.first; sce; sce = sce->id.next) { - if (sce->r.border.xmin == 0.0f && sce->r.border.ymin == 0.0f && - sce->r.border.xmax == 0.0f && sce->r.border.ymax == 0.0f) { - sce->r.border.xmin = 0.0f; - sce->r.border.ymin = 0.0f; - sce->r.border.xmax = 1.0f; - sce->r.border.ymax = 1.0f; - } - - if ((sce->r.ffcodecdata.flags & FFMPEG_MULTIPLEX_AUDIO) == 0) - sce->r.ffcodecdata.audio_codec = 0x0; // CODEC_ID_NONE - - SEQ_BEGIN (sce->ed, seq) { - seq->volume = 1.0f; - } - SEQ_END - } - - /* particle brush strength factor was changed from int to float */ - for (sce= main->scene.first; sce; sce=sce->id.next) { - ParticleEditSettings *pset= &sce->toolsettings->particle; - int a; - - for (a=0; a<PE_TOT_BRUSH; a++) - pset->brush[a].strength /= 100.0f; - } - - for (ma = main->mat.first; ma; ma=ma->id.next) - if (ma->mode & MA_TRACEBLE) - ma->shade_flag |= MA_APPROX_OCCLUSION; - - /* sequencer changes */ - { - bScreen *screen; - ScrArea *sa; - SpaceLink *sl; - - for (screen= main->screen.first; screen; screen= screen->id.next) { - for (sa= screen->areabase.first; sa; sa= sa->next) { - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_SEQ) { - ARegion *ar_preview; - ListBase *regionbase; - - if (sl == sa->spacedata.first) { - regionbase = &sa->regionbase; - } - else { - regionbase = &sl->regionbase; - } - - ar_preview = (ARegion*)regionbase->first; - for (; ar_preview; ar_preview = ar_preview->next) { - if (ar_preview->regiontype == RGN_TYPE_PREVIEW) - break; - } - if (ar_preview && (ar_preview->regiontype == RGN_TYPE_PREVIEW)) { - sequencer_init_preview_region(ar_preview); - } - } - } - } - } - } /* sequencer changes */ - } - - if (main->versionfile <= 251) { /* 2.5.1 had no subversions */ - bScreen *sc; - - /* Blender 2.5.2 - subversion 0 introduced a new setting: V3D_RENDER_OVERRIDE. - * This bit was used in the past for V3D_TRANSFORM_SNAP, which is now deprecated. - * Here we clear it for old files so they don't come in with V3D_RENDER_OVERRIDE set, - * which would cause cameras, lamps, etc to become invisible */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_VIEW3D) { - View3D* v3d = (View3D *)sl; - v3d->flag2 &= ~V3D_RENDER_OVERRIDE; - } - } - } - } - } - - if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 1)) { - Brush *brush; - Object *ob; - Scene *scene; - bNodeTree *ntree; - - for (brush= main->brush.first; brush; brush= brush->id.next) { - if (brush->curve) brush->curve->preset = CURVE_PRESET_SMOOTH; - } - - /* properly initialize active flag for fluidsim modifiers */ - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - for (md= ob->modifiers.first; md; md= md->next) { - if (md->type == eModifierType_Fluidsim) { - FluidsimModifierData *fmd = (FluidsimModifierData *)md; - fmd->fss->flag |= OB_FLUIDSIM_ACTIVE; - fmd->fss->flag |= OB_FLUIDSIM_OVERRIDE_TIME; - } - } - } - - /* adjustment to color balance node values */ - for (scene= main->scene.first; scene; scene= scene->id.next) { - if (scene->nodetree) { - bNode *node=scene->nodetree->nodes.first; - - while (node) { - if (node->type == CMP_NODE_COLORBALANCE) { - NodeColorBalance *n= (NodeColorBalance *)node->storage; - n->lift[0] += 1.f; - n->lift[1] += 1.f; - n->lift[2] += 1.f; - } - node= node->next; - } - } - } - /* check inside node groups too */ - for (ntree= main->nodetree.first; ntree; ntree=ntree->id.next) { - bNode *node=ntree->nodes.first; - - while (node) { - if (node->type == CMP_NODE_COLORBALANCE) { - NodeColorBalance *n= (NodeColorBalance *)node->storage; - n->lift[0] += 1.f; - n->lift[1] += 1.f; - n->lift[2] += 1.f; - } - node= node->next; - } - } - } - - /* old-track -> constraints (this time we're really doing it!) */ - if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 2)) { - Object *ob; - - for (ob = main->object.first; ob; ob = ob->id.next) - do_version_old_trackto_to_constraints(ob); - } - - if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 5)) { - bScreen *sc; - - /* Image editor scopes */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IMAGE) { - SpaceImage *sima = (SpaceImage *)sl; - scopes_new(&sima->scopes); - } - } - } - } - } - - - if (main->versionfile < 253) { - Object *ob; - Scene *scene; - bScreen *sc; - Tex *tex; - Brush *brush; - - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype == SPACE_NODE) { - SpaceNode *snode= (SpaceNode *)sl; - ListBase *regionbase; - ARegion *ar; - - if (sl == sa->spacedata.first) - regionbase = &sa->regionbase; - else - regionbase = &sl->regionbase; - - if (snode->v2d.minzoom > 0.09f) - snode->v2d.minzoom= 0.09f; - if (snode->v2d.maxzoom < 2.31f) - snode->v2d.maxzoom= 2.31f; - - for (ar= regionbase->first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - if (ar->v2d.minzoom > 0.09f) - ar->v2d.minzoom= 0.09f; - if (ar->v2d.maxzoom < 2.31f) - ar->v2d.maxzoom= 2.31f; - } - } - } - else if (sl->spacetype == SPACE_TIME) { - SpaceTime *stime= (SpaceTime *)sl; - - /* enable all cache display */ - stime->cache_display |= TIME_CACHE_DISPLAY; - stime->cache_display |= (TIME_CACHE_SOFTBODY|TIME_CACHE_PARTICLES); - stime->cache_display |= (TIME_CACHE_CLOTH|TIME_CACHE_SMOKE|TIME_CACHE_DYNAMICPAINT); - } - } - } - } - - do_version_mdef_250(main); - - /* parent type to modifier */ - for (ob = main->object.first; ob; ob = ob->id.next) { - if (ob->parent) { - Object *parent= (Object *)newlibadr(fd, lib, ob->parent); - if (parent) { /* parent may not be in group */ - if (parent->type==OB_ARMATURE && ob->partype==PARSKEL) { - ArmatureModifierData *amd; - bArmature *arm= (bArmature *)newlibadr(fd, lib, parent->data); - - amd = (ArmatureModifierData*) modifier_new(eModifierType_Armature); - amd->object = ob->parent; - BLI_addtail((ListBase*)&ob->modifiers, amd); - amd->deformflag= arm->deformflag; - ob->partype = PAROBJECT; - } - else if (parent->type==OB_LATTICE && ob->partype==PARSKEL) { - LatticeModifierData *lmd; - - lmd = (LatticeModifierData*) modifier_new(eModifierType_Lattice); - lmd->object = ob->parent; - BLI_addtail((ListBase*)&ob->modifiers, lmd); - ob->partype = PAROBJECT; - } - else if (parent->type==OB_CURVE && ob->partype==PARCURVE) { - CurveModifierData *cmd; - - cmd = (CurveModifierData*) modifier_new(eModifierType_Curve); - cmd->object = ob->parent; - BLI_addtail((ListBase*)&ob->modifiers, cmd); - ob->partype = PAROBJECT; - } - } - } - } - - /* initialize scene active layer */ - for (scene= main->scene.first; scene; scene=scene->id.next) { - int i; - for (i=0; i<20; i++) { - if (scene->lay & (1<<i)) { - scene->layact= 1<<i; - break; - } - } - } - - for (tex= main->tex.first; tex; tex= tex->id.next) { - /* if youre picky, this isn't correct until we do a version bump - * since you could set saturation to be 0.0*/ - if (tex->saturation==0.0f) - tex->saturation= 1.0f; - } - - { - Curve *cu; - for (cu= main->curve.first; cu; cu= cu->id.next) { - cu->smallcaps_scale= 0.75f; - } - } - - for (scene= main->scene.first; scene; scene=scene->id.next) { - if (scene) { - Sequence *seq; - SEQ_BEGIN (scene->ed, seq) { - if (seq->sat==0.0f) { - seq->sat= 1.0f; - } - } - SEQ_END - } - } - - /* GSOC 2010 Sculpt - New settings for Brush */ - - for (brush= main->brush.first; brush; brush= brush->id.next) { - /* Sanity Check */ - - // infinite number of dabs - if (brush->spacing == 0) - brush->spacing = 10; - - // will have no effect - if (brush->alpha == 0) - brush->alpha = 0.5f; - - // bad radius - if (brush->unprojected_radius == 0) - brush->unprojected_radius = 0.125f; - - // unusable size - if (brush->size == 0) - brush->size = 35; - - // can't see overlay - if (brush->texture_overlay_alpha == 0) - brush->texture_overlay_alpha = 33; - - // same as draw brush - if (brush->crease_pinch_factor == 0) - brush->crease_pinch_factor = 0.5f; - - // will sculpt no vertexes - if (brush->plane_trim == 0) - brush->plane_trim = 0.5f; - - // same as smooth stroke off - if (brush->smooth_stroke_radius == 0) - brush->smooth_stroke_radius= 75; - - // will keep cursor in one spot - if (brush->smooth_stroke_radius == 1) - brush->smooth_stroke_factor= 0.9f; - - // same as dots - if (brush->rate == 0) - brush->rate = 0.1f; - - /* New Settings */ - if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 5)) { - brush->flag |= BRUSH_SPACE_ATTEN; // explicitly enable adaptive space - - // spacing was originally in pixels, convert it to percentage for new version - // size should not be zero due to sanity check above - brush->spacing = (int)(100*((float)brush->spacing) / ((float)brush->size)); - - if (brush->add_col[0] == 0 && - brush->add_col[1] == 0 && - brush->add_col[2] == 0) - { - brush->add_col[0] = 1.00f; - brush->add_col[1] = 0.39f; - brush->add_col[2] = 0.39f; - } - - if (brush->sub_col[0] == 0 && - brush->sub_col[1] == 0 && - brush->sub_col[2] == 0) - { - brush->sub_col[0] = 0.39f; - brush->sub_col[1] = 0.39f; - brush->sub_col[2] = 1.00f; - } - } - } - } - - /* GSOC Sculpt 2010 - Sanity check on Sculpt/Paint settings */ - if (main->versionfile < 253) { - Scene *sce; - for (sce= main->scene.first; sce; sce= sce->id.next) { - if (sce->toolsettings->sculpt_paint_unified_alpha == 0) - sce->toolsettings->sculpt_paint_unified_alpha = 0.5f; - - if (sce->toolsettings->sculpt_paint_unified_unprojected_radius == 0) - sce->toolsettings->sculpt_paint_unified_unprojected_radius = 0.125f; - - if (sce->toolsettings->sculpt_paint_unified_size == 0) - sce->toolsettings->sculpt_paint_unified_size = 35; - } - } - - if (main->versionfile < 253 || (main->versionfile == 253 && main->subversionfile < 1)) { - Object *ob; - - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - for (md= ob->modifiers.first; md; md= md->next) { - if (md->type == eModifierType_Smoke) { - SmokeModifierData *smd = (SmokeModifierData *)md; - - if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { - smd->domain->vorticity = 2.0f; - smd->domain->time_scale = 1.0f; - - if (!(smd->domain->flags & (1<<4))) - continue; - - /* delete old MOD_SMOKE_INITVELOCITY flag */ - smd->domain->flags &= ~(1<<4); - - /* for now just add it to all flow objects in the scene */ - { - Object *ob2; - for (ob2 = main->object.first; ob2; ob2 = ob2->id.next) { - ModifierData *md2; - for (md2= ob2->modifiers.first; md2; md2= md2->next) { - if (md2->type == eModifierType_Smoke) { - SmokeModifierData *smd2 = (SmokeModifierData *)md2; - - if ((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) { - smd2->flow->flags |= MOD_SMOKE_FLOW_INITVELOCITY; - } - } - } - } - } - - } - else if ((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) { - smd->flow->vel_multi = 1.0f; - } - - } - } - } - } - - if (main->versionfile < 255 || (main->versionfile == 255 && main->subversionfile < 1)) { - Brush *br; - ParticleSettings *part; - bScreen *sc; - Object *ob; - - for (br= main->brush.first; br; br= br->id.next) { - if (br->ob_mode==0) - br->ob_mode= OB_MODE_ALL_PAINT; - } - - for (part = main->particle.first; part; part = part->id.next) { - if (part->boids) - part->boids->pitch = 1.0f; - - part->flag &= ~PART_HAIR_REGROW; /* this was a deprecated flag before */ - part->kink_amp_clump = 1.f; /* keep old files looking similar */ - } - - for (sc= main->screen.first; sc; sc= sc->id.next) { - ScrArea *sa; - for (sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype == SPACE_INFO) { - SpaceInfo *sinfo= (SpaceInfo *)sl; - ARegion *ar; - - sinfo->rpt_mask= INFO_RPT_OP; - - for (ar= sa->regionbase.first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - ar->v2d.scroll = (V2D_SCROLL_RIGHT); - ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */ - ar->v2d.keepofs = V2D_LOCKOFS_X; - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); - ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS; - ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; - } - } - } - } - } - } - - /* fix rotation actuators for objects so they use real angles (radians) - * since before blender went opensource this strange scalar was used: (1 / 0.02) * 2 * math.pi/360 */ - for (ob= main->object.first; ob; ob= ob->id.next) { - bActuator *act= ob->actuators.first; - while (act) { - if (act->type==ACT_OBJECT) { - /* multiply velocity with 50 in old files */ - bObjectActuator *oa= act->data; - mul_v3_fl(oa->drot, 0.8726646259971648f); - } - act= act->next; - } - } - } - - // init facing axis property of steering actuators - { - Object *ob; - for (ob = main->object.first; ob; ob = ob->id.next) { - bActuator *act; - for (act= ob->actuators.first; act; act= act->next) { - if (act->type==ACT_STEERING) { - bSteeringActuator* stact = act->data; - if (stact->facingaxis==0) { - stact->facingaxis=1; - } - } - } - } - } - - if (main->versionfile < 255 || (main->versionfile == 255 && main->subversionfile < 3)) { - Object *ob; - - /* ocean res is now squared, reset old ones - will be massive */ - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - for (md= ob->modifiers.first; md; md= md->next) { - if (md->type == eModifierType_Ocean) { - OceanModifierData *omd = (OceanModifierData *)md; - omd->resolution = 7; - omd->oceancache = NULL; - } - } - } - } - - if (main->versionfile < 256) { - bScreen *sc; - ScrArea *sa; - Key *key; - - /* Fix for sample line scope initializing with no height */ - for (sc= main->screen.first; sc; sc= sc->id.next) { - sa= sc->areabase.first; - while (sa) { - SpaceLink *sl; - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IMAGE) { - SpaceImage *sima= (SpaceImage *)sl; - if (sima->sample_line_hist.height == 0 ) - sima->sample_line_hist.height = 100; - } - } - sa= sa->next; - } - } - - /* old files could have been saved with slidermin = slidermax = 0.0, but the UI in - * 2.4x would never reveal this to users as a dummy value always ended up getting used - * instead - */ - for (key = main->key.first; key; key = key->id.next) { - KeyBlock *kb; - - for (kb = key->block.first; kb; kb = kb->next) { - if (IS_EQF(kb->slidermin, kb->slidermax) && IS_EQ(kb->slidermax, 0)) - kb->slidermax = kb->slidermin + 1.0f; - } - } - } + bNode *node; - if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 1)) { - /* fix for bones that didn't have arm_roll before */ - bArmature* arm; - Bone* bone; - Object *ob; - - for (arm = main->armature.first; arm; arm = arm->id.next) - for (bone = arm->bonebase.first; bone; bone = bone->next) - do_version_bone_roll_256(bone); - - /* fix for objects which have zero dquat's - * since this is multiplied with the quat rather than added */ - for (ob= main->object.first; ob; ob= ob->id.next) { - if (is_zero_v4(ob->dquat)) { - unit_qt(ob->dquat); - } - if (is_zero_v3(ob->drotAxis) && ob->drotAngle == 0.0f) { - unit_axis_angle(ob->drotAxis, &ob->drotAngle); - } - } - } - - if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 2)) { - bNodeTree *ntree; - - /* node sockets are not exposed automatically any more, - * this mimics the old behavior by adding all unlinked sockets to groups. - */ - for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { - /* XXX Only setting a flag here. Actual adding of group sockets - * is done in lib_verify_nodetree, because at this point the internal - * nodes may not be up-to-date! (missing lib-link) - */ - ntree->flag |= NTREE_DO_VERSIONS_GROUP_EXPOSE; - } - } - - if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile <3)) { - bScreen *sc; - Brush *brush; - Object *ob; - ParticleSettings *part; - Material *mat; - int tex_nr, transp_tex; - - for (mat = main->mat.first; mat; mat = mat->id.next) { - if (!(mat->mode & MA_TRANSP) && !(mat->material_type & MA_TYPE_VOLUME)) { - - transp_tex= 0; - - for (tex_nr=0; tex_nr<MAX_MTEX; tex_nr++) { - if (!mat->mtex[tex_nr]) continue; - if (mat->mtex[tex_nr]->mapto & MAP_ALPHA) transp_tex= 1; - } - - /* weak! material alpha could be animated */ - if (mat->alpha < 1.0f || mat->fresnel_tra > 0.0f || transp_tex) { - mat->mode |= MA_TRANSP; - mat->mode &= ~(MA_ZTRANSP|MA_RAYTRANSP); - } - } - } - - /* redraws flag in SpaceTime has been moved to Screen level */ - for (sc = main->screen.first; sc; sc= sc->id.next) { - if (sc->redraws_flag == 0) { - /* just initialize to default? */ - // XXX: we could also have iterated through areas, and taken them from the first timeline available... - sc->redraws_flag = TIME_ALL_3D_WIN|TIME_ALL_ANIM_WIN; - } - } - - for (brush= main->brush.first; brush; brush= brush->id.next) { - if (brush->height == 0) - brush->height= 0.4f; - } - - /* replace 'rim material' option for in offset*/ - for (ob = main->object.first; ob; ob = ob->id.next) { - ModifierData *md; - for (md= ob->modifiers.first; md; md= md->next) { - if (md->type == eModifierType_Solidify) { - SolidifyModifierData *smd = (SolidifyModifierData *)md; - if (smd->flag & MOD_SOLIDIFY_RIM_MATERIAL) { - smd->mat_ofs_rim= 1; - smd->flag &= ~MOD_SOLIDIFY_RIM_MATERIAL; - } - } - } - } - - /* particle draw color from material */ - for (part = main->particle.first; part; part = part->id.next) { - if (part->draw & PART_DRAW_MAT_COL) - part->draw_col = PART_DRAW_COL_MAT; - } - } - - if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 6)) { - Mesh *me; - - for (me= main->mesh.first; me; me= me->id.next) - mesh_calc_normals_tessface(me->mvert, me->totvert, me->mface, me->totface, NULL); - } - - if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 2)) { - /* update blur area sizes from 0..1 range to 0..100 percentage */ - Scene *scene; - bNode *node; - for (scene=main->scene.first; scene; scene=scene->id.next) - if (scene->nodetree) - for (node=scene->nodetree->nodes.first; node; node=node->next) - if (node->type==CMP_NODE_BLUR) { - NodeBlurData *nbd= node->storage; - nbd->percentx *= 100.0f; - nbd->percenty *= 100.0f; - } - } - - if (main->versionfile < 258 || (main->versionfile == 258 && main->subversionfile < 1)) { - /* screen view2d settings were not properly initialized [#27164] - * v2d->scroll caused the bug but best reset other values too which are in old blend files only. - * need to make less ugly - possibly an iterator? */ - bScreen *screen; - for (screen= main->screen.first; screen; screen= screen->id.next) { - ScrArea *sa; - /* add regions */ - for (sa= screen->areabase.first; sa; sa= sa->next) { - SpaceLink *sl= sa->spacedata.first; - if (sl->spacetype==SPACE_IMAGE) { - ARegion *ar; - for (ar=sa->regionbase.first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - View2D *v2d= &ar->v2d; - v2d->minzoom= v2d->maxzoom= v2d->scroll= v2d->keeptot= v2d->keepzoom= v2d->keepofs= v2d->align= 0; - } - } - } - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_IMAGE) { - ARegion *ar; - for (ar=sl->regionbase.first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - View2D *v2d= &ar->v2d; - v2d->minzoom= v2d->maxzoom= v2d->scroll= v2d->keeptot= v2d->keepzoom= v2d->keepofs= v2d->align= 0; - } - } - } - } - } - } - - { - /* Initialize texture point density curve falloff */ - Tex *tex; - for (tex= main->tex.first; tex; tex= tex->id.next) { - if (tex->pd) { - if (tex->pd->falloff_speed_scale == 0.0f) - tex->pd->falloff_speed_scale = 100.0f; - - if (!tex->pd->falloff_curve) { - tex->pd->falloff_curve = curvemapping_add(1, 0, 0, 1, 1); - - tex->pd->falloff_curve->preset = CURVE_PRESET_LINE; - tex->pd->falloff_curve->cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; - curvemap_reset(tex->pd->falloff_curve->cm, &tex->pd->falloff_curve->clipr, tex->pd->falloff_curve->preset, CURVEMAP_SLOPE_POSITIVE); - curvemapping_changed(tex->pd->falloff_curve, 0); - } - } - } - } - - { - /* add default value for behind strength of camera actuator */ - Object *ob; - bActuator *act; - for (ob = main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_CAMERA) { - bCameraActuator *ba= act->data; - - ba->damping = 1.0/32.0; - } - } - } - } - - { - ParticleSettings *part; - for (part = main->particle.first; part; part = part->id.next) { - /* Initialize particle billboard scale */ - part->bb_size[0] = part->bb_size[1] = 1.0f; - } - } - } - - if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 1)) { - { - Scene *scene; - Sequence *seq; - - for (scene=main->scene.first; scene; scene=scene->id.next) { - scene->r.ffcodecdata.audio_channels = 2; - scene->audio.volume = 1.0f; - SEQ_BEGIN (scene->ed, seq) { - seq->pitch = 1.0f; - } - SEQ_END - } - } - { - bScreen *screen; - for (screen= main->screen.first; screen; screen= screen->id.next) { - ScrArea *sa; - /* add regions */ - for (sa= screen->areabase.first; sa; sa= sa->next) { - SpaceLink *sl= sa->spacedata.first; - if (sl->spacetype==SPACE_SEQ) { - ARegion *ar; - for (ar=sa->regionbase.first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - if (ar->v2d.min[1] == 4.0f) - ar->v2d.min[1]= 0.5f; - } - } - } - for (sl= sa->spacedata.first; sl; sl= sl->next) { - if (sl->spacetype==SPACE_SEQ) { - ARegion *ar; - for (ar=sl->regionbase.first; ar; ar= ar->next) { - if (ar->regiontype == RGN_TYPE_WINDOW) { - if (ar->v2d.min[1] == 4.0f) - ar->v2d.min[1]= 0.5f; - } - } - } - } - } - } - } - { - /* Make "auto-clamped" handles a per-keyframe setting instead of per-FCurve - * - * We're only patching F-Curves in Actions here, since it is assumed that most - * drivers out there won't be using this (and if they are, they're in the minority). - * While we should aim to fix everything ideally, in practice it's far too hard - * to get to every animdata block, not to mention the performance hit that'd have - */ - bAction *act; - FCurve *fcu; - - for (act = main->action.first; act; act = act->id.next) { - for (fcu = act->curves.first; fcu; fcu = fcu->next) { - BezTriple *bezt; - unsigned int i = 0; - - /* only need to touch curves that had this flag set */ - if ((fcu->flag & FCURVE_AUTO_HANDLES) == 0) - continue; - if ((fcu->totvert == 0) || (fcu->bezt == NULL)) - continue; - - /* only change auto-handles to auto-clamped */ - for (bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { - if (bezt->h1 == HD_AUTO) bezt->h1 = HD_AUTO_ANIM; - if (bezt->h2 == HD_AUTO) bezt->h2 = HD_AUTO_ANIM; - } - - fcu->flag &= ~FCURVE_AUTO_HANDLES; - } - } - } - { - /* convert fcurve and shape action actuators to action actuators */ - Object *ob; - bActuator *act; - bIpoActuator *ia; - bActionActuator *aa; - - for (ob= main->object.first; ob; ob= ob->id.next) { - for (act= ob->actuators.first; act; act= act->next) { - if (act->type == ACT_IPO) { - // Create the new actuator - ia= act->data; - aa= MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version"); - - // Copy values - aa->type = ia->type; - aa->flag = ia->flag; - aa->sta = ia->sta; - aa->end = ia->end; - BLI_strncpy(aa->name, ia->name, sizeof(aa->name)); - BLI_strncpy(aa->frameProp, ia->frameProp, sizeof(aa->frameProp)); - if (ob->adt) - aa->act = ob->adt->action; - - // Get rid of the old actuator - MEM_freeN(ia); - - // Assign the new actuator - act->data = aa; - act->type= act->otype= ACT_ACTION; - - } - else if (act->type == ACT_SHAPEACTION) { - act->type = act->otype = ACT_ACTION; - } - } + for (node=ntree->nodes.first; node; node=node->next) { + if (node->type==CMP_NODE_OUTPUT_FILE) { + bNodeSocket *sock; + for (sock=node->inputs.first; sock; sock=sock->next) { + NodeImageMultiFileSocket *input = sock->storage; + /* input file path is stored in dedicated struct now instead socket name */ + BLI_strncpy(input->path, sock->name, sizeof(input->path)); + sock->name[0] = '\0'; /* unused */ } } } +} - if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 2)) { - { - /* Convert default socket values from bNodeStack */ - Scene *sce; - Material *mat; - Tex *tex; - bNodeTree *ntree; - for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { - do_versions_nodetree_default_value(ntree); - ntree->update |= NTREE_UPDATE; - } - for (sce=main->scene.first; sce; sce=sce->id.next) - if (sce->nodetree) { - do_versions_nodetree_default_value(sce->nodetree); - sce->nodetree->update |= NTREE_UPDATE; - } - for (mat=main->mat.first; mat; mat=mat->id.next) - if (mat->nodetree) { - do_versions_nodetree_default_value(mat->nodetree); - mat->nodetree->update |= NTREE_UPDATE; - } - for (tex=main->tex.first; tex; tex=tex->id.next) - if (tex->nodetree) { - do_versions_nodetree_default_value(tex->nodetree); - tex->nodetree->update |= NTREE_UPDATE; - } - } - - /* add SOCK_DYNAMIC flag to existing group sockets */ - { - bNodeTree *ntree; - /* only need to do this for trees in main, local trees are not used as groups */ - for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { - do_versions_nodetree_dynamic_sockets(ntree); - ntree->update |= NTREE_UPDATE; - } - } - - { - /* Initialize group tree nodetypes. - * These are used to distinguish tree types and - * associate them with specific node types for polling. - */ - bNodeTree *ntree; - /* all node trees in main->nodetree are considered groups */ - for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) - ntree->nodetype = NODE_GROUP; - } - } +static void do_versions(FileData *fd, Library *lib, Main *main) +{ + /* WATCH IT!!!: pointers from libdata have not been converted */ - if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 4)) { - { - /* Adaptive time step for particle systems */ - ParticleSettings *part; - for (part = main->particle.first; part; part = part->id.next) { - part->courant_target = 0.2f; - part->time_flag &= ~PART_TIME_AUTOSF; - } - } + if (G.debug & G_DEBUG) + printf("read file %s\n Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision); - { - /* set defaults for obstacle avoidance, recast data */ - Scene *sce; - for (sce = main->scene.first; sce; sce = sce->id.next) { - if (sce->gm.levelHeight == 0.f) - sce->gm.levelHeight = 2.f; - - if (sce->gm.recastData.cellsize == 0.0f) - sce->gm.recastData.cellsize = 0.3f; - if (sce->gm.recastData.cellheight == 0.0f) - sce->gm.recastData.cellheight = 0.2f; - if (sce->gm.recastData.agentmaxslope == 0.0f) - sce->gm.recastData.agentmaxslope = (float)M_PI/4; - if (sce->gm.recastData.agentmaxclimb == 0.0f) - sce->gm.recastData.agentmaxclimb = 0.9f; - if (sce->gm.recastData.agentheight == 0.0f) - sce->gm.recastData.agentheight = 2.0f; - if (sce->gm.recastData.agentradius == 0.0f) - sce->gm.recastData.agentradius = 0.6f; - if (sce->gm.recastData.edgemaxlen == 0.0f) - sce->gm.recastData.edgemaxlen = 12.0f; - if (sce->gm.recastData.edgemaxerror == 0.0f) - sce->gm.recastData.edgemaxerror = 1.3f; - if (sce->gm.recastData.regionminsize == 0.0f) - sce->gm.recastData.regionminsize = 8.f; - if (sce->gm.recastData.regionmergesize == 0.0f) - sce->gm.recastData.regionmergesize = 20.f; - if (sce->gm.recastData.vertsperpoly<3) - sce->gm.recastData.vertsperpoly = 6; - if (sce->gm.recastData.detailsampledist == 0.0f) - sce->gm.recastData.detailsampledist = 6.0f; - if (sce->gm.recastData.detailsamplemaxerror == 0.0f) - sce->gm.recastData.detailsamplemaxerror = 1.0f; - } - } - } + blo_do_versions_pre250(fd, lib, main); + blo_do_versions_250(fd, lib, main); if (main->versionfile < 260) { { @@ -13037,15 +7097,15 @@ static void do_versions(FileData *fd, Library *lib, Main *main) v3d->bundle_size= 0.2f; v3d->flag2 |= V3D_SHOW_RECONSTRUCTION; } - else if (sl->spacetype==SPACE_CLIP) { - SpaceClip *sc= (SpaceClip *)sl; - if (sc->scopes.track_preview_height==0) - sc->scopes.track_preview_height= 120; - } if (v3d->bundle_drawtype==0) v3d->bundle_drawtype= OB_PLAINAXES; } + else if (sl->spacetype==SPACE_CLIP) { + SpaceClip *sc= (SpaceClip *)sl; + if (sc->scopes.track_preview_height==0) + sc->scopes.track_preview_height= 120; + } } } } @@ -13444,10 +7504,105 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (main->versionfile < 263) { - /* Default for old files is to save particle rotations to pointcache */ - ParticleSettings *part; - for (part = main->particle.first; part; part = part->id.next) - part->flag |= PART_ROTATIONS; + { + /* Default for old files is to save particle rotations to pointcache */ + ParticleSettings *part; + for (part = main->particle.first; part; part = part->id.next) + part->flag |= PART_ROTATIONS; + } + { + /* file output node paths are now stored in the file info struct instead socket name */ + Scene *sce; + bNodeTree *ntree; + + for (sce = main->scene.first; sce; sce=sce->id.next) + if (sce->nodetree) + do_versions_nodetree_multi_file_output_path_2_64_0(sce->nodetree); + for (ntree = main->nodetree.first; ntree; ntree=ntree->id.next) + do_versions_nodetree_multi_file_output_path_2_64_0(ntree); + } + } + + if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 3)) { + Scene *scene; + Brush *brush; + + /* For weight paint, each brush now gets its own weight; + unified paint settings also have weight. Update unified + paint settings and brushes with a default weight value. */ + + for (scene = main->scene.first; scene; scene = scene->id.next) { + ToolSettings *ts = scene->toolsettings; + if (ts) { + ts->unified_paint_settings.weight = ts->vgroup_weight; + ts->unified_paint_settings.flag |= UNIFIED_PAINT_WEIGHT; + } + } + + for (brush = main->brush.first; brush; brush = brush->id.next) { + brush->weight = 0.5; + } + } + + if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 2)) { + bScreen *sc; + + for (sc = main->screen.first; sc; sc = sc->id.next) { + ScrArea *sa; + for (sa = sc->areabase.first; sa; sa = sa->next) { + SpaceLink *sl; + + for (sl = sa->spacedata.first; sl; sl = sl->next) { + if (sl->spacetype == SPACE_CLIP) { + SpaceClip *sclip = (SpaceClip *)sl; + ARegion *ar; + int hide = FALSE; + + for (ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_PREVIEW) { + if (ar->alignment != RGN_ALIGN_NONE) { + ar->flag |= RGN_FLAG_HIDDEN; + ar->v2d.flag &= ~V2D_IS_INITIALISED; + ar->alignment = RGN_ALIGN_NONE; + + hide = TRUE; + } + } + } + + if (hide) { + sclip->view = SC_VIEW_CLIP; + } + } + } + } + } + } + + if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 4)) + { + Lamp *la; + Camera *cam; + Curve *cu; + + for (la= main->lamp.first; la; la= la->id.next) { + if (la->shadow_frustum_size == 0.0) + la->shadow_frustum_size= 10.0f; + } + + for (cam = main->camera.first; cam; cam = cam->id.next) { + if (cam->flag & CAM_PANORAMA) { + cam->type = CAM_PANO; + cam->flag &= ~CAM_PANORAMA; + } + } + + for(cu= main->curve.first; cu; cu= cu->id.next) { + if(cu->bevfac2 == 0.0f) { + cu->bevfac1 = 0.0f; + cu->bevfac2 = 1.0f; + } + } } /* default values in Freestyle settings */ @@ -14297,7 +8452,7 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob) expand_doit(fd, mainvar, ob->mat[a]); } - paf = do_version_give_parteff_245(ob); + paf = blo_do_version_give_parteff_245(ob); if (paf && paf->group) expand_doit(fd, mainvar, paf->group); @@ -14447,7 +8602,8 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) if (sce->ed) { Sequence *seq; - SEQ_BEGIN (sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) + { if (seq->scene) expand_doit(fd, mainvar, seq->scene); if (seq->scene_camera) expand_doit(fd, mainvar, seq->scene_camera); if (seq->sound) expand_doit(fd, mainvar, seq->sound); @@ -14564,7 +8720,7 @@ static void expand_main(FileData *fd, Main *mainvar) expand_lattice(fd, mainvar, (Lattice *)id); break; case ID_LA: - expand_lamp(fd, mainvar,(Lamp *)id); + expand_lamp(fd, mainvar, (Lamp *)id); break; case ID_KE: expand_key(fd, mainvar, (Key *)id); @@ -14573,7 +8729,7 @@ static void expand_main(FileData *fd, Main *mainvar) expand_camera(fd, mainvar, (Camera *)id); break; case ID_SPK: - expand_speaker(fd, mainvar,(Speaker *)id); + expand_speaker(fd, mainvar, (Speaker *)id); break; case ID_SO: expand_sound(fd, mainvar, (bSound *)id); @@ -14674,7 +8830,7 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, const } if (do_it) { - base= MEM_callocN( sizeof(Base), "add_ext_base"); + base= MEM_callocN(sizeof(Base), "add_ext_base"); BLI_addtail(&(sce->base), base); base->lay= ob->lay; base->object= ob; @@ -14778,7 +8934,7 @@ static ID *append_named_part_ex(const bContext *C, Main *mainl, FileData *fd, co Base *base; Object *ob; - base= MEM_callocN( sizeof(Base), "app_nam_part"); + base= MEM_callocN(sizeof(Base), "app_nam_part"); BLI_addtail(&scene->base, base); ob= (Object *)id; @@ -14923,7 +9079,7 @@ static void library_append_end(const bContext *C, Main *mainl, FileData **fd, in /* patch to prevent switch_endian happens twice */ if ((*fd)->flags & FD_FLAGS_SWITCH_ENDIAN) { - blo_freefiledata( *fd ); + blo_freefiledata(*fd); *fd = NULL; } } diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h index 511ded0ecdc..9be375977e9 100644 --- a/source/blender/blenloader/intern/readfile.h +++ b/source/blender/blenloader/intern/readfile.h @@ -39,6 +39,10 @@ struct OldNewMap; struct MemFile; struct bheadsort; struct ReportList; +struct Object; +struct PartEff; +struct View3D; +struct bNodeTree; typedef struct FileData { // linked list of BHeadN's @@ -133,5 +137,19 @@ BHead *blo_prevbhead(FileData *fd, BHead *thisblock); char *bhead_id_name(FileData *fd, BHead *bhead); +/* do versions stuff */ + +void blo_do_versions_oldnewmap_insert(struct OldNewMap *onm, void *oldaddr, void *newaddr, int nr); +void *blo_do_versions_newlibadr(struct FileData *fd, void *lib, void *adr); +void *blo_do_versions_newlibadr_us(struct FileData *fd, void *lib, void *adr); + +struct PartEff *blo_do_version_give_parteff_245(struct Object *ob); +void blo_do_version_old_trackto_to_constraints(struct Object *ob); +void blo_do_versions_view3d_split_250(struct View3D *v3d, struct ListBase *regions); +void blo_do_versions_nodetree_default_value(struct bNodeTree *ntree); + +void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Main *main); +void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *main); + #endif diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c new file mode 100644 index 00000000000..8b4471086a8 --- /dev/null +++ b/source/blender/blenloader/intern/versioning_250.c @@ -0,0 +1,2679 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + * + */ + +/** \file blender/blenloader/intern/readfile_250.c + * \ingroup blenloader + */ + +#include "zlib.h" + +#ifndef WIN32 +# include <unistd.h> // for read close +#else +# include <io.h> // for open close read +# include "winsock2.h" +# include "BLI_winstuff.h" +#endif + +/* allow readfile to use deprecated functionality */ +#define DNA_DEPRECATED_ALLOW + +#include "DNA_anim_types.h" +#include "DNA_armature_types.h" +#include "DNA_actuator_types.h" +#include "DNA_brush_types.h" +#include "DNA_camera_types.h" +#include "DNA_cloth_types.h" +#include "DNA_constraint_types.h" +#include "DNA_ipo_types.h" +#include "DNA_key_types.h" +#include "DNA_lattice_types.h" +#include "DNA_lamp_types.h" +#include "DNA_material_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_node_types.h" +#include "DNA_object_fluidsim.h" // NT +#include "DNA_object_types.h" +#include "DNA_view3d_types.h" +#include "DNA_screen_types.h" +#include "DNA_sdna_types.h" +#include "DNA_sequence_types.h" +#include "DNA_smoke_types.h" +#include "DNA_sound_types.h" +#include "DNA_space_types.h" +#include "DNA_world_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" +#include "BLI_blenlib.h" +#include "BLI_math.h" +#include "BLI_edgehash.h" + +#include "BKE_anim.h" +#include "BKE_armature.h" +#include "BKE_colortools.h" +#include "BKE_global.h" // for G +#include "BKE_library.h" // for which_libbase +#include "BKE_main.h" // for Main +#include "BKE_mesh.h" // for ME_ defines (patching) +#include "BKE_modifier.h" +#include "BKE_multires.h" +#include "BKE_particle.h" +#include "BKE_pointcache.h" +#include "BKE_screen.h" +#include "BKE_sequencer.h" +#include "BKE_texture.h" // for open_plugin_tex +#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND +#include "BKE_sound.h" + +#include "NOD_socket.h" + +//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes +//XXX #include "BIF_filelist.h" // badlevel too, where to move this? - elubie +//XXX #include "BIF_previewrender.h" // bedlelvel, for struct RenderInfo +#include "BLO_readfile.h" +#include "BLO_undofile.h" + +#include "RE_engine.h" + +#include "readfile.h" + +#include "PIL_time.h" + +#include <errno.h> + +/* 2.50 patch */ +static void area_add_header_region(ScrArea *sa, ListBase *lb) +{ + ARegion *ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_HEADER; + if (sa->headertype==HEADERDOWN) + ar->alignment= RGN_ALIGN_BOTTOM; + else + ar->alignment= RGN_ALIGN_TOP; + + /* initialize view2d data for header region, to allow panning */ + /* is copy from ui_view2d.c */ + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); + ar->v2d.keepofs = V2D_LOCKOFS_Y; + ar->v2d.keeptot = V2D_KEEPTOT_STRICT; + ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; + ar->v2d.flag = (V2D_PIXELOFS_X|V2D_PIXELOFS_Y); +} + +static void sequencer_init_preview_region(ARegion* ar) +{ + // XXX a bit ugly still, copied from space_sequencer + /* NOTE: if you change values here, also change them in space_sequencer.c, sequencer_new */ + ar->regiontype= RGN_TYPE_PREVIEW; + ar->alignment= RGN_ALIGN_TOP; + ar->flag |= RGN_FLAG_HIDDEN; + ar->v2d.keepzoom= V2D_KEEPASPECT | V2D_KEEPZOOM; + ar->v2d.minzoom= 0.00001f; + ar->v2d.maxzoom= 100000.0f; + ar->v2d.tot.xmin = -960.0f; /* 1920 width centered */ + ar->v2d.tot.ymin = -540.0f; /* 1080 height centered */ + ar->v2d.tot.xmax = 960.0f; + ar->v2d.tot.ymax = 540.0f; + ar->v2d.min[0]= 0.0f; + ar->v2d.min[1]= 0.0f; + ar->v2d.max[0]= 12000.0f; + ar->v2d.max[1]= 12000.0f; + ar->v2d.cur= ar->v2d.tot; + ar->v2d.align= V2D_ALIGN_FREE; // (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y); + ar->v2d.keeptot= V2D_KEEPTOT_FREE; +} + +static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) +{ + ARegion *ar; + ARegion *ar_main; + + if (sl) { + /* first channels for ipo action nla... */ + switch (sl->spacetype) { + case SPACE_IPO: + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_CHANNELS; + ar->alignment= RGN_ALIGN_LEFT; + ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + + // for some reason, this doesn't seem to go auto like for NLA... + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + ar->v2d.scroll= V2D_SCROLL_RIGHT; + ar->v2d.flag = RGN_FLAG_HIDDEN; + break; + + case SPACE_ACTION: + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_CHANNELS; + ar->alignment= RGN_ALIGN_LEFT; + ar->v2d.scroll= V2D_SCROLL_BOTTOM; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + break; + + case SPACE_NLA: + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_CHANNELS; + ar->alignment= RGN_ALIGN_LEFT; + ar->v2d.scroll= V2D_SCROLL_BOTTOM; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + + // for some reason, some files still don't get this auto + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + ar->v2d.scroll= V2D_SCROLL_RIGHT; + ar->v2d.flag = RGN_FLAG_HIDDEN; + break; + + case SPACE_NODE: + ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_LEFT; + ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + /* temporarily hide it */ + ar->flag = RGN_FLAG_HIDDEN; + break; + case SPACE_FILE: + ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_CHANNELS; + ar->alignment= RGN_ALIGN_LEFT; + + ar= MEM_callocN(sizeof(ARegion), "ui area for file"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_TOP; + break; + case SPACE_SEQ: + ar_main = (ARegion*)lb->first; + for (; ar_main; ar_main = ar_main->next) { + if (ar_main->regiontype == RGN_TYPE_WINDOW) + break; + } + ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer"); + BLI_insertlinkbefore(lb, ar_main, ar); + sequencer_init_preview_region(ar); + break; + case SPACE_VIEW3D: + /* toolbar */ + ar= MEM_callocN(sizeof(ARegion), "toolbar for view3d"); + + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_TOOLS; + ar->alignment= RGN_ALIGN_LEFT; + ar->flag = RGN_FLAG_HIDDEN; + + /* tool properties */ + ar= MEM_callocN(sizeof(ARegion), "tool properties for view3d"); + + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_TOOL_PROPS; + ar->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV; + ar->flag = RGN_FLAG_HIDDEN; + + /* buttons/list view */ + ar= MEM_callocN(sizeof(ARegion), "buttons for view3d"); + + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + ar->flag = RGN_FLAG_HIDDEN; +#if 0 + case SPACE_BUTS: + /* context UI region */ + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + + break; +#endif + } + } + + /* main region */ + ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + + BLI_addtail(lb, ar); + ar->winrct= sa->totrct; + + ar->regiontype= RGN_TYPE_WINDOW; + + if (sl) { + /* if active spacetype has view2d data, copy that over to main region */ + /* and we split view3d */ + switch (sl->spacetype) { + case SPACE_VIEW3D: + blo_do_versions_view3d_split_250((View3D *)sl, lb); + break; + + case SPACE_OUTLINER: + { + SpaceOops *soops= (SpaceOops *)sl; + + memcpy(&ar->v2d, &soops->v2d, sizeof(View2D)); + + ar->v2d.scroll &= ~V2D_SCROLL_LEFT; + ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); + ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); + ar->v2d.keepzoom |= (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPASPECT); + ar->v2d.keeptot = V2D_KEEPTOT_STRICT; + ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; + //ar->v2d.flag |= V2D_IS_INITIALISED; + } + break; + case SPACE_TIME: + { + SpaceTime *stime= (SpaceTime *)sl; + memcpy(&ar->v2d, &stime->v2d, sizeof(View2D)); + + ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.align |= V2D_ALIGN_NO_NEG_Y; + ar->v2d.keepofs |= V2D_LOCKOFS_Y; + ar->v2d.keepzoom |= V2D_LOCKZOOM_Y; + ar->v2d.tot.ymin = ar->v2d.cur.ymin = -10.0; + ar->v2d.min[1]= ar->v2d.max[1]= 20.0; + } + break; + case SPACE_IPO: + { + SpaceIpo *sipo= (SpaceIpo *)sl; + memcpy(&ar->v2d, &sipo->v2d, sizeof(View2D)); + + /* init mainarea view2d */ + ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); + + ar->v2d.min[0]= FLT_MIN; + ar->v2d.min[1]= FLT_MIN; + + ar->v2d.max[0]= MAXFRAMEF; + ar->v2d.max[1]= FLT_MAX; + + //ar->v2d.flag |= V2D_IS_INITIALISED; + break; + } + case SPACE_NLA: + { + SpaceNla *snla= (SpaceNla *)sl; + memcpy(&ar->v2d, &snla->v2d, sizeof(View2D)); + + ar->v2d.tot.ymin = (float)(-sa->winy)/3.0f; + ar->v2d.tot.ymax = 0.0f; + + ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT); + ar->v2d.align = V2D_ALIGN_NO_POS_Y; + ar->v2d.flag |= V2D_VIEWSYNC_AREA_VERTICAL; + break; + } + case SPACE_ACTION: + { + SpaceAction *saction= (SpaceAction *)sl; + + /* we totally reinit the view for the Action Editor, as some old instances had some weird cruft set */ + ar->v2d.tot.xmin = -20.0f; + ar->v2d.tot.ymin = (float)(-sa->winy)/3.0f; + ar->v2d.tot.xmax = (float)((sa->winx > 120)? (sa->winx) : 120); + ar->v2d.tot.ymax = 0.0f; + + ar->v2d.cur= ar->v2d.tot; + + ar->v2d.min[0]= 0.0f; + ar->v2d.min[1]= 0.0f; + + ar->v2d.max[0]= MAXFRAMEF; + ar->v2d.max[1]= FLT_MAX; + + ar->v2d.minzoom= 0.01f; + ar->v2d.maxzoom= 50; + ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT); + ar->v2d.keepzoom= V2D_LOCKZOOM_Y; + ar->v2d.align= V2D_ALIGN_NO_POS_Y; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + + /* for old files with ShapeKey editors open + an action set, clear the action as + * it doesn't make sense in the new system (i.e. violates concept that ShapeKey edit + * only shows ShapeKey-rooted actions only) + */ + if (saction->mode == SACTCONT_SHAPEKEY) + saction->action = NULL; + break; + } + case SPACE_SEQ: + { + SpaceSeq *sseq= (SpaceSeq *)sl; + memcpy(&ar->v2d, &sseq->v2d, sizeof(View2D)); + + ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); + ar->v2d.align= V2D_ALIGN_NO_NEG_Y; + ar->v2d.flag |= V2D_IS_INITIALISED; + break; + } + case SPACE_NODE: + { + SpaceNode *snode= (SpaceNode *)sl; + memcpy(&ar->v2d, &snode->v2d, sizeof(View2D)); + + ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; + break; + } + case SPACE_BUTS: + { + SpaceButs *sbuts= (SpaceButs *)sl; + memcpy(&ar->v2d, &sbuts->v2d, sizeof(View2D)); + + ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + break; + } + case SPACE_FILE: + { + // SpaceFile *sfile= (SpaceFile *)sl; + ar->v2d.tot.xmin = ar->v2d.tot.ymin = 0; + ar->v2d.tot.xmax = ar->winx; + ar->v2d.tot.ymax = ar->winy; + ar->v2d.cur = ar->v2d.tot; + ar->regiontype= RGN_TYPE_WINDOW; + ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); + ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); + break; + } + case SPACE_TEXT: + { + SpaceText *st= (SpaceText *)sl; + st->flags |= ST_FIND_WRAP; + } + //case SPACE_XXX: // FIXME... add other ones + // memcpy(&ar->v2d, &((SpaceXxx *)sl)->v2d, sizeof(View2D)); + // break; + } + } +} + +static void do_versions_windowmanager_2_50(bScreen *screen) +{ + ScrArea *sa; + SpaceLink *sl; + + /* add regions */ + for (sa= screen->areabase.first; sa; sa= sa->next) { + + /* we keep headertype variable to convert old files only */ + if (sa->headertype) + area_add_header_region(sa, &sa->regionbase); + + area_add_window_regions(sa, sa->spacedata.first, &sa->regionbase); + + /* space imageselect is deprecated */ + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IMASEL) + sl->spacetype= SPACE_EMPTY; /* spacedata then matches */ + } + + /* space sound is deprecated */ + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_SOUND) + sl->spacetype= SPACE_EMPTY; /* spacedata then matches */ + } + + /* it seems to be possible in 2.5 to have this saved, filewindow probably */ + sa->butspacetype= sa->spacetype; + + /* pushed back spaces also need regions! */ + if (sa->spacedata.first) { + sl= sa->spacedata.first; + for (sl= sl->next; sl; sl= sl->next) { + if (sa->headertype) + area_add_header_region(sa, &sl->regionbase); + area_add_window_regions(sa, sl, &sl->regionbase); + } + } + } +} + +static void versions_gpencil_add_main(ListBase *lb, ID *id, const char *name) +{ + + BLI_addtail(lb, id); + id->us= 1; + id->flag= LIB_FAKEUSER; + *( (short *)id->name )= ID_GD; + + new_id(lb, id, name); + /* alphabetic insterion: is in new_id */ + + if (G.debug & G_DEBUG) + printf("Converted GPencil to ID: %s\n", id->name+2); +} + +static void do_versions_gpencil_2_50(Main *main, bScreen *screen) +{ + ScrArea *sa; + SpaceLink *sl; + + /* add regions */ + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D*) sl; + if (v3d->gpd) { + versions_gpencil_add_main(&main->gpencil, (ID *)v3d->gpd, "GPencil View3D"); + v3d->gpd= NULL; + } + } + else if (sl->spacetype==SPACE_NODE) { + SpaceNode *snode= (SpaceNode *)sl; + if (snode->gpd) { + versions_gpencil_add_main(&main->gpencil, (ID *)snode->gpd, "GPencil Node"); + snode->gpd= NULL; + } + } + else if (sl->spacetype==SPACE_SEQ) { + SpaceSeq *sseq= (SpaceSeq *)sl; + if (sseq->gpd) { + versions_gpencil_add_main(&main->gpencil, (ID *)sseq->gpd, "GPencil Node"); + sseq->gpd= NULL; + } + } + else if (sl->spacetype==SPACE_IMAGE) { + SpaceImage *sima= (SpaceImage *)sl; +#if 0 /* see comment on r28002 */ + if (sima->gpd) { + versions_gpencil_add_main(&main->gpencil, (ID *)sima->gpd, "GPencil Image"); + sima->gpd= NULL; + } +#else + sima->gpd= NULL; +#endif + } + } + } +} + +static void do_version_mtex_factor_2_50(MTex **mtex_array, short idtype) +{ + MTex *mtex; + float varfac, colfac; + int a, neg; + + if (!mtex_array) + return; + + for (a=0; a<MAX_MTEX; a++) { + if (mtex_array[a]) { + mtex= mtex_array[a]; + + neg= mtex->maptoneg; + varfac= mtex->varfac; + colfac= mtex->colfac; + + if (neg & MAP_DISP) mtex->dispfac= -mtex->dispfac; + if (neg & MAP_NORM) mtex->norfac= -mtex->norfac; + if (neg & MAP_WARP) mtex->warpfac= -mtex->warpfac; + + mtex->colspecfac= (neg & MAP_COLSPEC)? -colfac: colfac; + mtex->mirrfac= (neg & MAP_COLMIR)? -colfac: colfac; + mtex->alphafac= (neg & MAP_ALPHA)? -varfac: varfac; + mtex->difffac= (neg & MAP_REF)? -varfac: varfac; + mtex->specfac= (neg & MAP_SPEC)? -varfac: varfac; + mtex->emitfac= (neg & MAP_EMIT)? -varfac: varfac; + mtex->hardfac= (neg & MAP_HAR)? -varfac: varfac; + mtex->raymirrfac= (neg & MAP_RAYMIRR)? -varfac: varfac; + mtex->translfac= (neg & MAP_TRANSLU)? -varfac: varfac; + mtex->ambfac= (neg & MAP_AMB)? -varfac: varfac; + mtex->colemitfac= (neg & MAP_EMISSION_COL)? -colfac: colfac; + mtex->colreflfac= (neg & MAP_REFLECTION_COL)? -colfac: colfac; + mtex->coltransfac= (neg & MAP_TRANSMISSION_COL)? -colfac: colfac; + mtex->densfac= (neg & MAP_DENSITY)? -varfac: varfac; + mtex->scatterfac= (neg & MAP_SCATTERING)? -varfac: varfac; + mtex->reflfac= (neg & MAP_REFLECTION)? -varfac: varfac; + + mtex->timefac= (neg & MAP_PA_TIME)? -varfac: varfac; + mtex->lengthfac= (neg & MAP_PA_LENGTH)? -varfac: varfac; + mtex->clumpfac= (neg & MAP_PA_CLUMP)? -varfac: varfac; + mtex->kinkfac= (neg & MAP_PA_KINK)? -varfac: varfac; + mtex->roughfac= (neg & MAP_PA_ROUGH)? -varfac: varfac; + mtex->padensfac= (neg & MAP_PA_DENS)? -varfac: varfac; + mtex->lifefac= (neg & MAP_PA_LIFE)? -varfac: varfac; + mtex->sizefac= (neg & MAP_PA_SIZE)? -varfac: varfac; + mtex->ivelfac= (neg & MAP_PA_IVEL)? -varfac: varfac; + + mtex->shadowfac= (neg & LAMAP_SHAD)? -colfac: colfac; + + mtex->zenupfac= (neg & WOMAP_ZENUP)? -colfac: colfac; + mtex->zendownfac= (neg & WOMAP_ZENDOWN)? -colfac: colfac; + mtex->blendfac= (neg & WOMAP_BLEND)? -varfac: varfac; + + if (idtype == ID_MA) + mtex->colfac= (neg & MAP_COL)? -colfac: colfac; + else if (idtype == ID_LA) + mtex->colfac= (neg & LAMAP_COL)? -colfac: colfac; + else if (idtype == ID_WO) + mtex->colfac= (neg & WOMAP_HORIZ)? -colfac: colfac; + } + } +} + +static void do_version_mdef_250(Main *main) +{ + Object *ob; + ModifierData *md; + MeshDeformModifierData *mmd; + + for (ob= main->object.first; ob; ob=ob->id.next) { + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type == eModifierType_MeshDeform) { + mmd= (MeshDeformModifierData*)md; + + if (mmd->bindcos) { + /* make bindcos NULL in order to trick older versions + * into thinking that the mesh was not bound yet */ + mmd->bindcagecos= mmd->bindcos; + mmd->bindcos= NULL; + + modifier_mdef_compact_influences(md); + } + } + } + } +} + +static void do_version_constraints_radians_degrees_250(ListBase *lb) +{ + bConstraint *con; + + for (con=lb->first; con; con=con->next) { + if (con->type==CONSTRAINT_TYPE_RIGIDBODYJOINT) { + bRigidBodyJointConstraint *data = con->data; + data->axX *= (float)(M_PI/180.0); + data->axY *= (float)(M_PI/180.0); + data->axZ *= (float)(M_PI/180.0); + } + else if (con->type==CONSTRAINT_TYPE_KINEMATIC) { + bKinematicConstraint *data = con->data; + data->poleangle *= (float)(M_PI/180.0); + } + else if (con->type==CONSTRAINT_TYPE_ROTLIMIT) { + bRotLimitConstraint *data = con->data; + + data->xmin *= (float)(M_PI/180.0); + data->xmax *= (float)(M_PI/180.0); + data->ymin *= (float)(M_PI/180.0); + data->ymax *= (float)(M_PI/180.0); + data->zmin *= (float)(M_PI/180.0); + data->zmax *= (float)(M_PI/180.0); + } + } +} + +/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */ +static void do_versions_seq_unique_name_all_strips( + Scene * sce, ListBase *seqbasep) +{ + Sequence * seq = seqbasep->first; + + while (seq) { + seqbase_unique_name_recursive(&sce->ed->seqbase, seq); + if (seq->seqbase.first) { + do_versions_seq_unique_name_all_strips( + sce, &seq->seqbase); + } + seq=seq->next; + } +} + +static void do_version_bone_roll_256(Bone *bone) +{ + Bone *child; + float submat[3][3]; + + copy_m3_m4(submat, bone->arm_mat); + mat3_to_vec_roll(submat, NULL, &bone->arm_roll); + + for (child = bone->childbase.first; child; child = child->next) + do_version_bone_roll_256(child); +} + +static void do_versions_nodetree_dynamic_sockets(bNodeTree *ntree) +{ + bNodeSocket *sock; + for (sock=ntree->inputs.first; sock; sock=sock->next) + sock->flag |= SOCK_DYNAMIC; + for (sock=ntree->outputs.first; sock; sock=sock->next) + sock->flag |= SOCK_DYNAMIC; +} + +void blo_do_versions_250(FileData *fd, Library *lib, Main *main) +{ + /* WATCH IT!!!: pointers from libdata have not been converted */ + + if (G.debug & G_DEBUG) + printf("read file %s\n Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision); + + if (main->versionfile < 250) { + bScreen *screen; + Scene *scene; + Base *base; + Material *ma; + Camera *cam; + Mesh *me; + Curve *cu; + Scene *sce; + Tex *tx; + ParticleSettings *part; + Object *ob; + //PTCacheID *pid; + //ListBase pidlist; + + bSound *sound; + Sequence *seq; + bActuator *act; + int a; + + for (sound = main->sound.first; sound; sound = sound->id.next) { + if (sound->newpackedfile) { + sound->packedfile = sound->newpackedfile; + sound->newpackedfile = NULL; + } + } + + for (ob = main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_SOUND) { + bSoundActuator *sAct = (bSoundActuator*) act->data; + if (sAct->sound) { + sound = blo_do_versions_newlibadr(fd, lib, sAct->sound); + sAct->flag = sound->flags & SOUND_FLAGS_3D ? ACT_SND_3D_SOUND : 0; + sAct->pitch = sound->pitch; + sAct->volume = sound->volume; + sAct->sound3D.reference_distance = sound->distance; + sAct->sound3D.max_gain = sound->max_gain; + sAct->sound3D.min_gain = sound->min_gain; + sAct->sound3D.rolloff_factor = sound->attenuation; + } + else { + sAct->sound3D.reference_distance = 1.0f; + sAct->volume = 1.0f; + sAct->sound3D.max_gain = 1.0f; + sAct->sound3D.rolloff_factor = 1.0f; + } + sAct->sound3D.cone_inner_angle = 360.0f; + sAct->sound3D.cone_outer_angle = 360.0f; + sAct->sound3D.max_distance = FLT_MAX; + } + } + } + + for (scene = main->scene.first; scene; scene = scene->id.next) { + if (scene->ed && scene->ed->seqbasep) { + SEQ_BEGIN (scene->ed, seq) + { + if (seq->type == SEQ_HD_SOUND) { + char str[FILE_MAX]; + BLI_join_dirfile(str, sizeof(str), seq->strip->dir, seq->strip->stripdata->name); + BLI_path_abs(str, main->name); + seq->sound = sound_new_file(main, str); + } + /* don't know, if anybody used that + * this way, but just in case, upgrade + * to new way... */ + if ((seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) && + !(seq->flag & SEQ_USE_PROXY_CUSTOM_DIR)) + { + + BLI_snprintf(seq->strip->proxy->dir, + FILE_MAXDIR, "%s/BL_proxy", + seq->strip->dir); + } + } + SEQ_END + } + } + + for (screen= main->screen.first; screen; screen= screen->id.next) { + do_versions_windowmanager_2_50(screen); + do_versions_gpencil_2_50(main, screen); + } + + /* shader, composite and texture node trees have id.name empty, put something in + * to have them show in RNA viewer and accessible otherwise. + */ + for (ma= main->mat.first; ma; ma= ma->id.next) { + if (ma->nodetree && ma->nodetree->id.name[0] == '\0') + strcpy(ma->nodetree->id.name, "NTShader Nodetree"); + + /* which_output 0 is now "not specified" */ + for (a=0; a<MAX_MTEX; a++) { + if (ma->mtex[a]) { + tx= blo_do_versions_newlibadr(fd, lib, ma->mtex[a]->tex); + if (tx && tx->use_nodes) + ma->mtex[a]->which_output++; + } + } + } + /* and composite trees */ + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->nodetree && sce->nodetree->id.name[0] == '\0') + strcpy(sce->nodetree->id.name, "NTCompositing Nodetree"); + + /* move to cameras */ + if (sce->r.mode & R_PANORAMA) { + for (base=sce->base.first; base; base=base->next) { + ob= blo_do_versions_newlibadr(fd, lib, base->object); + + if (ob->type == OB_CAMERA && !ob->id.lib) { + cam= blo_do_versions_newlibadr(fd, lib, ob->data); + cam->flag |= CAM_PANORAMA; + } + } + + sce->r.mode &= ~R_PANORAMA; + } + } + /* and texture trees */ + for (tx= main->tex.first; tx; tx= tx->id.next) { + bNode *node; + + if (tx->nodetree) { + if (tx->nodetree->id.name[0] == '\0') + strcpy(tx->nodetree->id.name, "NTTexture Nodetree"); + + /* which_output 0 is now "not specified" */ + for (node=tx->nodetree->nodes.first; node; node=node->next) + if (node->type == TEX_NODE_OUTPUT) + node->custom1++; + } + } + + /* copy standard draw flag to meshes(used to be global, is not available here) */ + for (me= main->mesh.first; me; me= me->id.next) { + me->drawflag= ME_DRAWEDGES|ME_DRAWFACES|ME_DRAWCREASES; + } + + /* particle draw and render types */ + for (part= main->particle.first; part; part= part->id.next) { + if (part->draw_as) { + if (part->draw_as == PART_DRAW_DOT) { + part->ren_as = PART_DRAW_HALO; + part->draw_as = PART_DRAW_REND; + } + else if (part->draw_as <= PART_DRAW_AXIS) { + part->ren_as = PART_DRAW_HALO; + } + else { + part->ren_as = part->draw_as; + part->draw_as = PART_DRAW_REND; + } + } + part->path_end = 1.0f; + part->clength = 1.0f; + } + /* set old pointcaches to have disk cache flag */ + for (ob = main->object.first; ob; ob= ob->id.next) { + + //BKE_ptcache_ids_from_object(&pidlist, ob); + + //for (pid=pidlist.first; pid; pid=pid->next) + // pid->cache->flag |= PTCACHE_DISK_CACHE; + + //BLI_freelistN(&pidlist); + } + + /* type was a mixed flag & enum. move the 2d flag elsewhere */ + for (cu = main->curve.first; cu; cu= cu->id.next) { + Nurb *nu; + + for (nu= cu->nurb.first; nu; nu= nu->next) { + nu->flag |= (nu->type & CU_2D); + nu->type &= CU_TYPE; + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 1)) { + Object *ob; + Material *ma; + Tex *tex; + Scene *sce; + ToolSettings *ts; + //PTCacheID *pid; + //ListBase pidlist; + + for (ob = main->object.first; ob; ob = ob->id.next) { + //BKE_ptcache_ids_from_object(&pidlist, ob); + + //for (pid=pidlist.first; pid; pid=pid->next) { + // if (pid->ptcaches->first == NULL) + // pid->ptcaches->first = pid->ptcaches->last = pid->cache; + //} + + //BLI_freelistN(&pidlist); + + if (ob->type == OB_MESH) { + Mesh *me = blo_do_versions_newlibadr(fd, lib, ob->data); + void *olddata = ob->data; + ob->data = me; + + /* XXX - library meshes crash on loading most yoFrankie levels, + * the multires pointer gets invalid - Campbell */ + if (me && me->id.lib==NULL && me->mr && me->mr->level_count > 1) { + multires_load_old(ob, me); + } + + ob->data = olddata; + } + + if (ob->totcol && ob->matbits == NULL) { + int a; + + ob->matbits= MEM_callocN(sizeof(char)*ob->totcol, "ob->matbits"); + for (a=0; a<ob->totcol; a++) + ob->matbits[a]= ob->colbits & (1<<a); + } + } + + /* texture filter */ + for (tex = main->tex.first; tex; tex = tex->id.next) { + if (tex->afmax == 0) + tex->afmax= 8; + } + + for (ma = main->mat.first; ma; ma = ma->id.next) { + int a; + if (ma->mode & MA_WIRE) { + ma->material_type= MA_TYPE_WIRE; + ma->mode &= ~MA_WIRE; + } + if (ma->mode & MA_HALO) { + ma->material_type= MA_TYPE_HALO; + ma->mode &= ~MA_HALO; + } + + if (ma->mode & (MA_ZTRANSP|MA_RAYTRANSP)) { + ma->mode |= MA_TRANSP; + } + else { + /* ma->mode |= MA_ZTRANSP; */ /* leave ztransp as is even if its not used [#28113] */ + ma->mode &= ~MA_TRANSP; + } + + /* set new bump for unused slots */ + for (a=0; a<MAX_MTEX; a++) { + if (ma->mtex[a]) { + tex= ma->mtex[a]->tex; + if (!tex) { + ma->mtex[a]->texflag |= MTEX_3TAP_BUMP; + ma->mtex[a]->texflag |= MTEX_BUMP_OBJECTSPACE; + } + else { + tex= (Tex*)blo_do_versions_newlibadr(fd, ma->id.lib, tex); + if (tex && tex->type == 0) { /* invalid type */ + ma->mtex[a]->texflag |= MTEX_3TAP_BUMP; + ma->mtex[a]->texflag |= MTEX_BUMP_OBJECTSPACE; + } + } + } + } + + /* volume rendering settings */ + if (ma->vol.stepsize < 0.0001f) { + ma->vol.density = 1.0f; + ma->vol.emission = 0.0f; + ma->vol.scattering = 1.0f; + ma->vol.emission_col[0] = ma->vol.emission_col[1] = ma->vol.emission_col[2] = 1.0f; + ma->vol.density_scale = 1.0f; + ma->vol.depth_cutoff = 0.01f; + ma->vol.stepsize_type = MA_VOL_STEP_RANDOMIZED; + ma->vol.stepsize = 0.2f; + ma->vol.shade_type = MA_VOL_SHADE_SHADED; + ma->vol.shadeflag |= MA_VOL_PRECACHESHADING; + ma->vol.precache_resolution = 50; + } + } + + for (sce = main->scene.first; sce; sce = sce->id.next) { + ts= sce->toolsettings; + if (ts->normalsize == 0.0f || !ts->uv_selectmode || ts->vgroup_weight == 0.0f) { + ts->normalsize= 0.1f; + ts->selectmode= SCE_SELECT_VERTEX; + + /* autokeying - setting should be taken from the user-prefs + * but the userprefs version may not have correct flags set + * (i.e. will result in blank box when enabled) + */ + ts->autokey_mode= U.autokey_mode; + if (ts->autokey_mode == 0) + ts->autokey_mode= 2; /* 'add/replace' but not on */ + ts->uv_selectmode= UV_SELECT_VERTEX; + ts->vgroup_weight= 1.0f; + } + + /* Game Settings */ + //Dome + sce->gm.dome.angle = sce->r.domeangle; + sce->gm.dome.mode = sce->r.domemode; + sce->gm.dome.res = sce->r.domeres; + sce->gm.dome.resbuf = sce->r.domeresbuf; + sce->gm.dome.tilt = sce->r.dometilt; + sce->gm.dome.warptext = sce->r.dometext; + + //Stand Alone + sce->gm.playerflag |= (sce->r.fullscreen?GAME_PLAYER_FULLSCREEN:0); + sce->gm.xplay = sce->r.xplay; + sce->gm.yplay = sce->r.yplay; + sce->gm.freqplay = sce->r.freqplay; + sce->gm.depth = sce->r.depth; + sce->gm.attrib = sce->r.attrib; + + //Stereo + sce->gm.stereomode = sce->r.stereomode; + /* reassigning stereomode NO_STEREO and DOME to a separeted flag*/ + if (sce->gm.stereomode == 1) { //1 = STEREO_NOSTEREO + sce->gm.stereoflag = STEREO_NOSTEREO; + sce->gm.stereomode = STEREO_ANAGLYPH; + } + else if (sce->gm.stereomode == 8) { //8 = STEREO_DOME + sce->gm.stereoflag = STEREO_DOME; + sce->gm.stereomode = STEREO_ANAGLYPH; + } + else + sce->gm.stereoflag = STEREO_ENABLED; + + //Framing + sce->gm.framing = sce->framing; + sce->gm.xplay = sce->r.xplay; + sce->gm.yplay = sce->r.yplay; + sce->gm.freqplay= sce->r.freqplay; + sce->gm.depth= sce->r.depth; + + //Physic (previously stored in world) + sce->gm.gravity =9.8f; + sce->gm.physicsEngine= WOPHY_BULLET;// Bullet by default + sce->gm.mode = WO_DBVT_CULLING; // DBVT culling by default + sce->gm.occlusionRes = 128; + sce->gm.ticrate = 60; + sce->gm.maxlogicstep = 5; + sce->gm.physubstep = 1; + sce->gm.maxphystep = 5; + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 2)) { + Scene *sce; + Object *ob; + + for (sce = main->scene.first; sce; sce = sce->id.next) { + if (fd->fileflags & G_FILE_ENABLE_ALL_FRAMES) + sce->gm.flag |= GAME_ENABLE_ALL_FRAMES; + if (fd->fileflags & G_FILE_SHOW_DEBUG_PROPS) + sce->gm.flag |= GAME_SHOW_DEBUG_PROPS; + if (fd->fileflags & G_FILE_SHOW_FRAMERATE) + sce->gm.flag |= GAME_SHOW_FRAMERATE; + if (fd->fileflags & G_FILE_SHOW_PHYSICS) + sce->gm.flag |= GAME_SHOW_PHYSICS; + if (fd->fileflags & G_FILE_GLSL_NO_SHADOWS) + sce->gm.flag |= GAME_GLSL_NO_SHADOWS; + if (fd->fileflags & G_FILE_GLSL_NO_SHADERS) + sce->gm.flag |= GAME_GLSL_NO_SHADERS; + if (fd->fileflags & G_FILE_GLSL_NO_RAMPS) + sce->gm.flag |= GAME_GLSL_NO_RAMPS; + if (fd->fileflags & G_FILE_GLSL_NO_NODES) + sce->gm.flag |= GAME_GLSL_NO_NODES; + if (fd->fileflags & G_FILE_GLSL_NO_EXTRA_TEX) + sce->gm.flag |= GAME_GLSL_NO_EXTRA_TEX; + if (fd->fileflags & G_FILE_IGNORE_DEPRECATION_WARNINGS) + sce->gm.flag |= GAME_IGNORE_DEPRECATION_WARNINGS; + + if (fd->fileflags & G_FILE_GAME_MAT_GLSL) + sce->gm.matmode= GAME_MAT_GLSL; + else if (fd->fileflags & G_FILE_GAME_MAT) + sce->gm.matmode= GAME_MAT_MULTITEX; + else + sce->gm.matmode= GAME_MAT_TEXFACE; + + sce->gm.flag |= GAME_DISPLAY_LISTS; + } + + for (ob = main->object.first; ob; ob = ob->id.next) { + if (ob->flag & 8192) // OB_POSEMODE = 8192 + ob->mode |= OB_MODE_POSE; + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 4)) { + Scene *sce; + Object *ob; + Material *ma; + Lamp *la; + World *wo; + Tex *tex; + ParticleSettings *part; + int do_gravity = 0; + + for (sce = main->scene.first; sce; sce = sce->id.next) + if (sce->unit.scale_length == 0.0f) + sce->unit.scale_length= 1.0f; + + for (ob = main->object.first; ob; ob = ob->id.next) { + /* fluid-sim stuff */ + FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); + if (fluidmd) fluidmd->fss->fmd = fluidmd; + + /* rotation modes were added, but old objects would now default to being 'quaternion based' */ + ob->rotmode= ROT_MODE_EUL; + } + + for (ma = main->mat.first; ma; ma=ma->id.next) { + if (ma->vol.reflection == 0.f) { + ma->vol.reflection = 1.f; + ma->vol.transmission_col[0] = ma->vol.transmission_col[1] = ma->vol.transmission_col[2] = 1.0f; + ma->vol.reflection_col[0] = ma->vol.reflection_col[1] = ma->vol.reflection_col[2] = 1.0f; + } + + do_version_mtex_factor_2_50(ma->mtex, ID_MA); + } + + for (la = main->lamp.first; la; la=la->id.next) + do_version_mtex_factor_2_50(la->mtex, ID_LA); + + for (wo = main->world.first; wo; wo=wo->id.next) + do_version_mtex_factor_2_50(wo->mtex, ID_WO); + + for (tex = main->tex.first; tex; tex=tex->id.next) + if (tex->vd) + if (tex->vd->extend == 0) + tex->vd->extend = TEX_CLIP; + + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->audio.main == 0.0f) + sce->audio.main = 1.0f; + + sce->r.ffcodecdata.audio_mixrate = sce->audio.mixrate; + sce->r.ffcodecdata.audio_volume = sce->audio.main; + sce->audio.distance_model = 2; + sce->audio.doppler_factor = 1.0f; + sce->audio.speed_of_sound = 343.3f; + } + + /* Add default gravity to scenes */ + for (sce= main->scene.first; sce; sce= sce->id.next) { + if ((sce->physics_settings.flag & PHYS_GLOBAL_GRAVITY) == 0 && + len_v3(sce->physics_settings.gravity) == 0.0f) + { + sce->physics_settings.gravity[0] = sce->physics_settings.gravity[1] = 0.0f; + sce->physics_settings.gravity[2] = -9.81f; + sce->physics_settings.flag = PHYS_GLOBAL_GRAVITY; + do_gravity = 1; + } + } + + /* Assign proper global gravity weights for dynamics (only z-coordinate is taken into account) */ + if (do_gravity) for (part= main->particle.first; part; part= part->id.next) + part->effector_weights->global_gravity = part->acc[2]/-9.81f; + + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + + if (do_gravity) { + for (md= ob->modifiers.first; md; md= md->next) { + ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth); + if (clmd) + clmd->sim_parms->effector_weights->global_gravity = clmd->sim_parms->gravity[2]/-9.81f; + } + + if (ob->soft) + ob->soft->effector_weights->global_gravity = ob->soft->grav/9.81f; + } + + /* Normal wind shape is plane */ + if (ob->pd) { + if (ob->pd->forcefield == PFIELD_WIND) + ob->pd->shape = PFIELD_SHAPE_PLANE; + + if (ob->pd->flag & PFIELD_PLANAR) + ob->pd->shape = PFIELD_SHAPE_PLANE; + else if (ob->pd->flag & PFIELD_SURFACE) + ob->pd->shape = PFIELD_SHAPE_SURFACE; + + ob->pd->flag |= PFIELD_DO_LOCATION; + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 6)) { + Object *ob; + Lamp *la; + + /* New variables for axis-angle rotations and/or quaternion rotations were added, and need proper initialization */ + for (ob= main->object.first; ob; ob= ob->id.next) { + /* new variables for all objects */ + ob->quat[0]= 1.0f; + ob->rotAxis[1]= 1.0f; + + /* bones */ + if (ob->pose) { + bPoseChannel *pchan; + + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + /* just need to initalise rotation axis properly... */ + pchan->rotAxis[1]= 1.0f; + } + } + } + + for (la = main->lamp.first; la; la=la->id.next) + la->compressthresh= 0.05f; + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 7)) { + Mesh *me; + Nurb *nu; + Lattice *lt; + Curve *cu; + Key *key; + float *data; + int a, tot; + + /* shape keys are no longer applied to the mesh itself, but rather + * to the derivedmesh/displist, so here we ensure that the basis + * shape key is always set in the mesh coordinates. */ + + for (me= main->mesh.first; me; me= me->id.next) { + if ((key = blo_do_versions_newlibadr(fd, lib, me->key)) && key->refkey) { + data= key->refkey->data; + tot= MIN2(me->totvert, key->refkey->totelem); + + for (a=0; a<tot; a++, data+=3) + copy_v3_v3(me->mvert[a].co, data); + } + } + + for (lt= main->latt.first; lt; lt= lt->id.next) { + if ((key = blo_do_versions_newlibadr(fd, lib, lt->key)) && key->refkey) { + data= key->refkey->data; + tot= MIN2(lt->pntsu*lt->pntsv*lt->pntsw, key->refkey->totelem); + + for (a=0; a<tot; a++, data+=3) + copy_v3_v3(lt->def[a].vec, data); + } + } + + for (cu= main->curve.first; cu; cu= cu->id.next) { + if ((key = blo_do_versions_newlibadr(fd, lib, cu->key)) && key->refkey) { + data= key->refkey->data; + + for (nu=cu->nurb.first; nu; nu=nu->next) { + if (nu->bezt) { + BezTriple *bezt = nu->bezt; + + for (a=0; a<nu->pntsu; a++, bezt++) { + copy_v3_v3(bezt->vec[0], data); data+=3; + copy_v3_v3(bezt->vec[1], data); data+=3; + copy_v3_v3(bezt->vec[2], data); data+=3; + bezt->alfa= *data; data++; + } + } + else if (nu->bp) { + BPoint *bp = nu->bp; + + for (a=0; a<nu->pntsu*nu->pntsv; a++, bp++) { + copy_v3_v3(bp->vec, data); data+=3; + bp->alfa= *data; data++; + } + } + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 8)) { + { + Scene *sce= main->scene.first; + while (sce) { + if (sce->r.frame_step==0) + sce->r.frame_step= 1; + if (sce->r.mblur_samples==0) + sce->r.mblur_samples = sce->r.osa; + + if (sce->ed && sce->ed->seqbase.first) { + do_versions_seq_unique_name_all_strips( + sce, &sce->ed->seqbase); + } + + sce= sce->id.next; + } + } + { + /* ensure all nodes have unique names */ + bNodeTree *ntree= main->nodetree.first; + while (ntree) { + bNode *node=ntree->nodes.first; + + while (node) { + nodeUniqueName(ntree, node); + node= node->next; + } + + ntree= ntree->id.next; + } + } + { + Object *ob=main->object.first; + while (ob) { + /* shaded mode disabled for now */ + if (ob->dt == OB_MATERIAL) ob->dt = OB_TEXTURE; + ob=ob->id.next; + } + } + + { + bScreen *screen; + ScrArea *sa; + SpaceLink *sl; + + for (screen= main->screen.first; screen; screen= screen->id.next) { + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d = (View3D *)sl; + if (v3d->drawtype == OB_MATERIAL) v3d->drawtype = OB_SOLID; + } + } + } + } + } + + /* only convert old 2.50 files with color management */ + if (main->versionfile == 250) { + Scene *sce=main->scene.first; + Material *ma=main->mat.first; + World *wo=main->world.first; + Tex *tex=main->tex.first; + int i, convert=0; + + /* convert to new color management system: + * while previously colors were stored as srgb, + * now they are stored as linear internally, + * with screen gamma correction in certain places in the UI. */ + + /* don't know what scene is active, so we'll convert if any scene has it enabled... */ + while (sce) { + if (sce->r.color_mgt_flag & R_COLOR_MANAGEMENT) + convert=1; + sce=sce->id.next; + } + + if (convert) { + while (ma) { + if (ma->ramp_col) { + ColorBand *band = (ColorBand *)ma->ramp_col; + for (i=0; i<band->tot; i++) { + CBData *data = band->data + i; + srgb_to_linearrgb_v3_v3(&data->r, &data->r); + } + } + if (ma->ramp_spec) { + ColorBand *band = (ColorBand *)ma->ramp_spec; + for (i=0; i<band->tot; i++) { + CBData *data = band->data + i; + srgb_to_linearrgb_v3_v3(&data->r, &data->r); + } + } + + srgb_to_linearrgb_v3_v3(&ma->r, &ma->r); + srgb_to_linearrgb_v3_v3(&ma->specr, &ma->specr); + srgb_to_linearrgb_v3_v3(&ma->mirr, &ma->mirr); + srgb_to_linearrgb_v3_v3(ma->sss_col, ma->sss_col); + ma=ma->id.next; + } + + while (tex) { + if (tex->coba) { + ColorBand *band = (ColorBand *)tex->coba; + for (i=0; i<band->tot; i++) { + CBData *data = band->data + i; + srgb_to_linearrgb_v3_v3(&data->r, &data->r); + } + } + tex=tex->id.next; + } + + while (wo) { + srgb_to_linearrgb_v3_v3(&wo->ambr, &wo->ambr); + srgb_to_linearrgb_v3_v3(&wo->horr, &wo->horr); + srgb_to_linearrgb_v3_v3(&wo->zenr, &wo->zenr); + wo=wo->id.next; + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 9)) { + Scene *sce; + Mesh *me; + Object *ob; + + for (sce=main->scene.first; sce; sce=sce->id.next) + if (!sce->toolsettings->particle.selectmode) + sce->toolsettings->particle.selectmode= SCE_SELECT_PATH; + + if (main->versionfile == 250 && main->subversionfile > 1) { + for (me=main->mesh.first; me; me=me->id.next) + multires_load_old_250(me); + + for (ob=main->object.first; ob; ob=ob->id.next) { + MultiresModifierData *mmd = (MultiresModifierData *)modifiers_findByType(ob, eModifierType_Multires); + + if (mmd) { + mmd->totlvl--; + mmd->lvl--; + mmd->sculptlvl= mmd->lvl; + mmd->renderlvl= mmd->lvl; + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 10)) { + Object *ob; + + /* properly initialize hair clothsim data on old files */ + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md= ob->modifiers.first; md; md= md->next) { + if (md->type == eModifierType_Cloth) { + ClothModifierData *clmd = (ClothModifierData *)md; + if (clmd->sim_parms->velocity_smooth < 0.01f) + clmd->sim_parms->velocity_smooth = 0.f; + } + } + } + } + + /* fix bad area setup in subversion 10 */ + if (main->versionfile == 250 && main->subversionfile == 10) { + /* fix for new view type in sequencer */ + bScreen *screen; + ScrArea *sa; + SpaceLink *sl; + + + /* remove all preview window in wrong spaces */ + for (screen= main->screen.first; screen; screen= screen->id.next) { + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype!=SPACE_SEQ) { + ARegion *ar; + ListBase *regionbase; + + if (sl == sa->spacedata.first) { + regionbase = &sa->regionbase; + } + else { + regionbase = &sl->regionbase; + } + + + for ( ar = regionbase->first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_PREVIEW) + break; + } + + if (ar && (ar->regiontype == RGN_TYPE_PREVIEW)) { + SpaceType *st= BKE_spacetype_from_id(SPACE_SEQ); + BKE_area_region_free(st, ar); + BLI_freelinkN(regionbase, ar); + } + } + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 11)) { + { + /* fix for new view type in sequencer */ + bScreen *screen; + ScrArea *sa; + SpaceLink *sl; + + + for (screen= main->screen.first; screen; screen= screen->id.next) { + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_SEQ) { + ARegion *ar; + ARegion *ar_main; + ListBase *regionbase; + SpaceSeq *sseq = (SpaceSeq *)sl; + + if (sl == sa->spacedata.first) { + regionbase = &sa->regionbase; + } + else { + regionbase = &sl->regionbase; + } + + if (sseq->view == 0) sseq->view = SEQ_VIEW_SEQUENCE; + if (sseq->mainb == 0) sseq->mainb = SEQ_DRAW_IMG_IMBUF; + + ar_main = (ARegion*)regionbase->first; + for (; ar_main; ar_main = ar_main->next) { + if (ar_main->regiontype == RGN_TYPE_WINDOW) + break; + } + ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer"); + BLI_insertlinkbefore(regionbase, ar_main, ar); + sequencer_init_preview_region(ar); + } + } + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 12)) { + Scene *sce; + Object *ob; + Brush *brush; + Material *ma; + + /* game engine changes */ + for (sce = main->scene.first; sce; sce = sce->id.next) { + sce->gm.eyeseparation = 0.10f; + } + + /* anim viz changes */ + for (ob= main->object.first; ob; ob= ob->id.next) { + /* initialize object defaults */ + animviz_settings_init(&ob->avs); + + /* if armature, copy settings for pose from armature data + * performing initialization where appropriate + */ + if (ob->pose && ob->data) { + bArmature *arm= blo_do_versions_newlibadr(fd, lib, ob->data); + if (arm) { /* XXX - why does this fail in some cases? */ + bAnimVizSettings *avs= &ob->pose->avs; + + /* ghosting settings ---------------- */ + /* ranges */ + avs->ghost_bc= avs->ghost_ac= arm->ghostep; + + avs->ghost_sf= arm->ghostsf; + avs->ghost_ef= arm->ghostef; + if ((avs->ghost_sf == avs->ghost_ef) && (avs->ghost_sf == 0)) { + avs->ghost_sf= 1; + avs->ghost_ef= 100; + } + + /* type */ + if (arm->ghostep == 0) + avs->ghost_type= GHOST_TYPE_NONE; + else + avs->ghost_type= arm->ghosttype + 1; + + /* stepsize */ + avs->ghost_step= arm->ghostsize; + if (avs->ghost_step == 0) + avs->ghost_step= 1; + + /* path settings --------------------- */ + /* ranges */ + avs->path_bc= arm->pathbc; + avs->path_ac= arm->pathac; + if ((avs->path_bc == avs->path_ac) && (avs->path_bc == 0)) + avs->path_bc= avs->path_ac= 10; + + avs->path_sf= arm->pathsf; + avs->path_ef= arm->pathef; + if ((avs->path_sf == avs->path_ef) && (avs->path_sf == 0)) { + avs->path_sf= 1; + avs->path_ef= 250; + } + + /* flags */ + if (arm->pathflag & ARM_PATH_FNUMS) + avs->path_viewflag |= MOTIONPATH_VIEW_FNUMS; + if (arm->pathflag & ARM_PATH_KFRAS) + avs->path_viewflag |= MOTIONPATH_VIEW_KFRAS; + if (arm->pathflag & ARM_PATH_KFNOS) + avs->path_viewflag |= MOTIONPATH_VIEW_KFNOS; + + /* bake flags */ + if (arm->pathflag & ARM_PATH_HEADS) + avs->path_bakeflag |= MOTIONPATH_BAKE_HEADS; + + /* type */ + if (arm->pathflag & ARM_PATH_ACFRA) + avs->path_type = MOTIONPATH_TYPE_ACFRA; + + /* stepsize */ + avs->path_step= arm->pathsize; + if (avs->path_step == 0) + avs->path_step= 1; + } + else + animviz_settings_init(&ob->pose->avs); + } + } + + /* brush texture changes */ + for (brush= main->brush.first; brush; brush= brush->id.next) { + default_mtex(&brush->mtex); + } + + for (ma= main->mat.first; ma; ma= ma->id.next) { + if (ma->vol.ms_spread < 0.0001f) { + ma->vol.ms_spread = 0.2f; + ma->vol.ms_diff = 1.f; + ma->vol.ms_intensity = 1.f; + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 13)) { + /* NOTE: if you do more conversion, be sure to do it outside of this and + * increase subversion again, otherwise it will not be correct */ + Object *ob; + + /* convert degrees to radians for internal use */ + for (ob=main->object.first; ob; ob=ob->id.next) { + bPoseChannel *pchan; + + do_version_constraints_radians_degrees_250(&ob->constraints); + + if (ob->pose) { + for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { + pchan->limitmin[0] *= (float)(M_PI/180.0); + pchan->limitmin[1] *= (float)(M_PI/180.0); + pchan->limitmin[2] *= (float)(M_PI/180.0); + pchan->limitmax[0] *= (float)(M_PI/180.0); + pchan->limitmax[1] *= (float)(M_PI/180.0); + pchan->limitmax[2] *= (float)(M_PI/180.0); + + do_version_constraints_radians_degrees_250(&pchan->constraints); + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 14)) { + /* fix for bad View2D extents for Animation Editors */ + bScreen *screen; + ScrArea *sa; + SpaceLink *sl; + + for (screen= main->screen.first; screen; screen= screen->id.next) { + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + ListBase *regionbase; + ARegion *ar; + + if (sl == sa->spacedata.first) + regionbase = &sa->regionbase; + else + regionbase = &sl->regionbase; + + if (ELEM(sl->spacetype, SPACE_ACTION, SPACE_NLA)) { + for (ar = (ARegion*)regionbase->first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + ar->v2d.cur.ymax = ar->v2d.tot.ymax = 0.0f; + ar->v2d.cur.ymin = ar->v2d.tot.ymin = (float)(-sa->winy) / 3.0f; + } + } + } + } + } + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 15)) { + World *wo; + Material *ma; + + /* ambient default from 0.5f to 1.0f */ + for (ma= main->mat.first; ma; ma=ma->id.next) + ma->amb *= 2.0f; + + for (wo= main->world.first; wo; wo=wo->id.next) { + /* ao splitting into ao/env/indirect */ + wo->ao_env_energy= wo->aoenergy; + wo->aoenergy= 1.0f; + + if (wo->ao_indirect_bounces == 0) + wo->ao_indirect_bounces= 1; + else + wo->mode |= WO_INDIRECT_LIGHT; + + if (wo->aomix == WO_AOSUB) + wo->ao_env_energy= -wo->ao_env_energy; + else if (wo->aomix == WO_AOADDSUB) + wo->mode |= WO_AMB_OCC; + + wo->aomix= WO_AOMUL; + + /* ambient default from 0.5f to 1.0f */ + mul_v3_fl(&wo->ambr, 0.5f); + wo->ao_env_energy *= 0.5f; + } + } + + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 17)) { + Scene *sce; + Sequence *seq; + Material *ma; + + /* initialize to sane default so toggling on border shows something */ + for (sce = main->scene.first; sce; sce = sce->id.next) { + if (sce->r.border.xmin == 0.0f && sce->r.border.ymin == 0.0f && + sce->r.border.xmax == 0.0f && sce->r.border.ymax == 0.0f) { + sce->r.border.xmin = 0.0f; + sce->r.border.ymin = 0.0f; + sce->r.border.xmax = 1.0f; + sce->r.border.ymax = 1.0f; + } + + if ((sce->r.ffcodecdata.flags & FFMPEG_MULTIPLEX_AUDIO) == 0) + sce->r.ffcodecdata.audio_codec = 0x0; // CODEC_ID_NONE + + SEQ_BEGIN (sce->ed, seq) + { + seq->volume = 1.0f; + } + SEQ_END + } + + /* particle brush strength factor was changed from int to float */ + for (sce= main->scene.first; sce; sce=sce->id.next) { + ParticleEditSettings *pset= &sce->toolsettings->particle; + int a; + + for (a=0; a<PE_TOT_BRUSH; a++) + pset->brush[a].strength /= 100.0f; + } + + for (ma = main->mat.first; ma; ma=ma->id.next) + if (ma->mode & MA_TRACEBLE) + ma->shade_flag |= MA_APPROX_OCCLUSION; + + /* sequencer changes */ + { + bScreen *screen; + ScrArea *sa; + SpaceLink *sl; + + for (screen= main->screen.first; screen; screen= screen->id.next) { + for (sa= screen->areabase.first; sa; sa= sa->next) { + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_SEQ) { + ARegion *ar_preview; + ListBase *regionbase; + + if (sl == sa->spacedata.first) { + regionbase = &sa->regionbase; + } + else { + regionbase = &sl->regionbase; + } + + ar_preview = (ARegion*)regionbase->first; + for (; ar_preview; ar_preview = ar_preview->next) { + if (ar_preview->regiontype == RGN_TYPE_PREVIEW) + break; + } + if (ar_preview && (ar_preview->regiontype == RGN_TYPE_PREVIEW)) { + sequencer_init_preview_region(ar_preview); + } + } + } + } + } + } /* sequencer changes */ + } + + if (main->versionfile <= 251) { /* 2.5.1 had no subversions */ + bScreen *sc; + + /* Blender 2.5.2 - subversion 0 introduced a new setting: V3D_RENDER_OVERRIDE. + * This bit was used in the past for V3D_TRANSFORM_SNAP, which is now deprecated. + * Here we clear it for old files so they don't come in with V3D_RENDER_OVERRIDE set, + * which would cause cameras, lamps, etc to become invisible */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D* v3d = (View3D *)sl; + v3d->flag2 &= ~V3D_RENDER_OVERRIDE; + } + } + } + } + } + + if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 1)) { + Brush *brush; + Object *ob; + Scene *scene; + bNodeTree *ntree; + + for (brush= main->brush.first; brush; brush= brush->id.next) { + if (brush->curve) brush->curve->preset = CURVE_PRESET_SMOOTH; + } + + /* properly initialize active flag for fluidsim modifiers */ + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md= ob->modifiers.first; md; md= md->next) { + if (md->type == eModifierType_Fluidsim) { + FluidsimModifierData *fmd = (FluidsimModifierData *)md; + fmd->fss->flag |= OB_FLUIDSIM_ACTIVE; + fmd->fss->flag |= OB_FLUIDSIM_OVERRIDE_TIME; + } + } + } + + /* adjustment to color balance node values */ + for (scene= main->scene.first; scene; scene= scene->id.next) { + if (scene->nodetree) { + bNode *node=scene->nodetree->nodes.first; + + while (node) { + if (node->type == CMP_NODE_COLORBALANCE) { + NodeColorBalance *n= (NodeColorBalance *)node->storage; + n->lift[0] += 1.f; + n->lift[1] += 1.f; + n->lift[2] += 1.f; + } + node= node->next; + } + } + } + /* check inside node groups too */ + for (ntree= main->nodetree.first; ntree; ntree=ntree->id.next) { + bNode *node=ntree->nodes.first; + + while (node) { + if (node->type == CMP_NODE_COLORBALANCE) { + NodeColorBalance *n= (NodeColorBalance *)node->storage; + n->lift[0] += 1.f; + n->lift[1] += 1.f; + n->lift[2] += 1.f; + } + node= node->next; + } + } + } + + /* old-track -> constraints (this time we're really doing it!) */ + if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 2)) { + Object *ob; + + for (ob = main->object.first; ob; ob = ob->id.next) + blo_do_version_old_trackto_to_constraints(ob); + } + + if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 5)) { + bScreen *sc; + + /* Image editor scopes */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IMAGE) { + SpaceImage *sima = (SpaceImage *)sl; + scopes_new(&sima->scopes); + } + } + } + } + } + + + if (main->versionfile < 253) { + Object *ob; + Scene *scene; + bScreen *sc; + Tex *tex; + Brush *brush; + + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype == SPACE_NODE) { + SpaceNode *snode= (SpaceNode *)sl; + ListBase *regionbase; + ARegion *ar; + + if (sl == sa->spacedata.first) + regionbase = &sa->regionbase; + else + regionbase = &sl->regionbase; + + if (snode->v2d.minzoom > 0.09f) + snode->v2d.minzoom= 0.09f; + if (snode->v2d.maxzoom < 2.31f) + snode->v2d.maxzoom= 2.31f; + + for (ar= regionbase->first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + if (ar->v2d.minzoom > 0.09f) + ar->v2d.minzoom= 0.09f; + if (ar->v2d.maxzoom < 2.31f) + ar->v2d.maxzoom= 2.31f; + } + } + } + else if (sl->spacetype == SPACE_TIME) { + SpaceTime *stime= (SpaceTime *)sl; + + /* enable all cache display */ + stime->cache_display |= TIME_CACHE_DISPLAY; + stime->cache_display |= (TIME_CACHE_SOFTBODY|TIME_CACHE_PARTICLES); + stime->cache_display |= (TIME_CACHE_CLOTH|TIME_CACHE_SMOKE|TIME_CACHE_DYNAMICPAINT); + } + } + } + } + + do_version_mdef_250(main); + + /* parent type to modifier */ + for (ob = main->object.first; ob; ob = ob->id.next) { + if (ob->parent) { + Object *parent= (Object *)blo_do_versions_newlibadr(fd, lib, ob->parent); + if (parent) { /* parent may not be in group */ + if (parent->type==OB_ARMATURE && ob->partype==PARSKEL) { + ArmatureModifierData *amd; + bArmature *arm= (bArmature *)blo_do_versions_newlibadr(fd, lib, parent->data); + + amd = (ArmatureModifierData*) modifier_new(eModifierType_Armature); + amd->object = ob->parent; + BLI_addtail((ListBase*)&ob->modifiers, amd); + amd->deformflag= arm->deformflag; + ob->partype = PAROBJECT; + } + else if (parent->type==OB_LATTICE && ob->partype==PARSKEL) { + LatticeModifierData *lmd; + + lmd = (LatticeModifierData*) modifier_new(eModifierType_Lattice); + lmd->object = ob->parent; + BLI_addtail((ListBase*)&ob->modifiers, lmd); + ob->partype = PAROBJECT; + } + else if (parent->type==OB_CURVE && ob->partype==PARCURVE) { + CurveModifierData *cmd; + + cmd = (CurveModifierData*) modifier_new(eModifierType_Curve); + cmd->object = ob->parent; + BLI_addtail((ListBase*)&ob->modifiers, cmd); + ob->partype = PAROBJECT; + } + } + } + } + + /* initialize scene active layer */ + for (scene= main->scene.first; scene; scene=scene->id.next) { + int i; + for (i=0; i<20; i++) { + if (scene->lay & (1<<i)) { + scene->layact= 1<<i; + break; + } + } + } + + for (tex= main->tex.first; tex; tex= tex->id.next) { + /* if youre picky, this isn't correct until we do a version bump + * since you could set saturation to be 0.0*/ + if (tex->saturation==0.0f) + tex->saturation= 1.0f; + } + + { + Curve *cu; + for (cu= main->curve.first; cu; cu= cu->id.next) { + cu->smallcaps_scale= 0.75f; + } + } + + for (scene= main->scene.first; scene; scene=scene->id.next) { + if (scene) { + Sequence *seq; + SEQ_BEGIN (scene->ed, seq) + { + if (seq->sat==0.0f) { + seq->sat= 1.0f; + } + } + SEQ_END + } + } + + /* GSOC 2010 Sculpt - New settings for Brush */ + + for (brush= main->brush.first; brush; brush= brush->id.next) { + /* Sanity Check */ + + // infinite number of dabs + if (brush->spacing == 0) + brush->spacing = 10; + + // will have no effect + if (brush->alpha == 0) + brush->alpha = 0.5f; + + // bad radius + if (brush->unprojected_radius == 0) + brush->unprojected_radius = 0.125f; + + // unusable size + if (brush->size == 0) + brush->size = 35; + + // can't see overlay + if (brush->texture_overlay_alpha == 0) + brush->texture_overlay_alpha = 33; + + // same as draw brush + if (brush->crease_pinch_factor == 0) + brush->crease_pinch_factor = 0.5f; + + // will sculpt no vertexes + if (brush->plane_trim == 0) + brush->plane_trim = 0.5f; + + // same as smooth stroke off + if (brush->smooth_stroke_radius == 0) + brush->smooth_stroke_radius= 75; + + // will keep cursor in one spot + if (brush->smooth_stroke_radius == 1) + brush->smooth_stroke_factor= 0.9f; + + // same as dots + if (brush->rate == 0) + brush->rate = 0.1f; + + /* New Settings */ + if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 5)) { + brush->flag |= BRUSH_SPACE_ATTEN; // explicitly enable adaptive space + + // spacing was originally in pixels, convert it to percentage for new version + // size should not be zero due to sanity check above + brush->spacing = (int)(100*((float)brush->spacing) / ((float)brush->size)); + + if (brush->add_col[0] == 0 && + brush->add_col[1] == 0 && + brush->add_col[2] == 0) + { + brush->add_col[0] = 1.00f; + brush->add_col[1] = 0.39f; + brush->add_col[2] = 0.39f; + } + + if (brush->sub_col[0] == 0 && + brush->sub_col[1] == 0 && + brush->sub_col[2] == 0) + { + brush->sub_col[0] = 0.39f; + brush->sub_col[1] = 0.39f; + brush->sub_col[2] = 1.00f; + } + } + } + } + + /* GSOC Sculpt 2010 - Sanity check on Sculpt/Paint settings */ + if (main->versionfile < 253) { + Scene *sce; + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->toolsettings->sculpt_paint_unified_alpha == 0) + sce->toolsettings->sculpt_paint_unified_alpha = 0.5f; + + if (sce->toolsettings->sculpt_paint_unified_unprojected_radius == 0) + sce->toolsettings->sculpt_paint_unified_unprojected_radius = 0.125f; + + if (sce->toolsettings->sculpt_paint_unified_size == 0) + sce->toolsettings->sculpt_paint_unified_size = 35; + } + } + + if (main->versionfile < 253 || (main->versionfile == 253 && main->subversionfile < 1)) { + Object *ob; + + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md= ob->modifiers.first; md; md= md->next) { + if (md->type == eModifierType_Smoke) { + SmokeModifierData *smd = (SmokeModifierData *)md; + + if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { + smd->domain->vorticity = 2.0f; + smd->domain->time_scale = 1.0f; + + if (!(smd->domain->flags & (1<<4))) + continue; + + /* delete old MOD_SMOKE_INITVELOCITY flag */ + smd->domain->flags &= ~(1<<4); + + /* for now just add it to all flow objects in the scene */ + { + Object *ob2; + for (ob2 = main->object.first; ob2; ob2 = ob2->id.next) { + ModifierData *md2; + for (md2= ob2->modifiers.first; md2; md2= md2->next) { + if (md2->type == eModifierType_Smoke) { + SmokeModifierData *smd2 = (SmokeModifierData *)md2; + + if ((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) { + smd2->flow->flags |= MOD_SMOKE_FLOW_INITVELOCITY; + } + } + } + } + } + + } + else if ((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) { + smd->flow->vel_multi = 1.0f; + } + + } + } + } + } + + if (main->versionfile < 255 || (main->versionfile == 255 && main->subversionfile < 1)) { + Brush *br; + ParticleSettings *part; + bScreen *sc; + Object *ob; + + for (br= main->brush.first; br; br= br->id.next) { + if (br->ob_mode==0) + br->ob_mode= OB_MODE_ALL_PAINT; + } + + for (part = main->particle.first; part; part = part->id.next) { + if (part->boids) + part->boids->pitch = 1.0f; + + part->flag &= ~PART_HAIR_REGROW; /* this was a deprecated flag before */ + part->kink_amp_clump = 1.f; /* keep old files looking similar */ + } + + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype == SPACE_INFO) { + SpaceInfo *sinfo= (SpaceInfo *)sl; + ARegion *ar; + + sinfo->rpt_mask= INFO_RPT_OP; + + for (ar= sa->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + ar->v2d.scroll = (V2D_SCROLL_RIGHT); + ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */ + ar->v2d.keepofs = V2D_LOCKOFS_X; + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); + ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS; + ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; + } + } + } + } + } + } + + /* fix rotation actuators for objects so they use real angles (radians) + * since before blender went opensource this strange scalar was used: (1 / 0.02) * 2 * math.pi/360 */ + for (ob= main->object.first; ob; ob= ob->id.next) { + bActuator *act= ob->actuators.first; + while (act) { + if (act->type==ACT_OBJECT) { + /* multiply velocity with 50 in old files */ + bObjectActuator *oa= act->data; + mul_v3_fl(oa->drot, 0.8726646259971648f); + } + act= act->next; + } + } + } + + // init facing axis property of steering actuators + { + Object *ob; + for (ob = main->object.first; ob; ob = ob->id.next) { + bActuator *act; + for (act= ob->actuators.first; act; act= act->next) { + if (act->type==ACT_STEERING) { + bSteeringActuator* stact = act->data; + if (stact->facingaxis==0) { + stact->facingaxis=1; + } + } + } + } + } + + if (main->versionfile < 255 || (main->versionfile == 255 && main->subversionfile < 3)) { + Object *ob; + + /* ocean res is now squared, reset old ones - will be massive */ + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md= ob->modifiers.first; md; md= md->next) { + if (md->type == eModifierType_Ocean) { + OceanModifierData *omd = (OceanModifierData *)md; + omd->resolution = 7; + omd->oceancache = NULL; + } + } + } + } + + if (main->versionfile < 256) { + bScreen *sc; + ScrArea *sa; + Key *key; + + /* Fix for sample line scope initializing with no height */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + sa= sc->areabase.first; + while (sa) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IMAGE) { + SpaceImage *sima= (SpaceImage *)sl; + if (sima->sample_line_hist.height == 0 ) + sima->sample_line_hist.height = 100; + } + } + sa= sa->next; + } + } + + /* old files could have been saved with slidermin = slidermax = 0.0, but the UI in + * 2.4x would never reveal this to users as a dummy value always ended up getting used + * instead + */ + for (key = main->key.first; key; key = key->id.next) { + KeyBlock *kb; + + for (kb = key->block.first; kb; kb = kb->next) { + if (IS_EQF(kb->slidermin, kb->slidermax) && IS_EQ(kb->slidermax, 0)) + kb->slidermax = kb->slidermin + 1.0f; + } + } + } + + if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 1)) { + /* fix for bones that didn't have arm_roll before */ + bArmature* arm; + Bone* bone; + Object *ob; + + for (arm = main->armature.first; arm; arm = arm->id.next) + for (bone = arm->bonebase.first; bone; bone = bone->next) + do_version_bone_roll_256(bone); + + /* fix for objects which have zero dquat's + * since this is multiplied with the quat rather than added */ + for (ob= main->object.first; ob; ob= ob->id.next) { + if (is_zero_v4(ob->dquat)) { + unit_qt(ob->dquat); + } + if (is_zero_v3(ob->drotAxis) && ob->drotAngle == 0.0f) { + unit_axis_angle(ob->drotAxis, &ob->drotAngle); + } + } + } + + if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 2)) { + bNodeTree *ntree; + + /* node sockets are not exposed automatically any more, + * this mimics the old behavior by adding all unlinked sockets to groups. + */ + for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { + /* XXX Only setting a flag here. Actual adding of group sockets + * is done in lib_verify_nodetree, because at this point the internal + * nodes may not be up-to-date! (missing lib-link) + */ + ntree->flag |= NTREE_DO_VERSIONS_GROUP_EXPOSE; + } + } + + if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile <3)) { + bScreen *sc; + Brush *brush; + Object *ob; + ParticleSettings *part; + Material *mat; + int tex_nr, transp_tex; + + for (mat = main->mat.first; mat; mat = mat->id.next) { + if (!(mat->mode & MA_TRANSP) && !(mat->material_type & MA_TYPE_VOLUME)) { + + transp_tex= 0; + + for (tex_nr=0; tex_nr<MAX_MTEX; tex_nr++) { + if (!mat->mtex[tex_nr]) continue; + if (mat->mtex[tex_nr]->mapto & MAP_ALPHA) transp_tex= 1; + } + + /* weak! material alpha could be animated */ + if (mat->alpha < 1.0f || mat->fresnel_tra > 0.0f || transp_tex) { + mat->mode |= MA_TRANSP; + mat->mode &= ~(MA_ZTRANSP|MA_RAYTRANSP); + } + } + } + + /* redraws flag in SpaceTime has been moved to Screen level */ + for (sc = main->screen.first; sc; sc= sc->id.next) { + if (sc->redraws_flag == 0) { + /* just initialize to default? */ + // XXX: we could also have iterated through areas, and taken them from the first timeline available... + sc->redraws_flag = TIME_ALL_3D_WIN|TIME_ALL_ANIM_WIN; + } + } + + for (brush= main->brush.first; brush; brush= brush->id.next) { + if (brush->height == 0) + brush->height= 0.4f; + } + + /* replace 'rim material' option for in offset*/ + for (ob = main->object.first; ob; ob = ob->id.next) { + ModifierData *md; + for (md= ob->modifiers.first; md; md= md->next) { + if (md->type == eModifierType_Solidify) { + SolidifyModifierData *smd = (SolidifyModifierData *)md; + if (smd->flag & MOD_SOLIDIFY_RIM_MATERIAL) { + smd->mat_ofs_rim= 1; + smd->flag &= ~MOD_SOLIDIFY_RIM_MATERIAL; + } + } + } + } + + /* particle draw color from material */ + for (part = main->particle.first; part; part = part->id.next) { + if (part->draw & PART_DRAW_MAT_COL) + part->draw_col = PART_DRAW_COL_MAT; + } + } + + if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 6)) { + Mesh *me; + + for (me= main->mesh.first; me; me= me->id.next) + mesh_calc_normals_tessface(me->mvert, me->totvert, me->mface, me->totface, NULL); + } + + if (main->versionfile < 256 || (main->versionfile == 256 && main->subversionfile < 2)) { + /* update blur area sizes from 0..1 range to 0..100 percentage */ + Scene *scene; + bNode *node; + for (scene=main->scene.first; scene; scene=scene->id.next) + if (scene->nodetree) + for (node=scene->nodetree->nodes.first; node; node=node->next) + if (node->type==CMP_NODE_BLUR) { + NodeBlurData *nbd= node->storage; + nbd->percentx *= 100.0f; + nbd->percenty *= 100.0f; + } + } + + if (main->versionfile < 258 || (main->versionfile == 258 && main->subversionfile < 1)) { + /* screen view2d settings were not properly initialized [#27164] + * v2d->scroll caused the bug but best reset other values too which are in old blend files only. + * need to make less ugly - possibly an iterator? */ + bScreen *screen; + for (screen= main->screen.first; screen; screen= screen->id.next) { + ScrArea *sa; + /* add regions */ + for (sa= screen->areabase.first; sa; sa= sa->next) { + SpaceLink *sl= sa->spacedata.first; + if (sl->spacetype==SPACE_IMAGE) { + ARegion *ar; + for (ar=sa->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + View2D *v2d= &ar->v2d; + v2d->minzoom= v2d->maxzoom= v2d->scroll= v2d->keeptot= v2d->keepzoom= v2d->keepofs= v2d->align= 0; + } + } + } + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IMAGE) { + ARegion *ar; + for (ar=sl->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + View2D *v2d= &ar->v2d; + v2d->minzoom= v2d->maxzoom= v2d->scroll= v2d->keeptot= v2d->keepzoom= v2d->keepofs= v2d->align= 0; + } + } + } + } + } + } + + { + /* Initialize texture point density curve falloff */ + Tex *tex; + for (tex= main->tex.first; tex; tex= tex->id.next) { + if (tex->pd) { + if (tex->pd->falloff_speed_scale == 0.0f) + tex->pd->falloff_speed_scale = 100.0f; + + if (!tex->pd->falloff_curve) { + tex->pd->falloff_curve = curvemapping_add(1, 0, 0, 1, 1); + + tex->pd->falloff_curve->preset = CURVE_PRESET_LINE; + tex->pd->falloff_curve->cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; + curvemap_reset(tex->pd->falloff_curve->cm, &tex->pd->falloff_curve->clipr, tex->pd->falloff_curve->preset, CURVEMAP_SLOPE_POSITIVE); + curvemapping_changed(tex->pd->falloff_curve, 0); + } + } + } + } + + { + /* add default value for behind strength of camera actuator */ + Object *ob; + bActuator *act; + for (ob = main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_CAMERA) { + bCameraActuator *ba= act->data; + + ba->damping = 1.0/32.0; + } + } + } + } + + { + ParticleSettings *part; + for (part = main->particle.first; part; part = part->id.next) { + /* Initialize particle billboard scale */ + part->bb_size[0] = part->bb_size[1] = 1.0f; + } + } + } + + if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 1)) { + { + Scene *scene; + Sequence *seq; + + for (scene=main->scene.first; scene; scene=scene->id.next) { + scene->r.ffcodecdata.audio_channels = 2; + scene->audio.volume = 1.0f; + SEQ_BEGIN (scene->ed, seq) + { + seq->pitch = 1.0f; + } + SEQ_END + } + } + { + bScreen *screen; + for (screen= main->screen.first; screen; screen= screen->id.next) { + ScrArea *sa; + /* add regions */ + for (sa= screen->areabase.first; sa; sa= sa->next) { + SpaceLink *sl= sa->spacedata.first; + if (sl->spacetype==SPACE_SEQ) { + ARegion *ar; + for (ar=sa->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + if (ar->v2d.min[1] == 4.0f) + ar->v2d.min[1]= 0.5f; + } + } + } + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_SEQ) { + ARegion *ar; + for (ar=sl->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + if (ar->v2d.min[1] == 4.0f) + ar->v2d.min[1]= 0.5f; + } + } + } + } + } + } + } + { + /* Make "auto-clamped" handles a per-keyframe setting instead of per-FCurve + * + * We're only patching F-Curves in Actions here, since it is assumed that most + * drivers out there won't be using this (and if they are, they're in the minority). + * While we should aim to fix everything ideally, in practice it's far too hard + * to get to every animdata block, not to mention the performance hit that'd have + */ + bAction *act; + FCurve *fcu; + + for (act = main->action.first; act; act = act->id.next) { + for (fcu = act->curves.first; fcu; fcu = fcu->next) { + BezTriple *bezt; + unsigned int i = 0; + + /* only need to touch curves that had this flag set */ + if ((fcu->flag & FCURVE_AUTO_HANDLES) == 0) + continue; + if ((fcu->totvert == 0) || (fcu->bezt == NULL)) + continue; + + /* only change auto-handles to auto-clamped */ + for (bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { + if (bezt->h1 == HD_AUTO) bezt->h1 = HD_AUTO_ANIM; + if (bezt->h2 == HD_AUTO) bezt->h2 = HD_AUTO_ANIM; + } + + fcu->flag &= ~FCURVE_AUTO_HANDLES; + } + } + } + { + /* convert fcurve and shape action actuators to action actuators */ + Object *ob; + bActuator *act; + bIpoActuator *ia; + bActionActuator *aa; + + for (ob= main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_IPO) { + // Create the new actuator + ia= act->data; + aa= MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version"); + + // Copy values + aa->type = ia->type; + aa->flag = ia->flag; + aa->sta = ia->sta; + aa->end = ia->end; + BLI_strncpy(aa->name, ia->name, sizeof(aa->name)); + BLI_strncpy(aa->frameProp, ia->frameProp, sizeof(aa->frameProp)); + if (ob->adt) + aa->act = ob->adt->action; + + // Get rid of the old actuator + MEM_freeN(ia); + + // Assign the new actuator + act->data = aa; + act->type= act->otype= ACT_ACTION; + + } + else if (act->type == ACT_SHAPEACTION) { + act->type = act->otype = ACT_ACTION; + } + } + } + } + } + + if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 2)) { + { + /* Convert default socket values from bNodeStack */ + Scene *sce; + Material *mat; + Tex *tex; + bNodeTree *ntree; + for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { + blo_do_versions_nodetree_default_value(ntree); + ntree->update |= NTREE_UPDATE; + } + for (sce=main->scene.first; sce; sce=sce->id.next) + if (sce->nodetree) { + blo_do_versions_nodetree_default_value(sce->nodetree); + sce->nodetree->update |= NTREE_UPDATE; + } + for (mat=main->mat.first; mat; mat=mat->id.next) + if (mat->nodetree) { + blo_do_versions_nodetree_default_value(mat->nodetree); + mat->nodetree->update |= NTREE_UPDATE; + } + for (tex=main->tex.first; tex; tex=tex->id.next) + if (tex->nodetree) { + blo_do_versions_nodetree_default_value(tex->nodetree); + tex->nodetree->update |= NTREE_UPDATE; + } + } + + /* add SOCK_DYNAMIC flag to existing group sockets */ + { + bNodeTree *ntree; + /* only need to do this for trees in main, local trees are not used as groups */ + for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) { + do_versions_nodetree_dynamic_sockets(ntree); + ntree->update |= NTREE_UPDATE; + } + } + + { + /* Initialize group tree nodetypes. + * These are used to distinguish tree types and + * associate them with specific node types for polling. + */ + bNodeTree *ntree; + /* all node trees in main->nodetree are considered groups */ + for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) + ntree->nodetype = NODE_GROUP; + } + } + + if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 4)) { + { + /* Adaptive time step for particle systems */ + ParticleSettings *part; + for (part = main->particle.first; part; part = part->id.next) { + part->courant_target = 0.2f; + part->time_flag &= ~PART_TIME_AUTOSF; + } + } + + { + /* set defaults for obstacle avoidance, recast data */ + Scene *sce; + for (sce = main->scene.first; sce; sce = sce->id.next) { + if (sce->gm.levelHeight == 0.f) + sce->gm.levelHeight = 2.f; + + if (sce->gm.recastData.cellsize == 0.0f) + sce->gm.recastData.cellsize = 0.3f; + if (sce->gm.recastData.cellheight == 0.0f) + sce->gm.recastData.cellheight = 0.2f; + if (sce->gm.recastData.agentmaxslope == 0.0f) + sce->gm.recastData.agentmaxslope = (float)M_PI/4; + if (sce->gm.recastData.agentmaxclimb == 0.0f) + sce->gm.recastData.agentmaxclimb = 0.9f; + if (sce->gm.recastData.agentheight == 0.0f) + sce->gm.recastData.agentheight = 2.0f; + if (sce->gm.recastData.agentradius == 0.0f) + sce->gm.recastData.agentradius = 0.6f; + if (sce->gm.recastData.edgemaxlen == 0.0f) + sce->gm.recastData.edgemaxlen = 12.0f; + if (sce->gm.recastData.edgemaxerror == 0.0f) + sce->gm.recastData.edgemaxerror = 1.3f; + if (sce->gm.recastData.regionminsize == 0.0f) + sce->gm.recastData.regionminsize = 8.f; + if (sce->gm.recastData.regionmergesize == 0.0f) + sce->gm.recastData.regionmergesize = 20.f; + if (sce->gm.recastData.vertsperpoly<3) + sce->gm.recastData.vertsperpoly = 6; + if (sce->gm.recastData.detailsampledist == 0.0f) + sce->gm.recastData.detailsampledist = 6.0f; + if (sce->gm.recastData.detailsamplemaxerror == 0.0f) + sce->gm.recastData.detailsamplemaxerror = 1.0f; + } + } + } + + /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ + /* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */ + + /* don't forget to set version number in blender.c! */ +} diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c new file mode 100644 index 00000000000..7d8905d5902 --- /dev/null +++ b/source/blender/blenloader/intern/versioning_legacy.c @@ -0,0 +1,3570 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + * + */ + +/** \file blender/blenloader/intern/readfile_pre250.c + * \ingroup blenloader + */ + + +#include "zlib.h" + +#include <limits.h> +//#include <stdio.h> // for printf fopen fwrite fclose sprintf FILE +//#include <stdlib.h> // for getenv atoi +//#include <stddef.h> // for offsetof +//#include <fcntl.h> // for open +//#include <string.h> // for strrchr strncmp strstr +//#include <math.h> // for fabs +//#include <stdarg.h> /* for va_start/end */ + +#ifndef WIN32 +# include <unistd.h> // for read close +#else +# include <io.h> // for open close read +# include "winsock2.h" +# include "BLI_winstuff.h" +#endif + +/* allow readfile to use deprecated functionality */ +#define DNA_DEPRECATED_ALLOW + +#include "DNA_armature_types.h" +#include "DNA_actuator_types.h" +#include "DNA_camera_types.h" +#include "DNA_constraint_types.h" +#include "DNA_effect_types.h" +#include "DNA_group_types.h" +#include "DNA_key_types.h" +#include "DNA_lattice_types.h" +#include "DNA_lamp_types.h" +#include "DNA_material_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_nla_types.h" +#include "DNA_node_types.h" +#include "DNA_object_fluidsim.h" // NT +#include "DNA_object_types.h" +#include "DNA_property_types.h" +#include "DNA_view3d_types.h" +#include "DNA_screen_types.h" +#include "DNA_sensor_types.h" +#include "DNA_sdna_types.h" +#include "DNA_sequence_types.h" +#include "DNA_sound_types.h" +#include "DNA_space_types.h" +#include "DNA_vfont_types.h" +#include "DNA_world_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" +#include "BLI_blenlib.h" +#include "BLI_math.h" +#include "BLI_edgehash.h" + +#include "BKE_armature.h" +#include "BKE_colortools.h" +#include "BKE_constraint.h" +#include "BKE_deform.h" +#include "BKE_fcurve.h" +#include "BKE_global.h" // for G +#include "BKE_image.h" +#include "BKE_lattice.h" +#include "BKE_main.h" // for Main +#include "BKE_mesh.h" // for ME_ defines (patching) +#include "BKE_modifier.h" +#include "BKE_particle.h" +#include "BKE_pointcache.h" +#include "BKE_property.h" // for get_ob_property +#include "BKE_scene.h" +#include "BKE_sequencer.h" +#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND + +#include "IMB_imbuf.h" // for proxy / timecode versioning stuff + +#include "NOD_socket.h" + +//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes +//XXX #include "BIF_filelist.h" // badlevel too, where to move this? - elubie +//XXX #include "BIF_previewrender.h" // bedlelvel, for struct RenderInfo +#include "BLO_readfile.h" +#include "BLO_undofile.h" + +#include "RE_engine.h" + +#include "readfile.h" + +#include "PIL_time.h" + +#include <errno.h> + +static void vcol_to_fcol(Mesh *me) +{ + MFace *mface; + unsigned int *mcol, *mcoln, *mcolmain; + int a; + + if (me->totface==0 || me->mcol==NULL) return; + + mcoln= mcolmain= MEM_mallocN(4*sizeof(int)*me->totface, "mcoln"); + mcol = (unsigned int *)me->mcol; + mface= me->mface; + for (a=me->totface; a>0; a--, mface++) { + mcoln[0]= mcol[mface->v1]; + mcoln[1]= mcol[mface->v2]; + mcoln[2]= mcol[mface->v3]; + mcoln[3]= mcol[mface->v4]; + mcoln+= 4; + } + + MEM_freeN(me->mcol); + me->mcol= (MCol *)mcolmain; +} + +static int map_223_keybd_code_to_224_keybd_code(int code) +{ + switch (code) { + case 312: return 311; /* F12KEY */ + case 159: return 161; /* PADSLASHKEY */ + case 161: return 150; /* PAD0 */ + case 154: return 151; /* PAD1 */ + case 150: return 152; /* PAD2 */ + case 155: return 153; /* PAD3 */ + case 151: return 154; /* PAD4 */ + case 156: return 155; /* PAD5 */ + case 152: return 156; /* PAD6 */ + case 157: return 157; /* PAD7 */ + case 153: return 158; /* PAD8 */ + case 158: return 159; /* PAD9 */ + default: return code; + } +} + +static void do_version_bone_head_tail_237(Bone *bone) +{ + Bone *child; + float vec[3]; + + /* head */ + copy_v3_v3(bone->arm_head, bone->arm_mat[3]); + + /* tail is in current local coord system */ + copy_v3_v3(vec, bone->arm_mat[1]); + mul_v3_fl(vec, bone->length); + add_v3_v3v3(bone->arm_tail, bone->arm_head, vec); + + for (child= bone->childbase.first; child; child= child->next) + do_version_bone_head_tail_237(child); +} + +static void bone_version_238(ListBase *lb) +{ + Bone *bone; + + for (bone= lb->first; bone; bone= bone->next) { + if (bone->rad_tail==0.0f && bone->rad_head==0.0f) { + bone->rad_head= 0.25f*bone->length; + bone->rad_tail= 0.1f*bone->length; + + bone->dist-= bone->rad_head; + if (bone->dist<=0.0f) bone->dist= 0.0f; + } + bone_version_238(&bone->childbase); + } +} + +static void bone_version_239(ListBase *lb) +{ + Bone *bone; + + for (bone= lb->first; bone; bone= bone->next) { + if (bone->layer==0) + bone->layer= 1; + bone_version_239(&bone->childbase); + } +} + +static void ntree_version_241(bNodeTree *ntree) +{ + bNode *node; + + if (ntree->type==NTREE_COMPOSIT) { + for (node= ntree->nodes.first; node; node= node->next) { + if (node->type==CMP_NODE_BLUR) { + if (node->storage==NULL) { + NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); + nbd->sizex= node->custom1; + nbd->sizey= node->custom2; + nbd->filtertype= R_FILTER_QUAD; + node->storage= nbd; + } + } + else if (node->type==CMP_NODE_VECBLUR) { + if (node->storage==NULL) { + NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); + nbd->samples= node->custom1; + nbd->maxspeed= node->custom2; + nbd->fac= 1.0f; + node->storage= nbd; + } + } + } + } +} + +static void ntree_version_242(bNodeTree *ntree) +{ + bNode *node; + + if (ntree->type==NTREE_COMPOSIT) { + for (node= ntree->nodes.first; node; node= node->next) { + if (node->type==CMP_NODE_HUE_SAT) { + if (node->storage) { + NodeHueSat *nhs= node->storage; + if (nhs->val==0.0f) nhs->val= 1.0f; + } + } + } + } + else if (ntree->type==NTREE_SHADER) { + for (node= ntree->nodes.first; node; node= node->next) + if (node->type == SH_NODE_GEOMETRY && node->storage == NULL) + node->storage= MEM_callocN(sizeof(NodeGeometry), "NodeGeometry"); + } + +} + +static void ntree_version_245(FileData *fd, Library *lib, bNodeTree *ntree) +{ + bNode *node; + NodeTwoFloats *ntf; + ID *nodeid; + Image *image; + ImageUser *iuser; + + if (ntree->type==NTREE_COMPOSIT) { + for (node= ntree->nodes.first; node; node= node->next) { + if (node->type == CMP_NODE_ALPHAOVER) { + if (!node->storage) { + ntf= MEM_callocN(sizeof(NodeTwoFloats), "NodeTwoFloats"); + node->storage= ntf; + if (node->custom1) + ntf->x= 1.0f; + } + } + + /* fix for temporary flag changes during 245 cycle */ + nodeid= blo_do_versions_newlibadr(fd, lib, node->id); + if (node->storage && nodeid && GS(nodeid->name) == ID_IM) { + image= (Image*)nodeid; + iuser= node->storage; + if (iuser->flag & IMA_OLD_PREMUL) { + iuser->flag &= ~IMA_OLD_PREMUL; + iuser->flag |= IMA_DO_PREMUL; + } + if (iuser->flag & IMA_DO_PREMUL) { + image->flag &= ~IMA_OLD_PREMUL; + image->flag |= IMA_DO_PREMUL; + } + } + } + } +} + +static void idproperties_fix_groups_lengths_recurse(IDProperty *prop) +{ + IDProperty *loop; + int i; + + for (loop=prop->data.group.first, i=0; loop; loop=loop->next, i++) { + if (loop->type == IDP_GROUP) idproperties_fix_groups_lengths_recurse(loop); + } + + if (prop->len != i) { + printf("Found and fixed bad id property group length.\n"); + prop->len = i; + } +} + +static void idproperties_fix_group_lengths(ListBase idlist) +{ + ID *id; + + for (id=idlist.first; id; id=id->next) { + if (id->properties) { + idproperties_fix_groups_lengths_recurse(id->properties); + } + } +} + +static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me) +{ + Material *ma; + MFace *mf; + MTFace *tf; + int a, b, texalpha; + + /* verify we have a tface layer */ + for (b=0; b<me->fdata.totlayer; b++) + if (me->fdata.layers[b].type == CD_MTFACE) + break; + + if (b == me->fdata.totlayer) + return; + + /* if we do, set alpha sort if the game engine did it before */ + for (a=0, mf=me->mface; a<me->totface; a++, mf++) { + if (mf->mat_nr < me->totcol) { + ma= blo_do_versions_newlibadr(fd, lib, me->mat[mf->mat_nr]); + texalpha = 0; + + /* we can't read from this if it comes from a library, + * because direct_link might not have happened on it, + * so ma->mtex is not pointing to valid memory yet */ + if (ma && ma->id.lib) + ma= NULL; + + for (b=0; ma && b<MAX_MTEX; b++) + if (ma->mtex && ma->mtex[b] && ma->mtex[b]->mapto & MAP_ALPHA) + texalpha = 1; + } + else { + ma= NULL; + texalpha = 0; + } + + for (b=0; b<me->fdata.totlayer; b++) { + if (me->fdata.layers[b].type == CD_MTFACE) { + tf = ((MTFace*)me->fdata.layers[b].data) + a; + + tf->mode &= ~TF_ALPHASORT; + if (ma && (ma->mode & MA_ZTRANSP)) + if (ELEM(tf->transp, TF_ALPHA, TF_ADD) || (texalpha && (tf->transp != TF_CLIP))) + tf->mode |= TF_ALPHASORT; + } + } + } +} + +static void customdata_version_242(Mesh *me) +{ + CustomDataLayer *layer; + MTFace *mtf; + MCol *mcol; + TFace *tf; + int a, mtfacen, mcoln; + + if (!me->vdata.totlayer) { + CustomData_add_layer(&me->vdata, CD_MVERT, CD_ASSIGN, me->mvert, me->totvert); + + if (me->msticky) + CustomData_add_layer(&me->vdata, CD_MSTICKY, CD_ASSIGN, me->msticky, me->totvert); + if (me->dvert) + CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_ASSIGN, me->dvert, me->totvert); + } + + if (!me->edata.totlayer) + CustomData_add_layer(&me->edata, CD_MEDGE, CD_ASSIGN, me->medge, me->totedge); + + if (!me->fdata.totlayer) { + CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, me->mface, me->totface); + + if (me->tface) { + if (me->mcol) + MEM_freeN(me->mcol); + + me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_CALLOC, NULL, me->totface); + me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface); + + mtf= me->mtface; + mcol= me->mcol; + tf= me->tface; + + for (a=0; a < me->totface; a++, mtf++, tf++, mcol+=4) { + memcpy(mcol, tf->col, sizeof(tf->col)); + memcpy(mtf->uv, tf->uv, sizeof(tf->uv)); + + mtf->flag= tf->flag; + mtf->unwrap= tf->unwrap; + mtf->mode= tf->mode; + mtf->tile= tf->tile; + mtf->tpage= tf->tpage; + mtf->transp= tf->transp; + } + + MEM_freeN(me->tface); + me->tface= NULL; + } + else if (me->mcol) { + me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, me->mcol, me->totface); + } + } + + if (me->tface) { + MEM_freeN(me->tface); + me->tface= NULL; + } + + for (a=0, mtfacen=0, mcoln=0; a < me->fdata.totlayer; a++) { + layer= &me->fdata.layers[a]; + + if (layer->type == CD_MTFACE) { + if (layer->name[0] == 0) { + if (mtfacen == 0) strcpy(layer->name, "UVMap"); + else BLI_snprintf(layer->name, sizeof(layer->name), "UVMap.%.3d", mtfacen); + } + mtfacen++; + } + else if (layer->type == CD_MCOL) { + if (layer->name[0] == 0) { + if (mcoln == 0) strcpy(layer->name, "Col"); + else BLI_snprintf(layer->name, sizeof(layer->name), "Col.%.3d", mcoln); + } + mcoln++; + } + } + + mesh_update_customdata_pointers(me, TRUE); +} + +/*only copy render texface layer from active*/ +static void customdata_version_243(Mesh *me) +{ + CustomDataLayer *layer; + int a; + + for (a=0; a < me->fdata.totlayer; a++) { + layer= &me->fdata.layers[a]; + layer->active_rnd = layer->active; + } +} + +/* struct NodeImageAnim moved to ImageUser, and we make it default available */ +static void do_version_ntree_242_2(bNodeTree *ntree) +{ + bNode *node; + + if (ntree->type==NTREE_COMPOSIT) { + for (node= ntree->nodes.first; node; node= node->next) { + if (ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { + /* only image had storage */ + if (node->storage) { + NodeImageAnim *nia= node->storage; + ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "ima user node"); + + iuser->frames= nia->frames; + iuser->sfra= nia->sfra; + iuser->offset= nia->nr-1; + iuser->cycl= nia->cyclic; + iuser->fie_ima= 2; + iuser->ok= 1; + + node->storage= iuser; + MEM_freeN(nia); + } + else { + ImageUser *iuser= node->storage= MEM_callocN(sizeof(ImageUser), "node image user"); + iuser->sfra= 1; + iuser->fie_ima= 2; + iuser->ok= 1; + } + } + } + } +} + +static void do_version_free_effect_245(Effect *eff) +{ + PartEff *paf; + + if (eff->type==EFF_PARTICLE) { + paf= (PartEff *)eff; + if (paf->keys) MEM_freeN(paf->keys); + } + MEM_freeN(eff); +} + +static void do_version_free_effects_245(ListBase *lb) +{ + Effect *eff; + + eff= lb->first; + while (eff) { + BLI_remlink(lb, eff); + do_version_free_effect_245(eff); + eff= lb->first; + } +} + +PartEff *blo_do_version_give_parteff_245(Object *ob) +{ + PartEff *paf; + + paf= ob->effect.first; + while (paf) { + if (paf->type==EFF_PARTICLE) return paf; + paf= paf->next; + } + return NULL; +} + +/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */ +void blo_do_version_old_trackto_to_constraints(Object *ob) +{ + /* create new trackto constraint from the relationship */ + if (ob->track) { + bConstraint *con= add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); + bTrackToConstraint *data = con->data; + + /* copy tracking settings from the object */ + data->tar = ob->track; + data->reserved1 = ob->trackflag; + data->reserved2 = ob->upflag; + } + + /* clear old track setting */ + ob->track = NULL; +} + +void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main) +{ + /* WATCH IT!!!: pointers from libdata have not been converted */ + + if (G.debug & G_DEBUG) + printf("read file %s\n Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision); + + if (main->versionfile == 100) { + /* tex->extend and tex->imageflag have changed: */ + Tex *tex = main->tex.first; + while (tex) { + if (tex->id.flag & LIB_NEEDLINK) { + + if (tex->extend==0) { + if (tex->xrepeat || tex->yrepeat) tex->extend= TEX_REPEAT; + else { + tex->extend= TEX_EXTEND; + tex->xrepeat= tex->yrepeat= 1; + } + } + + } + tex= tex->id.next; + } + } + if (main->versionfile <= 101) { + /* frame mapping */ + Scene *sce = main->scene.first; + while (sce) { + sce->r.framapto= 100; + sce->r.images= 100; + sce->r.framelen= 1.0; + sce= sce->id.next; + } + } + if (main->versionfile <= 102) { + /* init halo's at 1.0 */ + Material *ma = main->mat.first; + while (ma) { + ma->add= 1.0; + ma= ma->id.next; + } + } + if (main->versionfile <= 103) { + /* new variable in object: colbits */ + Object *ob = main->object.first; + int a; + while (ob) { + ob->colbits= 0; + if (ob->totcol) { + for (a=0; a<ob->totcol; a++) { + if (ob->mat[a]) ob->colbits |= (1<<a); + } + } + ob= ob->id.next; + } + } + if (main->versionfile <= 104) { + /* timeoffs moved */ + Object *ob = main->object.first; + while (ob) { + if (ob->transflag & 1) { + ob->transflag -= 1; + //ob->ipoflag |= OB_OFFS_OB; + } + ob= ob->id.next; + } + } + if (main->versionfile <= 105) { + Object *ob = main->object.first; + while (ob) { + ob->dupon= 1; ob->dupoff= 0; + ob->dupsta= 1; ob->dupend= 100; + ob= ob->id.next; + } + } + if (main->versionfile <= 106) { + /* mcol changed */ + Mesh *me = main->mesh.first; + while (me) { + if (me->mcol) vcol_to_fcol(me); + me= me->id.next; + } + + } + if (main->versionfile <= 107) { + Object *ob; + Scene *sce = main->scene.first; + while (sce) { + sce->r.mode |= R_GAMMA; + sce= sce->id.next; + } + ob= main->object.first; + while (ob) { + //ob->ipoflag |= OB_OFFS_PARENT; + if (ob->dt==0) ob->dt= OB_SOLID; + ob= ob->id.next; + } + + } + if (main->versionfile <= 109) { + /* new variable: gridlines */ + bScreen *sc = main->screen.first; + while (sc) { + ScrArea *sa= sc->areabase.first; + while (sa) { + SpaceLink *sl= sa->spacedata.first; + while (sl) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D*) sl; + + if (v3d->gridlines==0) v3d->gridlines= 20; + } + sl= sl->next; + } + sa= sa->next; + } + sc= sc->id.next; + } + } + if (main->versionfile <= 113) { + Material *ma = main->mat.first; + while (ma) { + if (ma->flaresize==0.0f) ma->flaresize= 1.0f; + ma->subsize= 1.0f; + ma->flareboost= 1.0f; + ma= ma->id.next; + } + } + + if (main->versionfile <= 134) { + Tex *tex = main->tex.first; + while (tex) { + if ((tex->rfac == 0.0f) && + (tex->gfac == 0.0f) && + (tex->bfac == 0.0f)) { + tex->rfac = 1.0f; + tex->gfac = 1.0f; + tex->bfac = 1.0f; + tex->filtersize = 1.0f; + } + tex = tex->id.next; + } + } + if (main->versionfile <= 140) { + /* r-g-b-fac in texture */ + Tex *tex = main->tex.first; + while (tex) { + if ((tex->rfac == 0.0f) && + (tex->gfac == 0.0f) && + (tex->bfac == 0.0f)) { + tex->rfac = 1.0f; + tex->gfac = 1.0f; + tex->bfac = 1.0f; + tex->filtersize = 1.0f; + } + tex = tex->id.next; + } + } + if (main->versionfile <= 153) { + Scene *sce = main->scene.first; + while (sce) { + if (sce->r.blurfac==0.0f) sce->r.blurfac= 1.0f; + sce= sce->id.next; + } + } + if (main->versionfile <= 163) { + Scene *sce = main->scene.first; + while (sce) { + if (sce->r.frs_sec==0) sce->r.frs_sec= 25; + sce= sce->id.next; + } + } + if (main->versionfile <= 164) { + Mesh *me= main->mesh.first; + while (me) { + me->smoothresh= 30; + me= me->id.next; + } + } + if (main->versionfile <= 165) { + Mesh *me= main->mesh.first; + TFace *tface; + int nr; + char *cp; + + while (me) { + if (me->tface) { + nr= me->totface; + tface= me->tface; + while (nr--) { + cp= (char *)&tface->col[0]; + if (cp[1]>126) cp[1]= 255; else cp[1]*=2; + if (cp[2]>126) cp[2]= 255; else cp[2]*=2; + if (cp[3]>126) cp[3]= 255; else cp[3]*=2; + cp= (char *)&tface->col[1]; + if (cp[1]>126) cp[1]= 255; else cp[1]*=2; + if (cp[2]>126) cp[2]= 255; else cp[2]*=2; + if (cp[3]>126) cp[3]= 255; else cp[3]*=2; + cp= (char *)&tface->col[2]; + if (cp[1]>126) cp[1]= 255; else cp[1]*=2; + if (cp[2]>126) cp[2]= 255; else cp[2]*=2; + if (cp[3]>126) cp[3]= 255; else cp[3]*=2; + cp= (char *)&tface->col[3]; + if (cp[1]>126) cp[1]= 255; else cp[1]*=2; + if (cp[2]>126) cp[2]= 255; else cp[2]*=2; + if (cp[3]>126) cp[3]= 255; else cp[3]*=2; + + tface++; + } + } + me= me->id.next; + } + } + + if (main->versionfile <= 169) { + Mesh *me= main->mesh.first; + while (me) { + if (me->subdiv==0) me->subdiv= 1; + me= me->id.next; + } + } + + if (main->versionfile <= 169) { + bScreen *sc= main->screen.first; + while (sc) { + ScrArea *sa= sc->areabase.first; + while (sa) { + SpaceLink *sl= sa->spacedata.first; + while (sl) { + if (sl->spacetype==SPACE_IPO) { + SpaceIpo *sipo= (SpaceIpo*) sl; + sipo->v2d.max[0]= 15000.0; + } + sl= sl->next; + } + sa= sa->next; + } + sc= sc->id.next; + } + } + + if (main->versionfile <= 170) { + Object *ob = main->object.first; + PartEff *paf; + while (ob) { + paf = blo_do_version_give_parteff_245(ob); + if (paf) { + if (paf->staticstep == 0) { + paf->staticstep= 5; + } + } + ob = ob->id.next; + } + } + + if (main->versionfile <= 171) { + bScreen *sc= main->screen.first; + while (sc) { + ScrArea *sa= sc->areabase.first; + while (sa) { + SpaceLink *sl= sa->spacedata.first; + while (sl) { + if (sl->spacetype==SPACE_TEXT) { + SpaceText *st= (SpaceText*) sl; + st->lheight= 12; + } + sl= sl->next; + } + sa= sa->next; + } + sc= sc->id.next; + } + } + + if (main->versionfile <= 173) { + int a, b; + Mesh *me= main->mesh.first; + while (me) { + if (me->tface) { + TFace *tface= me->tface; + for (a=0; a<me->totface; a++, tface++) { + for (b=0; b<4; b++) { + tface->uv[b][0]/= 32767.0f; + tface->uv[b][1]/= 32767.0f; + } + } + } + me= me->id.next; + } + } + + if (main->versionfile <= 191) { + Object *ob= main->object.first; + Material *ma = main->mat.first; + + /* let faces have default add factor of 0.0 */ + while (ma) { + if (!(ma->mode & MA_HALO)) ma->add = 0.0; + ma = ma->id.next; + } + + while (ob) { + ob->mass= 1.0f; + ob->damping= 0.1f; + /*ob->quat[1]= 1.0f;*/ /* quats arnt used yet */ + ob= ob->id.next; + } + } + + if (main->versionfile <= 193) { + Object *ob= main->object.first; + while (ob) { + ob->inertia= 1.0f; + ob->rdamping= 0.1f; + ob= ob->id.next; + } + } + + if (main->versionfile <= 196) { + Mesh *me= main->mesh.first; + int a, b; + while (me) { + if (me->tface) { + TFace *tface= me->tface; + for (a=0; a<me->totface; a++, tface++) { + for (b=0; b<4; b++) { + tface->mode |= TF_DYNAMIC; + tface->mode &= ~TF_INVISIBLE; + } + } + } + me= me->id.next; + } + } + + if (main->versionfile <= 200) { + Object *ob= main->object.first; + while (ob) { + ob->scaflag = ob->gameflag & (OB_DO_FH|OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); + /* 64 is do_fh */ + ob->gameflag &= ~(OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); + ob = ob->id.next; + } + } + + if (main->versionfile <= 201) { + /* add-object + end-object are joined to edit-object actuator */ + Object *ob = main->object.first; + bProperty *prop; + bActuator *act; + bIpoActuator *ia; + bEditObjectActuator *eoa; + bAddObjectActuator *aoa; + while (ob) { + act = ob->actuators.first; + while (act) { + if (act->type==ACT_IPO) { + ia= act->data; + prop= get_ob_property(ob, ia->name); + if (prop) { + ia->type= ACT_IPO_FROM_PROP; + } + } + else if (act->type==ACT_ADD_OBJECT) { + aoa= act->data; + eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); + eoa->type= ACT_EDOB_ADD_OBJECT; + eoa->ob= aoa->ob; + eoa->time= aoa->time; + MEM_freeN(aoa); + act->data= eoa; + act->type= act->otype= ACT_EDIT_OBJECT; + } + else if (act->type==ACT_END_OBJECT) { + eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); + eoa->type= ACT_EDOB_END_OBJECT; + act->data= eoa; + act->type= act->otype= ACT_EDIT_OBJECT; + } + act= act->next; + } + ob = ob->id.next; + } + } + + if (main->versionfile <= 202) { + /* add-object and end-object are joined to edit-object + * actuator */ + Object *ob= main->object.first; + bActuator *act; + bObjectActuator *oa; + while (ob) { + act= ob->actuators.first; + while (act) { + if (act->type==ACT_OBJECT) { + oa= act->data; + oa->flag &= ~(ACT_TORQUE_LOCAL|ACT_DROT_LOCAL); /* this actuator didn't do local/glob rot before */ + } + act= act->next; + } + ob= ob->id.next; + } + } + + if (main->versionfile <= 204) { + /* patches for new physics */ + Object *ob= main->object.first; + bActuator *act; + bObjectActuator *oa; + bSound *sound; + while (ob) { + + /* please check this for demo20 files like + * original Egypt levels etc. converted + * rotation factor of 50 is not workable */ + act= ob->actuators.first; + while (act) { + if (act->type==ACT_OBJECT) { + oa= act->data; + + oa->forceloc[0]*= 25.0f; + oa->forceloc[1]*= 25.0f; + oa->forceloc[2]*= 25.0f; + + oa->forcerot[0]*= 10.0f; + oa->forcerot[1]*= 10.0f; + oa->forcerot[2]*= 10.0f; + } + act= act->next; + } + ob= ob->id.next; + } + + sound = main->sound.first; + while (sound) { + if (sound->volume < 0.01f) { + sound->volume = 1.0f; + } + sound = sound->id.next; + } + } + + if (main->versionfile <= 205) { + /* patches for new physics */ + Object *ob= main->object.first; + bActuator *act; + bSensor *sens; + bEditObjectActuator *oa; + bRaySensor *rs; + bCollisionSensor *cs; + while (ob) { + /* Set anisotropic friction off for old objects, + * values to 1.0. */ + ob->gameflag &= ~OB_ANISOTROPIC_FRICTION; + ob->anisotropicFriction[0] = 1.0; + ob->anisotropicFriction[1] = 1.0; + ob->anisotropicFriction[2] = 1.0; + + act= ob->actuators.first; + while (act) { + if (act->type==ACT_EDIT_OBJECT) { + /* Zero initial velocity for newly + * added objects */ + oa= act->data; + oa->linVelocity[0] = 0.0; + oa->linVelocity[1] = 0.0; + oa->linVelocity[2] = 0.0; + oa->localflag = 0; + } + act= act->next; + } + + sens= ob->sensors.first; + while (sens) { + /* Extra fields for radar sensors. */ + if (sens->type == SENS_RADAR) { + bRadarSensor *s = sens->data; + s->range = 10000.0; + } + + /* Pulsing: defaults for new sensors. */ + if (sens->type != SENS_ALWAYS) { + sens->pulse = 0; + sens->freq = 0; + } + else { + sens->pulse = 1; + } + + /* Invert: off. */ + sens->invert = 0; + + /* Collision and ray: default = trigger + * on property. The material field can + * remain empty. */ + if (sens->type == SENS_COLLISION) { + cs = (bCollisionSensor*) sens->data; + cs->mode = 0; + } + if (sens->type == SENS_RAY) { + rs = (bRaySensor*) sens->data; + rs->mode = 0; + } + sens = sens->next; + } + ob= ob->id.next; + } + /* have to check the exact multiplier */ + } + + if (main->versionfile <= 211) { + /* Render setting: per scene, the applicable gamma value + * can be set. Default is 1.0, which means no + * correction. */ + bActuator *act; + bObjectActuator *oa; + Object *ob; + + /* added alpha in obcolor */ + ob= main->object.first; + while (ob) { + ob->col[3]= 1.0; + ob= ob->id.next; + } + + /* added alpha in obcolor */ + ob= main->object.first; + while (ob) { + act= ob->actuators.first; + while (act) { + if (act->type==ACT_OBJECT) { + /* multiply velocity with 50 in old files */ + oa= act->data; + if (fabsf(oa->linearvelocity[0]) >= 0.01f) + oa->linearvelocity[0] *= 50.0f; + if (fabsf(oa->linearvelocity[1]) >= 0.01f) + oa->linearvelocity[1] *= 50.0f; + if (fabsf(oa->linearvelocity[2]) >= 0.01f) + oa->linearvelocity[2] *= 50.0f; + if (fabsf(oa->angularvelocity[0])>=0.01f) + oa->angularvelocity[0] *= 50.0f; + if (fabsf(oa->angularvelocity[1])>=0.01f) + oa->angularvelocity[1] *= 50.0f; + if (fabsf(oa->angularvelocity[2])>=0.01f) + oa->angularvelocity[2] *= 50.0f; + } + act= act->next; + } + ob= ob->id.next; + } + } + + if (main->versionfile <= 212) { + + bSound* sound; + bProperty *prop; + Object *ob; + Mesh *me; + + sound = main->sound.first; + while (sound) { + sound->max_gain = 1.0; + sound->min_gain = 0.0; + sound->distance = 1.0; + + if (sound->attenuation > 0.0f) + sound->flags |= SOUND_FLAGS_3D; + else + sound->flags &= ~SOUND_FLAGS_3D; + + sound = sound->id.next; + } + + ob = main->object.first; + + while (ob) { + prop= ob->prop.first; + while (prop) { + if (prop->type == GPROP_TIME) { + // convert old GPROP_TIME values from int to float + *((float *)&prop->data) = (float) prop->data; + } + + prop= prop->next; + } + ob = ob->id.next; + } + + /* me->subdiv changed to reflect the actual reparametization + * better, and smeshes were removed - if it was a smesh make + * it a subsurf, and reset the subdiv level because subsurf + * takes a lot more work to calculate. + */ + for (me= main->mesh.first; me; me= me->id.next) { + if (me->flag&ME_SMESH) { + me->flag&= ~ME_SMESH; + me->flag|= ME_SUBSURF; + + me->subdiv= 1; + } + else { + if (me->subdiv<2) + me->subdiv= 1; + else + me->subdiv--; + } + } + } + + if (main->versionfile <= 220) { + Object *ob; + Mesh *me; + + ob = main->object.first; + + /* adapt form factor in order to get the 'old' physics + * behavior back...*/ + + while (ob) { + /* in future, distinguish between different + * object bounding shapes */ + ob->formfactor = 0.4f; + /* patch form factor, note that inertia equiv radius + * of a rotation symmetrical obj */ + if (ob->inertia != 1.0f) { + ob->formfactor /= ob->inertia * ob->inertia; + } + ob = ob->id.next; + } + + /* Began using alpha component of vertex colors, but + * old file vertex colors are undefined, reset them + * to be fully opaque. -zr + */ + for (me= main->mesh.first; me; me= me->id.next) { + if (me->mcol) { + int i; + + for (i=0; i<me->totface*4; i++) { + MCol *mcol= &me->mcol[i]; + mcol->a= 255; + } + } + if (me->tface) { + int i, j; + + for (i=0; i<me->totface; i++) { + TFace *tf= &((TFace*) me->tface)[i]; + + for (j=0; j<4; j++) { + char *col= (char*) &tf->col[j]; + + col[0]= 255; + } + } + } + } + } + if (main->versionfile <= 221) { + Scene *sce= main->scene.first; + + // new variables for std-alone player and runtime + while (sce) { + + sce->r.xplay= 640; + sce->r.yplay= 480; + sce->r.freqplay= 60; + + sce= sce->id.next; + } + + } + if (main->versionfile <= 222) { + Scene *sce= main->scene.first; + + // new variables for std-alone player and runtime + while (sce) { + + sce->r.depth= 32; + + sce= sce->id.next; + } + } + + + if (main->versionfile <= 223) { + VFont *vf; + Image *ima; + Object *ob; + + for (vf= main->vfont.first; vf; vf= vf->id.next) { + if (strcmp(vf->name+strlen(vf->name)-6, ".Bfont")==0) { + strcpy(vf->name, FO_BUILTIN_NAME); + } + } + + /* Old textures animate at 25 FPS */ + for (ima = main->image.first; ima; ima=ima->id.next) { + ima->animspeed = 25; + } + + /* Zr remapped some keyboard codes to be linear (stupid zr) */ + for (ob= main->object.first; ob; ob= ob->id.next) { + bSensor *sens; + + for (sens= ob->sensors.first; sens; sens= sens->next) { + if (sens->type==SENS_KEYBOARD) { + bKeyboardSensor *ks= sens->data; + + ks->key= map_223_keybd_code_to_224_keybd_code(ks->key); + ks->qual= map_223_keybd_code_to_224_keybd_code(ks->qual); + ks->qual2= map_223_keybd_code_to_224_keybd_code(ks->qual2); + } + } + } + } + if (main->versionfile <= 224) { + bSound* sound; + Scene *sce; + Mesh *me; + bScreen *sc; + + for (sound=main->sound.first; sound; sound=sound->id.next) { + if (sound->packedfile) { + if (sound->newpackedfile == NULL) { + sound->newpackedfile = sound->packedfile; + } + sound->packedfile = NULL; + } + } + /* Make sure that old subsurf meshes don't have zero subdivision level for rendering */ + for (me=main->mesh.first; me; me=me->id.next) { + if ((me->flag & ME_SUBSURF) && (me->subdivr==0)) + me->subdivr=me->subdiv; + } + + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->r.stereomode = 1; // no stereo + } + + /* some oldfile patch, moved from set_func_space */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IPO) { + SpaceSeq *sseq= (SpaceSeq*) sl; + sseq->v2d.keeptot= 0; + } + } + } + } + + } + + + if (main->versionfile <= 225) { + World *wo; + /* Use Sumo for old games */ + for (wo = main->world.first; wo; wo= wo->id.next) { + wo->physicsEngine = 2; + } + } + + if (main->versionfile <= 227) { + Scene *sce; + Material *ma; + bScreen *sc; + Object *ob; + + /* As of now, this insures that the transition from the old Track system + * to the new full constraint Track is painless for everyone. - theeth + */ + ob = main->object.first; + + while (ob) { + ListBase *list; + list = &ob->constraints; + + /* check for already existing TrackTo constraint + * set their track and up flag correctly */ + + if (list) { + bConstraint *curcon; + for (curcon = list->first; curcon; curcon=curcon->next) { + if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { + bTrackToConstraint *data = curcon->data; + data->reserved1 = ob->trackflag; + data->reserved2 = ob->upflag; + } + } + } + + if (ob->type == OB_ARMATURE) { + if (ob->pose) { + bConstraint *curcon; + bPoseChannel *pchan; + for (pchan = ob->pose->chanbase.first; + pchan; pchan=pchan->next) { + for (curcon = pchan->constraints.first; + curcon; curcon=curcon->next) { + if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { + bTrackToConstraint *data = curcon->data; + data->reserved1 = ob->trackflag; + data->reserved2 = ob->upflag; + } + } + } + } + } + + /* Change Ob->Track in real TrackTo constraint */ + blo_do_version_old_trackto_to_constraints(ob); + + ob = ob->id.next; + } + + + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->audio.mixrate = 44100; + sce->audio.flag |= AUDIO_SCRUB; + sce->r.mode |= R_ENVMAP; + } + // init new shader vars + for (ma= main->mat.first; ma; ma= ma->id.next) { + ma->refrac= 4.0f; + ma->roughness= 0.5f; + ma->param[0]= 0.5f; + ma->param[1]= 0.1f; + ma->param[2]= 0.1f; + ma->param[3]= 0.05f; + } + // patch for old wrong max view2d settings, allows zooming out more + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_ACTION) { + SpaceAction *sac= (SpaceAction *) sl; + sac->v2d.max[0]= 32000; + } + else if (sl->spacetype==SPACE_NLA) { + SpaceNla *sla= (SpaceNla *) sl; + sla->v2d.max[0]= 32000; + } + } + } + } + } + if (main->versionfile <= 228) { + Scene *sce; + bScreen *sc; + Object *ob; + + + /* As of now, this insures that the transition from the old Track system + * to the new full constraint Track is painless for everyone.*/ + ob = main->object.first; + + while (ob) { + ListBase *list; + list = &ob->constraints; + + /* check for already existing TrackTo constraint + * set their track and up flag correctly */ + + if (list) { + bConstraint *curcon; + for (curcon = list->first; curcon; curcon=curcon->next) { + if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { + bTrackToConstraint *data = curcon->data; + data->reserved1 = ob->trackflag; + data->reserved2 = ob->upflag; + } + } + } + + if (ob->type == OB_ARMATURE) { + if (ob->pose) { + bConstraint *curcon; + bPoseChannel *pchan; + for (pchan = ob->pose->chanbase.first; + pchan; pchan=pchan->next) { + for (curcon = pchan->constraints.first; + curcon; curcon=curcon->next) { + if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { + bTrackToConstraint *data = curcon->data; + data->reserved1 = ob->trackflag; + data->reserved2 = ob->upflag; + } + } + } + } + } + + ob = ob->id.next; + } + + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->r.mode |= R_ENVMAP; + } + + // convert old mainb values for new button panels + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_BUTS) { + SpaceButs *sbuts= (SpaceButs *) sl; + + sbuts->v2d.maxzoom= 1.2f; + sbuts->align= 1; /* horizontal default */ + + if (sbuts->mainb==BUTS_LAMP) { + sbuts->mainb= CONTEXT_SHADING; + //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_LAMP; + } + else if (sbuts->mainb==BUTS_MAT) { + sbuts->mainb= CONTEXT_SHADING; + //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT; + } + else if (sbuts->mainb==BUTS_TEX) { + sbuts->mainb= CONTEXT_SHADING; + //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX; + } + else if (sbuts->mainb==BUTS_ANIM) { + sbuts->mainb= CONTEXT_OBJECT; + } + else if (sbuts->mainb==BUTS_WORLD) { + sbuts->mainb= CONTEXT_SCENE; + //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_WORLD; + } + else if (sbuts->mainb==BUTS_RENDER) { + sbuts->mainb= CONTEXT_SCENE; + //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_RENDER; + } + else if (sbuts->mainb==BUTS_GAME) { + sbuts->mainb= CONTEXT_LOGIC; + } + else if (sbuts->mainb==BUTS_FPAINT) { + sbuts->mainb= CONTEXT_EDITING; + } + else if (sbuts->mainb==BUTS_RADIO) { + sbuts->mainb= CONTEXT_SHADING; + //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_RAD; + } + else if (sbuts->mainb==BUTS_CONSTRAINT) { + sbuts->mainb= CONTEXT_OBJECT; + } + else if (sbuts->mainb==BUTS_SCRIPT) { + sbuts->mainb= CONTEXT_OBJECT; + } + else if (sbuts->mainb==BUTS_EDIT) { + sbuts->mainb= CONTEXT_EDITING; + } + else sbuts->mainb= CONTEXT_SCENE; + } + } + } + } + } + /* ton: made this 230 instead of 229, + * to be sure (tuho files) and this is a reliable check anyway + * nevertheless, we might need to think over a fitness (initialize) + * check apart from the do_versions() */ + + if (main->versionfile <= 230) { + bScreen *sc; + + // new variable blockscale, for panels in any area + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->blockscale==0.0f) sl->blockscale= 0.7f; + /* added: 5x better zoom in for action */ + if (sl->spacetype==SPACE_ACTION) { + SpaceAction *sac= (SpaceAction *)sl; + sac->v2d.maxzoom= 50; + } + } + } + } + } + if (main->versionfile <= 231) { + /* new bit flags for showing/hiding grid floor and axes */ + bScreen *sc = main->screen.first; + while (sc) { + ScrArea *sa= sc->areabase.first; + while (sa) { + SpaceLink *sl= sa->spacedata.first; + while (sl) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D*) sl; + + if (v3d->gridflag==0) { + v3d->gridflag |= V3D_SHOW_X; + v3d->gridflag |= V3D_SHOW_Y; + v3d->gridflag |= V3D_SHOW_FLOOR; + v3d->gridflag &= ~V3D_SHOW_Z; + } + } + sl= sl->next; + } + sa= sa->next; + } + sc= sc->id.next; + } + } + if (main->versionfile <= 231) { + Material *ma= main->mat.first; + bScreen *sc = main->screen.first; + Scene *sce; + Lamp *la; + World *wrld; + + /* introduction of raytrace */ + while (ma) { + if (ma->fresnel_tra_i==0.0f) ma->fresnel_tra_i= 1.25f; + if (ma->fresnel_mir_i==0.0f) ma->fresnel_mir_i= 1.25f; + + ma->ang= 1.0; + ma->ray_depth= 2; + ma->ray_depth_tra= 2; + ma->fresnel_tra= 0.0; + ma->fresnel_mir= 0.0; + + ma= ma->id.next; + } + sce= main->scene.first; + while (sce) { + if (sce->r.gauss==0.0f) sce->r.gauss= 1.0f; + sce= sce->id.next; + } + la= main->lamp.first; + while (la) { + if (la->k==0.0f) la->k= 1.0; + if (la->ray_samp==0) la->ray_samp= 1; + if (la->ray_sampy==0) la->ray_sampy= 1; + if (la->ray_sampz==0) la->ray_sampz= 1; + if (la->area_size==0.0f) la->area_size= 1.0f; + if (la->area_sizey==0.0f) la->area_sizey= 1.0f; + if (la->area_sizez==0.0f) la->area_sizez= 1.0f; + la= la->id.next; + } + wrld= main->world.first; + while (wrld) { + if (wrld->range==0.0f) { + wrld->range= 1.0f/wrld->exposure; + } + wrld= wrld->id.next; + } + + /* new bit flags for showing/hiding grid floor and axes */ + + while (sc) { + ScrArea *sa= sc->areabase.first; + while (sa) { + SpaceLink *sl= sa->spacedata.first; + while (sl) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D*) sl; + + if (v3d->gridflag==0) { + v3d->gridflag |= V3D_SHOW_X; + v3d->gridflag |= V3D_SHOW_Y; + v3d->gridflag |= V3D_SHOW_FLOOR; + v3d->gridflag &= ~V3D_SHOW_Z; + } + } + sl= sl->next; + } + sa= sa->next; + } + sc= sc->id.next; + } + } + if (main->versionfile <= 232) { + Tex *tex= main->tex.first; + World *wrld= main->world.first; + bScreen *sc; + Scene *sce; + + while (tex) { + if ((tex->flag & (TEX_CHECKER_ODD+TEX_CHECKER_EVEN))==0) { + tex->flag |= TEX_CHECKER_ODD; + } + /* copied from kernel texture.c */ + if (tex->ns_outscale==0.0f) { + /* musgrave */ + tex->mg_H = 1.0f; + tex->mg_lacunarity = 2.0f; + tex->mg_octaves = 2.0f; + tex->mg_offset = 1.0f; + tex->mg_gain = 1.0f; + tex->ns_outscale = 1.0f; + /* distnoise */ + tex->dist_amount = 1.0f; + /* voronoi */ + tex->vn_w1 = 1.0f; + tex->vn_mexp = 2.5f; + } + tex= tex->id.next; + } + + while (wrld) { + if (wrld->aodist==0.0f) { + wrld->aodist= 10.0f; + wrld->aobias= 0.05f; + } + if (wrld->aosamp==0) wrld->aosamp= 5; + if (wrld->aoenergy==0.0f) wrld->aoenergy= 1.0f; + wrld= wrld->id.next; + } + + + // new variable blockscale, for panels in any area, do again because new + // areas didnt initialize it to 0.7 yet + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->blockscale==0.0f) sl->blockscale= 0.7f; + + /* added: 5x better zoom in for nla */ + if (sl->spacetype==SPACE_NLA) { + SpaceNla *snla= (SpaceNla *)sl; + snla->v2d.maxzoom= 50; + } + } + } + } + sce= main->scene.first; + while (sce) { + if (sce->r.ocres==0) sce->r.ocres= 64; + sce= sce->id.next; + } + + } + if (main->versionfile <= 233) { + bScreen *sc; + Material *ma= main->mat.first; + /* Object *ob= main->object.first; */ + + while (ma) { + if (ma->rampfac_col==0.0f) ma->rampfac_col= 1.0; + if (ma->rampfac_spec==0.0f) ma->rampfac_spec= 1.0; + if (ma->pr_lamp==0) ma->pr_lamp= 3; + ma= ma->id.next; + } + + /* this should have been done loooong before! */ +#if 0 /* deprecated in 2.5+ */ + while (ob) { + if (ob->ipowin==0) ob->ipowin= ID_OB; + ob= ob->id.next; + } +#endif + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + v3d->flag |= V3D_SELECT_OUTLINE; + } + } + } + } + } + + + + + if (main->versionfile <= 234) { + World *wo; + bScreen *sc; + + // force sumo engine to be active + for (wo = main->world.first; wo; wo= wo->id.next) { + if (wo->physicsEngine==0) wo->physicsEngine = 2; + } + + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + v3d->flag |= V3D_ZBUF_SELECT; + } + else if (sl->spacetype==SPACE_TEXT) { + SpaceText *st= (SpaceText *)sl; + if (st->tabnumber==0) st->tabnumber= 2; + } + } + } + } + } + if (main->versionfile <= 235) { + Tex *tex= main->tex.first; + Scene *sce= main->scene.first; + Sequence *seq; + Editing *ed; + + while (tex) { + if (tex->nabla==0.0f) tex->nabla= 0.025f; + tex= tex->id.next; + } + while (sce) { + ed= sce->ed; + if (ed) { + SEQ_BEGIN (sce->ed, seq) + { + if (seq->type==SEQ_IMAGE || seq->type==SEQ_MOVIE) + seq->flag |= SEQ_MAKE_PREMUL; + } + SEQ_END + } + + sce= sce->id.next; + } + } + if (main->versionfile <= 236) { + Object *ob; + Camera *cam= main->camera.first; + Material *ma; + bScreen *sc; + + while (cam) { + if (cam->ortho_scale==0.0f) { + cam->ortho_scale= 256.0f/cam->lens; + if (cam->type==CAM_ORTHO) printf("NOTE: ortho render has changed, tweak new Camera 'scale' value.\n"); + } + cam= cam->id.next; + } + /* set manipulator type */ + /* force oops draw if depgraph was set*/ + /* set time line var */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + if (v3d->twtype==0) v3d->twtype= V3D_MANIP_TRANSLATE; + } + } + } + } + // init new shader vars + for (ma= main->mat.first; ma; ma= ma->id.next) { + if (ma->darkness==0.0f) { + ma->rms=0.1f; + ma->darkness=1.0f; + } + } + + /* softbody init new vars */ + for (ob= main->object.first; ob; ob= ob->id.next) { + if (ob->soft) { + if (ob->soft->defgoal==0.0f) ob->soft->defgoal= 0.7f; + if (ob->soft->physics_speed==0.0f) ob->soft->physics_speed= 1.0f; + + if (ob->soft->interval==0) { + ob->soft->interval= 2; + ob->soft->sfra= 1; + ob->soft->efra= 100; + } + } + if (ob->soft && ob->soft->vertgroup==0) { + bDeformGroup *locGroup = defgroup_find_name(ob, "SOFTGOAL"); + if (locGroup) { + /* retrieve index for that group */ + ob->soft->vertgroup = 1 + BLI_findindex(&ob->defbase, locGroup); + } + } + } + } + if (main->versionfile <= 237) { + bArmature *arm; + bConstraint *con; + Object *ob; + Bone *bone; + + // armature recode checks + for (arm= main->armature.first; arm; arm= arm->id.next) { + where_is_armature(arm); + + for (bone= arm->bonebase.first; bone; bone= bone->next) + do_version_bone_head_tail_237(bone); + } + for (ob= main->object.first; ob; ob= ob->id.next) { + if (ob->parent) { + Object *parent= blo_do_versions_newlibadr(fd, lib, ob->parent); + if (parent && parent->type==OB_LATTICE) + ob->partype = PARSKEL; + } + + // btw. armature_rebuild_pose is further only called on leave editmode + if (ob->type==OB_ARMATURE) { + if (ob->pose) + ob->pose->flag |= POSE_RECALC; + ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; // cannot call stuff now (pointers!), done in setup_app_data + + /* new generic xray option */ + arm= blo_do_versions_newlibadr(fd, lib, ob->data); + if (arm->flag & ARM_DRAWXRAY) { + ob->dtx |= OB_DRAWXRAY; + } + } + else if (ob->type==OB_MESH) { + Mesh *me = blo_do_versions_newlibadr(fd, lib, ob->data); + + if ((me->flag&ME_SUBSURF)) { + SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf); + + smd->levels = MAX2(1, me->subdiv); + smd->renderLevels = MAX2(1, me->subdivr); + smd->subdivType = me->subsurftype; + + smd->modifier.mode = 0; + if (me->subdiv!=0) + smd->modifier.mode |= 1; + if (me->subdivr!=0) + smd->modifier.mode |= 2; + if (me->flag&ME_OPT_EDGES) + smd->flags |= eSubsurfModifierFlag_ControlEdges; + + BLI_addtail(&ob->modifiers, smd); + + modifier_unique_name(&ob->modifiers, (ModifierData*)smd); + } + } + + // follow path constraint needs to set the 'path' option in curves... + for (con=ob->constraints.first; con; con= con->next) { + if (con->type==CONSTRAINT_TYPE_FOLLOWPATH) { + bFollowPathConstraint *data = con->data; + Object *obc= blo_do_versions_newlibadr(fd, lib, data->tar); + + if (obc && obc->type==OB_CURVE) { + Curve *cu= blo_do_versions_newlibadr(fd, lib, obc->data); + if (cu) cu->flag |= CU_PATH; + } + } + } + } + } + if (main->versionfile <= 238) { + Lattice *lt; + Object *ob; + bArmature *arm; + Mesh *me; + Key *key; + Scene *sce= main->scene.first; + + while (sce) { + if (sce->toolsettings == NULL) { + sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings), "Tool Settings Struct"); + sce->toolsettings->cornertype=0; + sce->toolsettings->degr = 90; + sce->toolsettings->step = 9; + sce->toolsettings->turn = 1; + sce->toolsettings->extr_offs = 1; + sce->toolsettings->doublimit = 0.001f; + sce->toolsettings->segments = 32; + sce->toolsettings->rings = 32; + sce->toolsettings->vertices = 32; + } + sce= sce->id.next; + } + + for (lt=main->latt.first; lt; lt=lt->id.next) { + if (lt->fu==0.0f && lt->fv==0.0f && lt->fw==0.0f) { + calc_lat_fudu(lt->flag, lt->pntsu, <->fu, <->du); + calc_lat_fudu(lt->flag, lt->pntsv, <->fv, <->dv); + calc_lat_fudu(lt->flag, lt->pntsw, <->fw, <->dw); + } + } + + for (ob=main->object.first; ob; ob= ob->id.next) { + ModifierData *md; + PartEff *paf; + + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Subsurf) { + SubsurfModifierData *smd = (SubsurfModifierData*) md; + + smd->flags &= ~(eSubsurfModifierFlag_Incremental|eSubsurfModifierFlag_DebugIncr); + } + } + + if ((ob->softflag&OB_SB_ENABLE) && !modifiers_findByType(ob, eModifierType_Softbody)) { + if (ob->softflag&OB_SB_POSTDEF) { + md = ob->modifiers.first; + + while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) { + md = md->next; + } + + BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(eModifierType_Softbody)); + } + else { + BLI_addhead(&ob->modifiers, modifier_new(eModifierType_Softbody)); + } + + ob->softflag &= ~OB_SB_ENABLE; + } + if (ob->pose) { + bPoseChannel *pchan; + bConstraint *con; + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + // note, pchan->bone is also lib-link stuff + if (pchan->limitmin[0] == 0.0f && pchan->limitmax[0] == 0.0f) { + pchan->limitmin[0]= pchan->limitmin[1]= pchan->limitmin[2]= -180.0f; + pchan->limitmax[0]= pchan->limitmax[1]= pchan->limitmax[2]= 180.0f; + + for (con= pchan->constraints.first; con; con= con->next) { + if (con->type == CONSTRAINT_TYPE_KINEMATIC) { + bKinematicConstraint *data = (bKinematicConstraint*)con->data; + data->weight = 1.0f; + data->orientweight = 1.0f; + data->flag &= ~CONSTRAINT_IK_ROT; + + /* enforce conversion from old IK_TOPARENT to rootbone index */ + data->rootbone= -1; + + /* update_pose_etc handles rootbone==-1 */ + ob->pose->flag |= POSE_RECALC; + } + } + } + } + } + + paf = blo_do_version_give_parteff_245(ob); + if (paf) { + if (paf->disp == 0) + paf->disp = 100; + if (paf->speedtex == 0) + paf->speedtex = 8; + if (paf->omat == 0) + paf->omat = 1; + } + } + + for (arm=main->armature.first; arm; arm= arm->id.next) { + bone_version_238(&arm->bonebase); + arm->deformflag |= ARM_DEF_VGROUP; + } + + for (me=main->mesh.first; me; me= me->id.next) { + if (!me->medge) { + make_edges(me, 1); /* 1 = use mface->edcode */ + } + else { + mesh_strip_loose_faces(me); + } + } + + for (key= main->key.first; key; key= key->id.next) { + KeyBlock *kb; + int index = 1; + + for (kb= key->block.first; kb; kb= kb->next) { + if (kb==key->refkey) { + if (kb->name[0]==0) + strcpy(kb->name, "Basis"); + } + else { + if (kb->name[0]==0) { + BLI_snprintf(kb->name, sizeof(kb->name), "Key %d", index); + } + index++; + } + } + } + } + if (main->versionfile <= 239) { + bArmature *arm; + Object *ob; + Scene *sce= main->scene.first; + Camera *cam= main->camera.first; + Material *ma= main->mat.first; + int set_passepartout= 0; + + /* deformflag is local in modifier now */ + for (ob=main->object.first; ob; ob= ob->id.next) { + ModifierData *md; + + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Armature) { + ArmatureModifierData *amd = (ArmatureModifierData*) md; + if (amd->object && amd->deformflag==0) { + Object *oba= blo_do_versions_newlibadr(fd, lib, amd->object); + arm= blo_do_versions_newlibadr(fd, lib, oba->data); + amd->deformflag= arm->deformflag; + } + } + } + } + + /* updating stepsize for ghost drawing */ + for (arm= main->armature.first; arm; arm= arm->id.next) { + if (arm->ghostsize==0) arm->ghostsize=1; + bone_version_239(&arm->bonebase); + if (arm->layer==0) arm->layer= 1; + } + + for (;sce;sce= sce->id.next) { + /* make 'innervert' the default subdivide type, for backwards compat */ + sce->toolsettings->cornertype=1; + + if (sce->r.scemode & R_PASSEPARTOUT) { + set_passepartout= 1; + sce->r.scemode &= ~R_PASSEPARTOUT; + } + /* gauss is filter variable now */ + if (sce->r.mode & R_GAUSS) { + sce->r.filtertype= R_FILTER_GAUSS; + sce->r.mode &= ~R_GAUSS; + } + } + + for (;cam; cam= cam->id.next) { + if (set_passepartout) + cam->flag |= CAM_SHOWPASSEPARTOUT; + + /* make sure old cameras have title safe on */ + if (!(cam->flag & CAM_SHOWTITLESAFE)) + cam->flag |= CAM_SHOWTITLESAFE; + + /* set an appropriate camera passepartout alpha */ + if (!(cam->passepartalpha)) cam->passepartalpha = 0.2f; + } + + for (; ma; ma= ma->id.next) { + if (ma->strand_sta==0.0f) { + ma->strand_sta= ma->strand_end= 1.0f; + ma->mode |= MA_TANGENT_STR; + } + if (ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF; + } + } + + if (main->versionfile <= 241) { + Object *ob; + Tex *tex; + Scene *sce; + World *wo; + Lamp *la; + Material *ma; + bArmature *arm; + bNodeTree *ntree; + + for (wo = main->world.first; wo; wo= wo->id.next) { + /* Migrate to Bullet for games, except for the NaN versions */ + /* People can still explicitly choose for Sumo (after 2.42 is out) */ + if (main->versionfile > 225) + wo->physicsEngine = WOPHY_BULLET; + if (WO_AODIST == wo->aomode) + wo->aocolor= WO_AOPLAIN; + } + + /* updating layers still */ + for (arm= main->armature.first; arm; arm= arm->id.next) { + bone_version_239(&arm->bonebase); + if (arm->layer==0) arm->layer= 1; + } + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->audio.mixrate==0) sce->audio.mixrate= 44100; + + if (sce->r.xparts<2) sce->r.xparts= 4; + if (sce->r.yparts<2) sce->r.yparts= 4; + /* adds default layer */ + if (sce->r.layers.first==NULL) + scene_add_render_layer(sce, NULL); + else { + SceneRenderLayer *srl; + /* new layer flag for sky, was default for solid */ + for (srl= sce->r.layers.first; srl; srl= srl->next) { + if (srl->layflag & SCE_LAY_SOLID) + srl->layflag |= SCE_LAY_SKY; + srl->passflag &= (SCE_PASS_COMBINED|SCE_PASS_Z|SCE_PASS_NORMAL|SCE_PASS_VECTOR); + } + } + + /* node version changes */ + if (sce->nodetree) + ntree_version_241(sce->nodetree); + + /* uv calculation options moved to toolsettings */ + if (sce->toolsettings->uvcalc_radius == 0.0f) { + sce->toolsettings->uvcalc_radius = 1.0f; + sce->toolsettings->uvcalc_cubesize = 1.0f; + sce->toolsettings->uvcalc_mapdir = 1; + sce->toolsettings->uvcalc_mapalign = 1; + sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES; + sce->toolsettings->unwrapper = 1; + } + + if (sce->r.mode & R_PANORAMA) { + /* all these checks to ensure saved files with svn version keep working... */ + if (sce->r.xsch < sce->r.ysch) { + Object *obc= blo_do_versions_newlibadr(fd, lib, sce->camera); + if (obc && obc->type==OB_CAMERA) { + Camera *cam= blo_do_versions_newlibadr(fd, lib, obc->data); + if (cam->lens>=10.0f) { + sce->r.xsch*= sce->r.xparts; + cam->lens*= (float)sce->r.ysch/(float)sce->r.xsch; + } + } + } + } + } + + for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) + ntree_version_241(ntree); + + for (la= main->lamp.first; la; la= la->id.next) + if (la->buffers==0) + la->buffers= 1; + + for (tex= main->tex.first; tex; tex= tex->id.next) { + if (tex->env && tex->env->viewscale==0.0f) + tex->env->viewscale= 1.0f; +// tex->imaflag |= TEX_GAUSS_MIP; + } + + /* for empty drawsize and drawtype */ + for (ob=main->object.first; ob; ob= ob->id.next) { + if (ob->empty_drawsize==0.0f) { + ob->empty_drawtype = OB_ARROWS; + ob->empty_drawsize = 1.0; + } + } + + for (ma= main->mat.first; ma; ma= ma->id.next) { + /* stucci returns intensity from now on */ + int a; + for (a=0; a<MAX_MTEX; a++) { + if (ma->mtex[a] && ma->mtex[a]->tex) { + tex= blo_do_versions_newlibadr(fd, lib, ma->mtex[a]->tex); + if (tex && tex->type==TEX_STUCCI) + ma->mtex[a]->mapto &= ~(MAP_COL|MAP_SPEC|MAP_REF); + } + } + /* transmissivity defaults */ + if (ma->tx_falloff==0.0f) ma->tx_falloff= 1.0f; + } + + /* during 2.41 images with this name were used for viewer node output, lets fix that */ + if (main->versionfile == 241) { + Image *ima; + for (ima= main->image.first; ima; ima= ima->id.next) + if (strcmp(ima->name, "Compositor")==0) { + strcpy(ima->id.name+2, "Viewer Node"); + strcpy(ima->name, "Viewer Node"); + } + } + } + + if (main->versionfile <= 242) { + Scene *sce; + bScreen *sc; + Object *ob; + Curve *cu; + Material *ma; + Mesh *me; + Group *group; + Nurb *nu; + BezTriple *bezt; + BPoint *bp; + bNodeTree *ntree; + int a; + + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + sa= sc->areabase.first; + while (sa) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D*) sl; + if (v3d->gridsubdiv == 0) + v3d->gridsubdiv = 10; + } + } + sa = sa->next; + } + } + + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->toolsettings->select_thresh == 0.0f) + sce->toolsettings->select_thresh= 0.01f; + if (sce->toolsettings->clean_thresh == 0.0f) + sce->toolsettings->clean_thresh = 0.1f; + + if (sce->r.threads==0) { + if (sce->r.mode & R_THREADS) + sce->r.threads= 2; + else + sce->r.threads= 1; + } + if (sce->nodetree) + ntree_version_242(sce->nodetree); + } + + for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) + ntree_version_242(ntree); + + /* add default radius values to old curve points */ + for (cu= main->curve.first; cu; cu= cu->id.next) { + for (nu= cu->nurb.first; nu; nu= nu->next) { + if (nu) { + if (nu->bezt) { + for (bezt=nu->bezt, a=0; a<nu->pntsu; a++, bezt++) { + if (!bezt->radius) bezt->radius= 1.0; + } + } + else if (nu->bp) { + for (bp=nu->bp, a=0; a<nu->pntsu*nu->pntsv; a++, bp++) { + if (!bp->radius) bp->radius= 1.0; + } + } + } + } + } + + for (ob = main->object.first; ob; ob= ob->id.next) { + ModifierData *md; + ListBase *list; + list = &ob->constraints; + + /* check for already existing MinMax (floor) constraint + * and update the sticky flagging */ + + if (list) { + bConstraint *curcon; + for (curcon = list->first; curcon; curcon=curcon->next) { + switch (curcon->type) { + case CONSTRAINT_TYPE_MINMAX: + { + bMinMaxConstraint *data = curcon->data; + if (data->sticky==1) + data->flag |= MINMAX_STICKY; + else + data->flag &= ~MINMAX_STICKY; + } + break; + case CONSTRAINT_TYPE_ROTLIKE: + { + bRotateLikeConstraint *data = curcon->data; + + /* version patch from buttons_object.c */ + if (data->flag==0) + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + } + break; + } + } + } + + if (ob->type == OB_ARMATURE) { + if (ob->pose) { + bConstraint *curcon; + bPoseChannel *pchan; + for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { + for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { + switch (curcon->type) { + case CONSTRAINT_TYPE_MINMAX: + { + bMinMaxConstraint *data = curcon->data; + if (data->sticky==1) + data->flag |= MINMAX_STICKY; + else + data->flag &= ~MINMAX_STICKY; + } + break; + case CONSTRAINT_TYPE_KINEMATIC: + { + bKinematicConstraint *data = curcon->data; + if (!(data->flag & CONSTRAINT_IK_POS)) { + data->flag |= CONSTRAINT_IK_POS; + data->flag |= CONSTRAINT_IK_STRETCH; + } + } + break; + case CONSTRAINT_TYPE_ROTLIKE: + { + bRotateLikeConstraint *data = curcon->data; + + /* version patch from buttons_object.c */ + if (data->flag==0) + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + } + break; + } + } + } + } + } + + /* copy old object level track settings to curve modifers */ + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Curve) { + CurveModifierData *cmd = (CurveModifierData*) md; + + if (cmd->defaxis == 0) cmd->defaxis = ob->trackflag+1; + } + } + + } + + for (ma = main->mat.first; ma; ma= ma->id.next) { + if (ma->shad_alpha==0.0f) + ma->shad_alpha= 1.0f; + if (ma->nodetree) + ntree_version_242(ma->nodetree); + } + + for (me=main->mesh.first; me; me=me->id.next) + customdata_version_242(me); + + for (group= main->group.first; group; group= group->id.next) + if (group->layer==0) + group->layer= (1<<20)-1; + + /* now, subversion control! */ + if (main->subversionfile < 3) { + Image *ima; + Tex *tex; + + /* Image refactor initialize */ + for (ima= main->image.first; ima; ima= ima->id.next) { + ima->source= IMA_SRC_FILE; + ima->type= IMA_TYPE_IMAGE; + + ima->gen_x= 256; ima->gen_y= 256; + ima->gen_type= 1; + + if (0==strncmp(ima->id.name+2, "Viewer Node", sizeof(ima->id.name)-2)) { + ima->source= IMA_SRC_VIEWER; + ima->type= IMA_TYPE_COMPOSITE; + } + if (0==strncmp(ima->id.name+2, "Render Result", sizeof(ima->id.name)-2)) { + ima->source= IMA_SRC_VIEWER; + ima->type= IMA_TYPE_R_RESULT; + } + + } + for (tex= main->tex.first; tex; tex= tex->id.next) { + if (tex->type==TEX_IMAGE && tex->ima) { + ima= blo_do_versions_newlibadr(fd, lib, tex->ima); + if (tex->imaflag & TEX_ANIM5_) + ima->source= IMA_SRC_MOVIE; + if (tex->imaflag & TEX_FIELDS_) + ima->flag |= IMA_FIELDS; + if (tex->imaflag & TEX_STD_FIELD_) + ima->flag |= IMA_STD_FIELD; + } + tex->iuser.frames= tex->frames; + tex->iuser.fie_ima= (char)tex->fie_ima; + tex->iuser.offset= tex->offset; + tex->iuser.sfra= tex->sfra; + tex->iuser.cycl= (tex->imaflag & TEX_ANIMCYCLIC_)!=0; + } + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->nodetree) + do_version_ntree_242_2(sce->nodetree); + } + for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) + do_version_ntree_242_2(ntree); + for (ma = main->mat.first; ma; ma= ma->id.next) + if (ma->nodetree) + do_version_ntree_242_2(ma->nodetree); + + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_IMAGE) + ((SpaceImage *)sl)->iuser.fie_ima= 2; + else if (sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + BGpic *bgpic; + for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) + bgpic->iuser.fie_ima= 2; + } + } + } + } + } + + if (main->subversionfile < 4) { + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->r.bake_mode= 1; /* prevent to include render stuff here */ + sce->r.bake_filter= 2; + sce->r.bake_osa= 5; + sce->r.bake_flag= R_BAKE_CLEAR; + } + } + + if (main->subversionfile < 5) { + for (sce= main->scene.first; sce; sce= sce->id.next) { + /* improved triangle to quad conversion settings */ + if (sce->toolsettings->jointrilimit==0.0f) + sce->toolsettings->jointrilimit= 0.8f; + } + } + } + if (main->versionfile <= 243) { + Object *ob= main->object.first; + Material *ma; + + for (ma=main->mat.first; ma; ma= ma->id.next) { + if (ma->sss_scale==0.0f) { + ma->sss_radius[0]= 1.0f; + ma->sss_radius[1]= 1.0f; + ma->sss_radius[2]= 1.0f; + ma->sss_col[0]= 0.8f; + ma->sss_col[1]= 0.8f; + ma->sss_col[2]= 0.8f; + ma->sss_error= 0.05f; + ma->sss_scale= 0.1f; + ma->sss_ior= 1.3f; + ma->sss_colfac= 1.0f; + ma->sss_texfac= 0.0f; + } + if (ma->sss_front==0 && ma->sss_back==0) { + ma->sss_front= 1.0f; + ma->sss_back= 1.0f; + } + if (ma->sss_col[0]==0 && ma->sss_col[1]==0 && ma->sss_col[2]==0) { + ma->sss_col[0]= ma->r; + ma->sss_col[1]= ma->g; + ma->sss_col[2]= ma->b; + } + } + + for (; ob; ob= ob->id.next) { + bDeformGroup *curdef; + + for (curdef= ob->defbase.first; curdef; curdef=curdef->next) { + /* replace an empty-string name with unique name */ + if (curdef->name[0] == '\0') { + defgroup_unique_name(curdef, ob); + } + } + + if (main->versionfile < 243 || main->subversionfile < 1) { + ModifierData *md; + + /* translate old mirror modifier axis values to new flags */ + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Mirror) { + MirrorModifierData *mmd = (MirrorModifierData*) md; + + switch (mmd->axis) { + case 0: + mmd->flag |= MOD_MIR_AXIS_X; + break; + case 1: + mmd->flag |= MOD_MIR_AXIS_Y; + break; + case 2: + mmd->flag |= MOD_MIR_AXIS_Z; + break; + } + + mmd->axis = 0; + } + } + } + } + + /* render layer added, this is not the active layer */ + if (main->versionfile <= 243 || main->subversionfile < 2) { + Mesh *me; + for (me=main->mesh.first; me; me=me->id.next) + customdata_version_243(me); + } + + } + + if (main->versionfile <= 244) { + Scene *sce; + bScreen *sc; + Lamp *la; + World *wrld; + + if (main->versionfile != 244 || main->subversionfile < 2) { + for (sce= main->scene.first; sce; sce= sce->id.next) + sce->r.mode |= R_SSS; + + /* correct older action editors - incorrect scrolling */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + sa= sc->areabase.first; + while (sa) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + if (sl->spacetype==SPACE_ACTION) { + SpaceAction *saction= (SpaceAction*) sl; + + saction->v2d.tot.ymin = -1000.0; + saction->v2d.tot.ymax = 0.0; + + saction->v2d.cur.ymin = -75.0; + saction->v2d.cur.ymax = 5.0; + } + } + sa = sa->next; + } + } + } + if (main->versionfile != 244 || main->subversionfile < 3) { + /* constraints recode version patch used to be here. Moved to 245 now... */ + + + for (wrld=main->world.first; wrld; wrld= wrld->id.next) { + if (wrld->mode & WO_AMB_OCC) + wrld->ao_samp_method = WO_AOSAMP_CONSTANT; + else + wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY; + + wrld->ao_adapt_thresh = 0.005f; + } + + for (la=main->lamp.first; la; la= la->id.next) { + if (la->type == LA_AREA) + la->ray_samp_method = LA_SAMP_CONSTANT; + else + la->ray_samp_method = LA_SAMP_HALTON; + + la->adapt_thresh = 0.001f; + } + } + } + if (main->versionfile <= 245) { + Scene *sce; + Object *ob; + Image *ima; + Lamp *la; + Material *ma; + ParticleSettings *part; + World *wrld; + Mesh *me; + bNodeTree *ntree; + Tex *tex; + ModifierData *md; + ParticleSystem *psys; + + /* unless the file was created 2.44.3 but not 2.45, update the constraints */ + if ( !(main->versionfile==244 && main->subversionfile==3) && + ((main->versionfile<245) || (main->versionfile==245 && main->subversionfile==0)) ) + { + for (ob = main->object.first; ob; ob= ob->id.next) { + ListBase *list; + list = &ob->constraints; + + /* fix up constraints due to constraint recode changes (originally at 2.44.3) */ + if (list) { + bConstraint *curcon; + for (curcon = list->first; curcon; curcon=curcon->next) { + /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ + if (curcon->flag & 0x20) { + curcon->ownspace = CONSTRAINT_SPACE_LOCAL; + curcon->tarspace = CONSTRAINT_SPACE_LOCAL; + } + + switch (curcon->type) { + case CONSTRAINT_TYPE_LOCLIMIT: + { + bLocLimitConstraint *data= (bLocLimitConstraint *)curcon->data; + + /* old limit without parent option for objects */ + if (data->flag2) + curcon->ownspace = CONSTRAINT_SPACE_LOCAL; + } + break; + } + } + } + + /* correctly initialize constinv matrix */ + unit_m4(ob->constinv); + + if (ob->type == OB_ARMATURE) { + if (ob->pose) { + bConstraint *curcon; + bPoseChannel *pchan; + + for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { + /* make sure constraints are all up to date */ + for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { + /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ + if (curcon->flag & 0x20) { + curcon->ownspace = CONSTRAINT_SPACE_LOCAL; + curcon->tarspace = CONSTRAINT_SPACE_LOCAL; + } + + switch (curcon->type) { + case CONSTRAINT_TYPE_ACTION: + { + bActionConstraint *data= (bActionConstraint *)curcon->data; + + /* 'data->local' used to mean that target was in local-space */ + if (data->local) + curcon->tarspace = CONSTRAINT_SPACE_LOCAL; + } + break; + } + } + + /* correctly initialize constinv matrix */ + unit_m4(pchan->constinv); + } + } + } + } + } + + /* fix all versions before 2.45 */ + if (main->versionfile != 245) { + + /* repair preview from 242 - 244*/ + for (ima= main->image.first; ima; ima= ima->id.next) { + ima->preview = NULL; + } + } + + /* add point caches */ + for (ob=main->object.first; ob; ob=ob->id.next) { + if (ob->soft && !ob->soft->pointcache) + ob->soft->pointcache= BKE_ptcache_add(&ob->soft->ptcaches); + + for (psys=ob->particlesystem.first; psys; psys=psys->next) { + if (psys->pointcache) { + if (psys->pointcache->flag & PTCACHE_BAKED && (psys->pointcache->flag & PTCACHE_DISK_CACHE)==0) { + printf("Old memory cache isn't supported for particles, so re-bake the simulation!\n"); + psys->pointcache->flag &= ~PTCACHE_BAKED; + } + } + else + psys->pointcache= BKE_ptcache_add(&psys->ptcaches); + } + + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Cloth) { + ClothModifierData *clmd = (ClothModifierData*) md; + if (!clmd->point_cache) + clmd->point_cache= BKE_ptcache_add(&clmd->ptcaches); + } + } + } + + /* Copy over old per-level multires vertex data + * into a single vertex array in struct Multires */ + for (me = main->mesh.first; me; me=me->id.next) { + if (me->mr && !me->mr->verts) { + MultiresLevel *lvl = me->mr->levels.last; + if (lvl) { + me->mr->verts = lvl->verts; + lvl->verts = NULL; + /* Don't need the other vert arrays */ + for (lvl = lvl->prev; lvl; lvl = lvl->prev) { + MEM_freeN(lvl->verts); + lvl->verts = NULL; + } + } + } + } + + if (main->versionfile != 245 || main->subversionfile < 1) { + for (la=main->lamp.first; la; la= la->id.next) { + if (la->mode & LA_QUAD) la->falloff_type = LA_FALLOFF_SLIDERS; + else la->falloff_type = LA_FALLOFF_INVLINEAR; + + if (la->curfalloff == NULL) { + la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f); + curvemapping_initialize(la->curfalloff); + } + } + } + + for (ma=main->mat.first; ma; ma= ma->id.next) { + if (ma->samp_gloss_mir == 0) { + ma->gloss_mir = ma->gloss_tra= 1.0f; + ma->aniso_gloss_mir = 1.0f; + ma->samp_gloss_mir = ma->samp_gloss_tra= 18; + ma->adapt_thresh_mir = ma->adapt_thresh_tra = 0.005f; + ma->dist_mir = 0.0f; + ma->fadeto_mir = MA_RAYMIR_FADETOSKY; + } + + if (ma->strand_min == 0.0f) + ma->strand_min= 1.0f; + } + + for (part=main->particle.first; part; part=part->id.next) { + if (part->ren_child_nbr==0) + part->ren_child_nbr= part->child_nbr; + + if (part->simplify_refsize==0) { + part->simplify_refsize= 1920; + part->simplify_rate= 1.0f; + part->simplify_transition= 0.1f; + part->simplify_viewport= 0.8f; + } + } + + for (wrld=main->world.first; wrld; wrld= wrld->id.next) { + if (wrld->ao_approx_error == 0.0f) + wrld->ao_approx_error= 0.25f; + } + + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->nodetree) + ntree_version_245(fd, lib, sce->nodetree); + + if (sce->r.simplify_shadowsamples == 0) { + sce->r.simplify_subsurf= 6; + sce->r.simplify_particles= 1.0f; + sce->r.simplify_shadowsamples= 16; + sce->r.simplify_aosss= 1.0f; + } + + if (sce->r.cineongamma == 0) { + sce->r.cineonblack= 95; + sce->r.cineonwhite= 685; + sce->r.cineongamma= 1.7f; + } + } + + for (ntree=main->nodetree.first; ntree; ntree= ntree->id.next) + ntree_version_245(fd, lib, ntree); + + /* fix for temporary flag changes during 245 cycle */ + for (ima= main->image.first; ima; ima= ima->id.next) { + if (ima->flag & IMA_OLD_PREMUL) { + ima->flag &= ~IMA_OLD_PREMUL; + ima->flag |= IMA_DO_PREMUL; + } + } + + for (tex=main->tex.first; tex; tex=tex->id.next) { + if (tex->iuser.flag & IMA_OLD_PREMUL) { + tex->iuser.flag &= ~IMA_OLD_PREMUL; + tex->iuser.flag |= IMA_DO_PREMUL; + + } + + ima= blo_do_versions_newlibadr(fd, lib, tex->ima); + if (ima && (tex->iuser.flag & IMA_DO_PREMUL)) { + ima->flag &= ~IMA_OLD_PREMUL; + ima->flag |= IMA_DO_PREMUL; + } + } + } + + /* sanity check for skgen + * */ + { + Scene *sce; + for (sce=main->scene.first; sce; sce = sce->id.next) { + if (sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[1] || + sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[2] || + sce->toolsettings->skgen_subdivisions[1] == sce->toolsettings->skgen_subdivisions[2]) + { + sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; + sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; + sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; + } + } + } + + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 2)) { + Image *ima; + + /* initialize 1:1 Aspect */ + for (ima= main->image.first; ima; ima= ima->id.next) { + ima->aspx = ima->aspy = 1.0f; + } + + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 4)) { + bArmature *arm; + ModifierData *md; + Object *ob; + + for (arm= main->armature.first; arm; arm= arm->id.next) + arm->deformflag |= ARM_DEF_B_BONE_REST; + + for (ob = main->object.first; ob; ob= ob->id.next) { + for (md=ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Armature) + ((ArmatureModifierData*)md)->deformflag |= ARM_DEF_B_BONE_REST; + } + } + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 5)) { + /* foreground color needs to be something other then black */ + Scene *sce; + for (sce= main->scene.first; sce; sce=sce->id.next) { + sce->r.fg_stamp[0] = sce->r.fg_stamp[1] = sce->r.fg_stamp[2] = 0.8f; + sce->r.fg_stamp[3] = 1.0f; /* don't use text alpha yet */ + sce->r.bg_stamp[3] = 0.25f; /* make sure the background has full alpha */ + } + } + + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 6)) { + Scene *sce; + /* fix frs_sec_base */ + for (sce= main->scene.first; sce; sce= sce->id.next) { + if (sce->r.frs_sec_base == 0) { + sce->r.frs_sec_base = 1; + } + } + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 7)) { + Object *ob; + bPoseChannel *pchan; + bConstraint *con; + bConstraintTarget *ct; + + for (ob = main->object.first; ob; ob= ob->id.next) { + if (ob->pose) { + for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { + for (con=pchan->constraints.first; con; con=con->next) { + if (con->type == CONSTRAINT_TYPE_PYTHON) { + bPythonConstraint *data= (bPythonConstraint *)con->data; + if (data->tar) { + /* version patching needs to be done */ + ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); + + ct->tar = data->tar; + BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); + ct->space = con->tarspace; + + BLI_addtail(&data->targets, ct); + data->tarnum++; + + /* clear old targets to avoid problems */ + data->tar = NULL; + data->subtarget[0]= '\0'; + } + } + else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { + bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; + + /* new headtail functionality makes Bone-Tip function obsolete */ + if (data->flag & LOCLIKE_TIP) + con->headtail = 1.0f; + } + } + } + } + + for (con=ob->constraints.first; con; con=con->next) { + if (con->type==CONSTRAINT_TYPE_PYTHON) { + bPythonConstraint *data= (bPythonConstraint *)con->data; + if (data->tar) { + /* version patching needs to be done */ + ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); + + ct->tar = data->tar; + BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); + ct->space = con->tarspace; + + BLI_addtail(&data->targets, ct); + data->tarnum++; + + /* clear old targets to avoid problems */ + data->tar = NULL; + data->subtarget[0]= '\0'; + } + } + else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { + bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; + + /* new headtail functionality makes Bone-Tip function obsolete */ + if (data->flag & LOCLIKE_TIP) + con->headtail = 1.0f; + } + } + + if (ob->soft && ob->soft->keys) { + SoftBody *sb = ob->soft; + int k; + + for (k=0; k<sb->totkey; k++) { + if (sb->keys[k]) + MEM_freeN(sb->keys[k]); + } + + MEM_freeN(sb->keys); + + sb->keys = NULL; + sb->totkey = 0; + } + } + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 8)) { + Scene *sce; + Object *ob; + PartEff *paf=NULL; + + for (ob = main->object.first; ob; ob= ob->id.next) { + if (ob->soft && ob->soft->keys) { + SoftBody *sb = ob->soft; + int k; + + for (k=0; k<sb->totkey; k++) { + if (sb->keys[k]) + MEM_freeN(sb->keys[k]); + } + + MEM_freeN(sb->keys); + + sb->keys = NULL; + sb->totkey = 0; + } + + /* convert old particles to new system */ + if ((paf = blo_do_version_give_parteff_245(ob))) { + ParticleSystem *psys; + ModifierData *md; + ParticleSystemModifierData *psmd; + ParticleSettings *part; + + /* create new particle system */ + psys = MEM_callocN(sizeof(ParticleSystem), "particle_system"); + psys->pointcache = BKE_ptcache_add(&psys->ptcaches); + + part = psys->part = psys_new_settings("ParticleSettings", main); + + /* needed for proper libdata lookup */ + blo_do_versions_oldnewmap_insert(fd->libmap, psys->part, psys->part, 0); + part->id.lib= ob->id.lib; + + part->id.us--; + part->id.flag |= (ob->id.flag & LIB_NEEDLINK); + + psys->totpart=0; + psys->flag= PSYS_ENABLED|PSYS_CURRENT; + + BLI_addtail(&ob->particlesystem, psys); + + md= modifier_new(eModifierType_ParticleSystem); + BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); + psmd= (ParticleSystemModifierData*) md; + psmd->psys=psys; + BLI_addtail(&ob->modifiers, md); + + /* convert settings from old particle system */ + /* general settings */ + part->totpart = MIN2(paf->totpart, 100000); + part->sta = paf->sta; + part->end = paf->end; + part->lifetime = paf->lifetime; + part->randlife = paf->randlife; + psys->seed = paf->seed; + part->disp = paf->disp; + part->omat = paf->mat[0]; + part->hair_step = paf->totkey; + + part->eff_group = paf->group; + + /* old system didn't interpolate between keypoints at render time */ + part->draw_step = part->ren_step = 0; + + /* physics */ + part->normfac = paf->normfac * 25.0f; + part->obfac = paf->obfac; + part->randfac = paf->randfac * 25.0f; + part->dampfac = paf->damp; + copy_v3_v3(part->acc, paf->force); + + /* flags */ + if (paf->stype & PAF_VECT) { + if (paf->flag & PAF_STATIC) { + /* new hair lifetime is always 100.0f */ + float fac = paf->lifetime / 100.0f; + + part->draw_as = PART_DRAW_PATH; + part->type = PART_HAIR; + psys->recalc |= PSYS_RECALC_REDO; + + part->normfac *= fac; + part->randfac *= fac; + } + else { + part->draw_as = PART_DRAW_LINE; + part->draw |= PART_DRAW_VEL_LENGTH; + part->draw_line[1] = 0.04f; + } + } + + part->rotmode = PART_ROT_VEL; + + part->flag |= (paf->flag & PAF_BSPLINE) ? PART_HAIR_BSPLINE : 0; + part->flag |= (paf->flag & PAF_TRAND) ? PART_TRAND : 0; + part->flag |= (paf->flag & PAF_EDISTR) ? PART_EDISTR : 0; + part->flag |= (paf->flag & PAF_UNBORN) ? PART_UNBORN : 0; + part->flag |= (paf->flag & PAF_DIED) ? PART_DIED : 0; + part->from |= (paf->flag & PAF_FACE) ? PART_FROM_FACE : 0; + part->draw |= (paf->flag & PAF_SHOWE) ? PART_DRAW_EMITTER : 0; + + psys->vgroup[PSYS_VG_DENSITY] = paf->vertgroup; + psys->vgroup[PSYS_VG_VEL] = paf->vertgroup_v; + psys->vgroup[PSYS_VG_LENGTH] = paf->vertgroup_v; + + /* dupliobjects */ + if (ob->transflag & OB_DUPLIVERTS) { + Object *dup = main->object.first; + + for (; dup; dup= dup->id.next) { + if (ob == blo_do_versions_newlibadr(fd, lib, dup->parent)) { + part->dup_ob = dup; + ob->transflag |= OB_DUPLIPARTS; + ob->transflag &= ~OB_DUPLIVERTS; + + part->draw_as = PART_DRAW_OB; + + /* needed for proper libdata lookup */ + blo_do_versions_oldnewmap_insert(fd->libmap, dup, dup, 0); + } + } + } + + + { + FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); + if (fluidmd && fluidmd->fss && fluidmd->fss->type == OB_FLUIDSIM_PARTICLE) + part->type = PART_FLUID; + } + + do_version_free_effects_245(&ob->effect); + + printf("Old particle system converted to new system.\n"); + } + } + + for (sce= main->scene.first; sce; sce=sce->id.next) { + ParticleEditSettings *pset= &sce->toolsettings->particle; + int a; + + if (pset->brush[0].size == 0) { + pset->flag= PE_KEEP_LENGTHS|PE_LOCK_FIRST|PE_DEFLECT_EMITTER; + pset->emitterdist= 0.25f; + pset->totrekey= 5; + pset->totaddkey= 5; + pset->brushtype= PE_BRUSH_NONE; + + for (a=0; a<PE_TOT_BRUSH; a++) { + pset->brush[a].strength= 50; + pset->brush[a].size= 50; + pset->brush[a].step= 10; + } + + pset->brush[PE_BRUSH_CUT].strength= 100; + } + } + } + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 9)) { + Material *ma; + int a; + + for (ma=main->mat.first; ma; ma= ma->id.next) + if (ma->mode & MA_NORMAP_TANG) + for (a=0; a<MAX_MTEX; a++) + if (ma->mtex[a] && ma->mtex[a]->tex) + ma->mtex[a]->normapspace = MTEX_NSPACE_TANGENT; + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 10)) { + Object *ob; + + /* dupliface scale */ + for (ob= main->object.first; ob; ob= ob->id.next) + ob->dupfacesca = 1.0f; + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 11)) { + Object *ob; + bActionStrip *strip; + + /* nla-strips - scale */ + for (ob= main->object.first; ob; ob= ob->id.next) { + for (strip= ob->nlastrips.first; strip; strip= strip->next) { + float length, actlength, repeat; + + if (strip->flag & ACTSTRIP_USESTRIDE) + repeat= 1.0f; + else + repeat= strip->repeat; + + length = strip->end-strip->start; + if (length == 0.0f) length= 1.0f; + actlength = strip->actend-strip->actstart; + + strip->scale = length / (repeat * actlength); + if (strip->scale == 0.0f) strip->scale= 1.0f; + } + if (ob->soft) { + ob->soft->inpush = ob->soft->inspring; + ob->soft->shearstiff = 1.0f; + } + } + } + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 14)) { + Scene *sce; + Sequence *seq; + + for (sce=main->scene.first; sce; sce=sce->id.next) { + SEQ_BEGIN (sce->ed, seq) + { + if (seq->blend_mode == 0) + seq->blend_opacity = 100.0f; + } + SEQ_END + } + } + + /*fix broken group lengths in id properties*/ + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 15)) { + idproperties_fix_group_lengths(main->scene); + idproperties_fix_group_lengths(main->library); + idproperties_fix_group_lengths(main->object); + idproperties_fix_group_lengths(main->mesh); + idproperties_fix_group_lengths(main->curve); + idproperties_fix_group_lengths(main->mball); + idproperties_fix_group_lengths(main->mat); + idproperties_fix_group_lengths(main->tex); + idproperties_fix_group_lengths(main->image); + idproperties_fix_group_lengths(main->latt); + idproperties_fix_group_lengths(main->lamp); + idproperties_fix_group_lengths(main->camera); + idproperties_fix_group_lengths(main->ipo); + idproperties_fix_group_lengths(main->key); + idproperties_fix_group_lengths(main->world); + idproperties_fix_group_lengths(main->screen); + idproperties_fix_group_lengths(main->script); + idproperties_fix_group_lengths(main->vfont); + idproperties_fix_group_lengths(main->text); + idproperties_fix_group_lengths(main->sound); + idproperties_fix_group_lengths(main->group); + idproperties_fix_group_lengths(main->armature); + idproperties_fix_group_lengths(main->action); + idproperties_fix_group_lengths(main->nodetree); + idproperties_fix_group_lengths(main->brush); + idproperties_fix_group_lengths(main->particle); + } + + /* sun/sky */ + if (main->versionfile < 246) { + Object *ob; + bActuator *act; + + /* dRot actuator change direction in 2.46 */ + for (ob = main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_OBJECT) { + bObjectActuator *ba= act->data; + + ba->drot[0] = -ba->drot[0]; + ba->drot[1] = -ba->drot[1]; + ba->drot[2] = -ba->drot[2]; + } + } + } + } + + // convert fluids to modifier + if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { + Object *ob; + + for (ob = main->object.first; ob; ob= ob->id.next) { + if (ob->fluidsimSettings) { + FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim); + BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd); + + MEM_freeN(fluidmd->fss); + fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings); + fluidmd->fss->ipo = blo_do_versions_newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo); + MEM_freeN(ob->fluidsimSettings); + + fluidmd->fss->lastgoodframe = INT_MAX; + fluidmd->fss->flag = 0; + fluidmd->fss->meshVelocities = NULL; + } + } + } + + + if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { + Mesh *me; + + for (me=main->mesh.first; me; me= me->id.next) + alphasort_version_246(fd, lib, me); + } + + if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { + Object *ob; + for (ob = main->object.first; ob; ob= ob->id.next) { + if (ob->pd && (ob->pd->forcefield == PFIELD_WIND)) + ob->pd->f_noise = 0.0f; + } + } + + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 2)) { + Object *ob; + for (ob = main->object.first; ob; ob= ob->id.next) { + ob->gameflag |= OB_COLLISION; + ob->margin = 0.06f; + } + } + + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 3)) { + Object *ob; + for (ob = main->object.first; ob; ob= ob->id.next) { + // Starting from subversion 3, ACTOR is a separate feature. + // Before it was conditioning all the other dynamic flags + if (!(ob->gameflag & OB_ACTOR)) + ob->gameflag &= ~(OB_GHOST|OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION_RESPONSE); + /* suitable default for older files */ + } + } + + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 5)) { + Lamp *la= main->lamp.first; + for (; la; la= la->id.next) { + la->skyblendtype= MA_RAMP_ADD; + la->skyblendfac= 1.0f; + } + } + + /* set the curve radius interpolation to 2.47 default - easy */ + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 6)) { + Curve *cu; + Nurb *nu; + + for (cu= main->curve.first; cu; cu= cu->id.next) { + for (nu= cu->nurb.first; nu; nu= nu->next) { + if (nu) { + nu->radius_interp = 3; + + /* resolu and resolv are now used differently for surfaces + * rather than using the resolution to define the entire number of divisions, + * use it for the number of divisions per segment + */ + if (nu->pntsv > 1) { + nu->resolu = MAX2( 1, (int)(((float)nu->resolu / (float)nu->pntsu)+0.5f) ); + nu->resolv = MAX2( 1, (int)(((float)nu->resolv / (float)nu->pntsv)+0.5f) ); + } + } + } + } + } + /* direction constraint actuators were always local in previous version */ + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 7)) { + bActuator *act; + Object *ob; + + for (ob = main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_CONSTRAINT) { + bConstraintActuator *coa = act->data; + if (coa->type == ACT_CONST_TYPE_DIST) { + coa->flag |= ACT_CONST_LOCAL; + } + } + } + } + } + + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 9)) { + Lamp *la= main->lamp.first; + for (; la; la= la->id.next) { + la->sky_exposure= 1.0f; + } + } + + /* BGE message actuators needed OB prefix, very confusing */ + if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 10)) { + bActuator *act; + Object *ob; + + for (ob = main->object.first; ob; ob= ob->id.next) { + for (act= ob->actuators.first; act; act= act->next) { + if (act->type == ACT_MESSAGE) { + bMessageActuator *msgAct = (bMessageActuator *) act->data; + if (BLI_strnlen(msgAct->toPropName, 3) > 2) { + /* strip first 2 chars, would have only worked if these were OB anyway */ + memmove(msgAct->toPropName, msgAct->toPropName + 2, sizeof(msgAct->toPropName) - 2); + } + else { + msgAct->toPropName[0] = '\0'; + } + } + } + } + } + + if (main->versionfile < 248) { + Lamp *la; + + for (la=main->lamp.first; la; la= la->id.next) { + if (la->atm_turbidity == 0.0f) { + la->sun_effect_type = 0; + la->horizon_brightness = 1.0f; + la->spread = 1.0f; + la->sun_brightness = 1.0f; + la->sun_size = 1.0f; + la->backscattered_light = 1.0f; + la->atm_turbidity = 2.0f; + la->atm_inscattering_factor = 1.0f; + la->atm_extinction_factor = 1.0f; + la->atm_distance_factor = 1.0f; + la->sun_intensity = 1.0f; + } + } + } + + if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 2)) { + Scene *sce; + + /* Note, these will need to be added for painting */ + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->toolsettings->imapaint.seam_bleed = 2; + sce->toolsettings->imapaint.normal_angle = 80; + + /* initialize skeleton generation toolsettings */ + sce->toolsettings->skgen_resolution = 250; + sce->toolsettings->skgen_threshold_internal = 0.1f; + sce->toolsettings->skgen_threshold_external = 0.1f; + sce->toolsettings->skgen_angle_limit = 30.0f; + sce->toolsettings->skgen_length_ratio = 1.3f; + sce->toolsettings->skgen_length_limit = 1.5f; + sce->toolsettings->skgen_correlation_limit = 0.98f; + sce->toolsettings->skgen_symmetry_limit = 0.1f; + sce->toolsettings->skgen_postpro = SKGEN_SMOOTH; + sce->toolsettings->skgen_postpro_passes = 3; + sce->toolsettings->skgen_options = SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_FILTER_SMART|SKGEN_SUB_CORRELATION|SKGEN_HARMONIC; + sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; + sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; + sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; + + + sce->toolsettings->skgen_retarget_angle_weight = 1.0f; + sce->toolsettings->skgen_retarget_length_weight = 1.0f; + sce->toolsettings->skgen_retarget_distance_weight = 1.0f; + + /* Skeleton Sketching */ + sce->toolsettings->bone_sketching = 0; + sce->toolsettings->skgen_retarget_roll = SK_RETARGET_ROLL_VIEW; + } + } + if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { + bScreen *sc; + + /* adjust default settings for Animation Editors */ + for (sc= main->screen.first; sc; sc= sc->id.next) { + ScrArea *sa; + + for (sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + for (sl= sa->spacedata.first; sl; sl= sl->next) { + switch (sl->spacetype) { + case SPACE_ACTION: + { + SpaceAction *sact= (SpaceAction *)sl; + + sact->mode= SACTCONT_DOPESHEET; + sact->autosnap= SACTSNAP_FRAME; + } + break; + case SPACE_IPO: + { + SpaceIpo *sipo= (SpaceIpo *)sl; + sipo->autosnap= SACTSNAP_FRAME; + } + break; + case SPACE_NLA: + { + SpaceNla *snla= (SpaceNla *)sl; + snla->autosnap= SACTSNAP_FRAME; + } + break; + } + } + } + } + } + + if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { + Object *ob; + + /* Adjustments needed after Bullets update */ + for (ob = main->object.first; ob; ob= ob->id.next) { + ob->damping *= 0.635f; + ob->rdamping = 0.1f + (0.8f * ob->rdamping); + } + } + + if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 4)) { + Scene *sce; + World *wrld; + + /* Dome (Fisheye) default parameters */ + for (sce= main->scene.first; sce; sce= sce->id.next) { + sce->r.domeangle = 180; + sce->r.domemode = 1; + sce->r.domeres = 4; + sce->r.domeresbuf = 1.0f; + sce->r.dometilt = 0; + } + /* DBVT culling by default */ + for (wrld=main->world.first; wrld; wrld= wrld->id.next) { + wrld->mode |= WO_DBVT_CULLING; + wrld->occlusionRes = 128; + } + } + + if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 5)) { + Object *ob; + World *wrld; + for (ob = main->object.first; ob; ob= ob->id.next) { + ob->m_contactProcessingThreshold = 1.0f; //pad3 is used for m_contactProcessingThreshold + if (ob->parent) { + /* check if top parent has compound shape set and if yes, set this object + * to compound shaper as well (was the behavior before, now it's optional) */ + Object *parent= blo_do_versions_newlibadr(fd, lib, ob->parent); + while (parent && parent != ob && parent->parent != NULL) { + parent = blo_do_versions_newlibadr(fd, lib, parent->parent); + } + if (parent) { + if (parent->gameflag & OB_CHILD) + ob->gameflag |= OB_CHILD; + } + } + } + for (wrld=main->world.first; wrld; wrld= wrld->id.next) { + wrld->ticrate = 60; + wrld->maxlogicstep = 5; + wrld->physubstep = 1; + wrld->maxphystep = 5; + } + } + + // correct introduce of seed for wind force + if (main->versionfile < 249 && main->subversionfile < 1) { + Object *ob; + for (ob = main->object.first; ob; ob= ob->id.next) { + if (ob->pd) + ob->pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128; + } + + } + + if (main->versionfile < 249 && main->subversionfile < 2) { + Scene *sce= main->scene.first; + Sequence *seq; + Editing *ed; + + while (sce) { + ed= sce->ed; + if (ed) { + SEQP_BEGIN (ed, seq) + { + if (seq->strip && seq->strip->proxy) { + seq->strip->proxy->quality =90; + } + } + SEQ_END + } + + sce= sce->id.next; + } + + } + + /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ + /* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */ + + /* don't forget to set version number in blender.c! */ +} + diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index b0bc7c1e73b..c7bd33f5fad 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -240,7 +240,7 @@ static void writedata_free(WriteData *wd) #define MYWRITE_FLUSH NULL -static void mywrite( WriteData *wd, const void *adr, int len) +static void mywrite(WriteData *wd, const void *adr, int len) { if (wd->error) return; @@ -975,7 +975,7 @@ static void write_particlesystems(WriteData *wd, ListBase *particles) writestruct(wd, DATA, "ParticleSystem", 1, psys); if (psys->particles) { - writestruct(wd, DATA, "ParticleData", psys->totpart ,psys->particles); + writestruct(wd, DATA, "ParticleData", psys->totpart, psys->particles); if (psys->particles->hair) { ParticleData *pa = psys->particles; @@ -994,7 +994,7 @@ static void write_particlesystems(WriteData *wd, ListBase *particles) for (; pt; pt=pt->next) writestruct(wd, DATA, "ParticleTarget", 1, pt); - if (psys->child) writestruct(wd, DATA, "ChildParticle", psys->totchild ,psys->child); + if (psys->child) writestruct(wd, DATA, "ChildParticle", psys->totchild, psys->child); if (psys->clmd) { writestruct(wd, DATA, "ClothModifierData", 1, psys->clmd); @@ -2111,13 +2111,15 @@ static void write_scenes(WriteData *wd, ListBase *scebase) /* reset write flags too */ - SEQ_BEGIN (ed, seq) { + SEQ_BEGIN (ed, seq) + { if (seq->strip) seq->strip->done= 0; writestruct(wd, DATA, "Sequence", 1, seq); } SEQ_END - SEQ_BEGIN (ed, seq) { + SEQ_BEGIN (ed, seq) + { if (seq->strip && seq->strip->done==0) { /* write strip with 'done' at 0 because readfile */ @@ -3104,7 +3106,7 @@ int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportL /* open temporary file, so we preserve the original in case we crash */ BLI_snprintf(tempname, sizeof(tempname), "%s@", filepath); - file = BLI_open(tempname,O_BINARY+O_WRONLY+O_CREAT+O_TRUNC, 0666); + file = BLI_open(tempname, O_BINARY+O_WRONLY+O_CREAT+O_TRUNC, 0666); if (file == -1) { BKE_reportf(reports, RPT_ERROR, "Can't open file %s for writing: %s.", tempname, strerror(errno)); return 0; @@ -3130,7 +3132,7 @@ int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportL * we should not have any relative paths, but if there * is somehow, an invalid or empty G.main->name it will * print an error, don't try make the absolute in this case. */ - makeFilesAbsolute(mainvar, G.main->name, NULL); + BLI_bpath_absolute_convert(mainvar, G.main->name, NULL); } } } @@ -3139,10 +3141,10 @@ int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportL write_user_block= (BLI_path_cmp(filepath, userfilename) == 0); if (write_flags & G_FILE_RELATIVE_REMAP) - makeFilesRelative(mainvar, filepath, NULL); /* note, making relative to something OTHER then G.main->name */ + BLI_bpath_relative_convert(mainvar, filepath, NULL); /* note, making relative to something OTHER then G.main->name */ /* actual file writing */ - err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags, thumb); + err= write_file_handle(mainvar, file, NULL, NULL, write_user_block, write_flags, thumb); close(file); if (err) { diff --git a/source/blender/blenpluginapi/documentation.h b/source/blender/blenpluginapi/documentation.h index 3e4aa3cd2ed..8a15109428f 100644 --- a/source/blender/blenpluginapi/documentation.h +++ b/source/blender/blenpluginapi/documentation.h @@ -23,8 +23,13 @@ * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** + */ + +/** + * \file blender/blenpluginapi/documentation.h + * \ingroup blpluginapi * - * @mainpage plugin API - the access point for texture and sequence + * \mainpage plugin API - the access point for texture and sequence * plugins * * \section about About the plugin API @@ -63,10 +68,4 @@ * * The plugins wraps functions from IMB and BLI. In addition, they * define some useful variables. - * */ - -/** \file blender/blenpluginapi/documentation.h - * \ingroup blpluginapi */ - - diff --git a/source/blender/blenpluginapi/externdef.h b/source/blender/blenpluginapi/externdef.h index fbd81a83272..154b276c851 100644 --- a/source/blender/blenpluginapi/externdef.h +++ b/source/blender/blenpluginapi/externdef.h @@ -1,6 +1,3 @@ -/** \file blender/blenpluginapi/externdef.h - * \ingroup blpluginapi - */ /* Copyright (c) 1999, Not a Number / NeoGeo b.v. * * All rights reserved. @@ -33,6 +30,10 @@ #ifndef __EXTERNDEF_H__ #define __EXTERNDEF_H__ +/** \file blender/blenpluginapi/externdef.h + * \ingroup blpluginapi + */ + #ifdef WIN32 #ifdef PLUGIN_INTERN #define LIBEXPORT __declspec(dllexport) diff --git a/source/blender/blenpluginapi/floatpatch.h b/source/blender/blenpluginapi/floatpatch.h index 4c9b98d073d..d1c7edcc307 100644 --- a/source/blender/blenpluginapi/floatpatch.h +++ b/source/blender/blenpluginapi/floatpatch.h @@ -1,8 +1,5 @@ -/** \file blender/blenpluginapi/floatpatch.h - * \ingroup blpluginapi - */ /* Copyright (c) 1999, Not a Number / NeoGeo b.v. - * + * * All rights reserved. * * Contact: info@blender.org @@ -33,6 +30,10 @@ #ifndef __FLOATPATCH_H__ #define __FLOATPATCH_H__ +/** \file blender/blenpluginapi/floatpatch.h + * \ingroup blpluginapi + */ + /* floating point libs differ at systems... with these defines it comilies at all! */ #ifdef MIPS1 diff --git a/source/blender/blenpluginapi/iff.h b/source/blender/blenpluginapi/iff.h index 450dfc7f8d1..98382aca889 100644 --- a/source/blender/blenpluginapi/iff.h +++ b/source/blender/blenpluginapi/iff.h @@ -1,6 +1,3 @@ -/** \file blender/blenpluginapi/iff.h - * \ingroup blpluginapi - */ /* Copyright (c) 1999, Not a Number / NeoGeo b.v. * * All rights reserved. @@ -33,6 +30,10 @@ #ifndef __IFF_H__ #define __IFF_H__ +/** \file blender/blenpluginapi/iff.h + * \ingroup blpluginapi + */ + #include <sys/types.h> #include "util.h" #include "externdef.h" @@ -83,15 +84,15 @@ typedef struct ImBuf { int refcounter; /* reference counter for multiple users */ } ImBuf; -LIBIMPORT struct ImBuf *allocImBuf(short,short,uchar,uint); +LIBIMPORT struct ImBuf *allocImBuf(short, short, uchar, uint); LIBIMPORT struct ImBuf *dupImBuf(struct ImBuf *); LIBIMPORT void freeImBuf(struct ImBuf*); -LIBIMPORT short saveiff(struct ImBuf *,char *,int); +LIBIMPORT short saveiff(struct ImBuf *, char *, int); -LIBIMPORT struct ImBuf *loadifffile(int,int); -LIBIMPORT struct ImBuf *loadiffname(char *,int); -LIBIMPORT struct ImBuf *testiffname(char *,int); +LIBIMPORT struct ImBuf *loadifffile(int, int); +LIBIMPORT struct ImBuf *loadiffname(char *, int); +LIBIMPORT struct ImBuf *testiffname(char *, int); LIBIMPORT struct ImBuf *onehalf(struct ImBuf *); LIBIMPORT struct ImBuf *half_x(struct ImBuf *); diff --git a/source/blender/blenpluginapi/intern/pluginapi.c b/source/blender/blenpluginapi/intern/pluginapi.c index 02166c466fa..efdd11352c6 100644 --- a/source/blender/blenpluginapi/intern/pluginapi.c +++ b/source/blender/blenpluginapi/intern/pluginapi.c @@ -268,38 +268,38 @@ LIBEXPORT float turbulence1(float noisesize, * Otherwise they will not be imported from the archive * library on Unix. -zr */ -int pluginapi_force_ref(void); +int pluginapi_force_ref(void); -int pluginapi_force_ref(void) +int pluginapi_force_ref(void) { return - GET_INT_FROM_POINTER( mallocN ) + - GET_INT_FROM_POINTER( callocN ) + - GET_INT_FROM_POINTER( freeN ) + - GET_INT_FROM_POINTER( mallocT ) + - GET_INT_FROM_POINTER( callocT ) + - GET_INT_FROM_POINTER( freeT ) + - GET_INT_FROM_POINTER( allocImBuf ) + - GET_INT_FROM_POINTER( dupImBuf ) + - GET_INT_FROM_POINTER( freeImBuf ) + - GET_INT_FROM_POINTER( saveiff ) + - GET_INT_FROM_POINTER( loadifffile ) + - GET_INT_FROM_POINTER( loadiffname ) + - GET_INT_FROM_POINTER( testiffname ) + - GET_INT_FROM_POINTER( onehalf ) + - GET_INT_FROM_POINTER( half_x ) + - GET_INT_FROM_POINTER( half_y ) + - GET_INT_FROM_POINTER( double_x ) + - GET_INT_FROM_POINTER( double_y ) + - GET_INT_FROM_POINTER( double_fast_x ) + - GET_INT_FROM_POINTER( double_fast_y ) + - GET_INT_FROM_POINTER( ispic ) + - GET_INT_FROM_POINTER( scaleImBuf ) + - GET_INT_FROM_POINTER( scalefastImBuf ) + - GET_INT_FROM_POINTER( hnoise ) + - GET_INT_FROM_POINTER( hnoisep ) + - GET_INT_FROM_POINTER( turbulence ) + - GET_INT_FROM_POINTER( turbulence1 ) + - GET_INT_FROM_POINTER( de_interlace ) + - GET_INT_FROM_POINTER( interlace ); + GET_INT_FROM_POINTER(mallocN) + + GET_INT_FROM_POINTER(callocN) + + GET_INT_FROM_POINTER(freeN) + + GET_INT_FROM_POINTER(mallocT) + + GET_INT_FROM_POINTER(callocT) + + GET_INT_FROM_POINTER(freeT) + + GET_INT_FROM_POINTER(allocImBuf) + + GET_INT_FROM_POINTER(dupImBuf) + + GET_INT_FROM_POINTER(freeImBuf) + + GET_INT_FROM_POINTER(saveiff) + + GET_INT_FROM_POINTER(loadifffile) + + GET_INT_FROM_POINTER(loadiffname) + + GET_INT_FROM_POINTER(testiffname) + + GET_INT_FROM_POINTER(onehalf) + + GET_INT_FROM_POINTER(half_x) + + GET_INT_FROM_POINTER(half_y) + + GET_INT_FROM_POINTER(double_x) + + GET_INT_FROM_POINTER(double_y) + + GET_INT_FROM_POINTER(double_fast_x) + + GET_INT_FROM_POINTER(double_fast_y) + + GET_INT_FROM_POINTER(ispic) + + GET_INT_FROM_POINTER(scaleImBuf) + + GET_INT_FROM_POINTER(scalefastImBuf) + + GET_INT_FROM_POINTER(hnoise) + + GET_INT_FROM_POINTER(hnoisep) + + GET_INT_FROM_POINTER(turbulence) + + GET_INT_FROM_POINTER(turbulence1) + + GET_INT_FROM_POINTER(de_interlace) + + GET_INT_FROM_POINTER(interlace); } diff --git a/source/blender/blenpluginapi/plugin.h b/source/blender/blenpluginapi/plugin.h index eb32fe80fa3..d7acb988ccd 100644 --- a/source/blender/blenpluginapi/plugin.h +++ b/source/blender/blenpluginapi/plugin.h @@ -1,6 +1,3 @@ -/** \file blender/blenpluginapi/plugin.h - * \ingroup blpluginapi - */ /* Copyright (c) 1999, Not a Number / NeoGeo b.v. * * All rights reserved. @@ -33,6 +30,10 @@ #ifndef __PLUGIN_H__ #define __PLUGIN_H__ +/** \file blender/blenpluginapi/plugin.h + * \ingroup blpluginapi + */ + #include "externdef.h" #include "iff.h" #include "util.h" diff --git a/source/blender/blenpluginapi/util.h b/source/blender/blenpluginapi/util.h index 340201924d7..8a049350bc6 100644 --- a/source/blender/blenpluginapi/util.h +++ b/source/blender/blenpluginapi/util.h @@ -1,6 +1,3 @@ -/** \file blender/blenpluginapi/util.h - * \ingroup blpluginapi - */ /* Copyright (c) 1999, Not a Number / NeoGeo b.v. * * All rights reserved. @@ -30,6 +27,10 @@ * SUCH DAMAGE. */ +/** \file blender/blenpluginapi/util.h + * \ingroup blpluginapi + */ + #ifndef __UTIL_H__ #define __UTIL_H__ diff --git a/source/blender/bmesh/CMakeLists.txt b/source/blender/bmesh/CMakeLists.txt index 1cf2b9113b2..730b741fa38 100644 --- a/source/blender/bmesh/CMakeLists.txt +++ b/source/blender/bmesh/CMakeLists.txt @@ -41,6 +41,7 @@ set(SRC operators/bmo_dupe.c operators/bmo_edgesplit.c operators/bmo_extrude.c + operators/bmo_hull.c operators/bmo_inset.c operators/bmo_join_triangles.c operators/bmo_mesh_conv.c @@ -51,6 +52,7 @@ set(SRC operators/bmo_subdivide.h operators/bmo_triangulate.c operators/bmo_utils.c + operators/bmo_wireframe.c intern/bmesh_construct.c intern/bmesh_construct.h diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index 219ebd5396d..3bd4155d52c 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -384,7 +384,7 @@ BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int totv, int n /* more of a weight then a distance */ far_cross_dist = (/* first we want to have a value close to zero mapped to 1 */ - 1.0 - fabsf(dot_v3v3(far_vec, far_cross_vec)) * + 1.0f - fabsf(dot_v3v3(far_vec, far_cross_vec)) * /* second we multiply by the distance * so points close to the center are not preferred */ diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index f38c737b8ac..e20eb103e1b 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -582,6 +582,9 @@ void BM_face_verts_kill(BMesh *bm, BMFace *f) BLI_array_free(verts); } +/** + * Kills \a f and its loops. + */ void BM_face_kill(BMesh *bm, BMFace *f) { #ifdef USE_BMESH_HOLES @@ -671,7 +674,10 @@ void BM_vert_kill(BMesh *bm, BMVert *v) /********** private disk and radial cycle functions ********** */ -static int bm_loop_length(BMLoop *l) +/** + * return the length of the face, should always equal \a l->f->len + */ +static int UNUSED_FUNCTION(bm_loop_length)(BMLoop *l) { BMLoop *l_first = l; int i = 0; @@ -707,18 +713,15 @@ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f BMLoop *l_first = f->l_first; #endif + const int len = f->len; + const int do_disps = CustomData_has_layer(&bm->ldata, CD_MDISPS); BMLoop *l_iter, *oldprev, *oldnext; BMEdge **edar = NULL; - MDisps *md; - BLI_array_staticdeclare(edar, BM_NGON_STACK_SIZE); - int i, j, edok, len = 0, do_disps = CustomData_has_layer(&bm->ldata, CD_MDISPS); - - len = bm_loop_length(l_first); + BLI_array_fixedstack_declare(edar, BM_NGON_STACK_SIZE, len, __func__); + int i, j, edok; for (i = 0, l_iter = l_first; i < len; i++, l_iter = l_iter->next) { - BMEdge *curedge = l_iter->e; - bmesh_radial_loop_remove(l_iter, curedge); - BLI_array_append(edar, curedge); + bmesh_radial_loop_remove(l_iter, (edar[i] = l_iter->e)); } /* actually reverse the loop */ @@ -732,6 +735,7 @@ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f if (do_disps) { float (*co)[3]; int x, y, sides; + MDisps *md; md = CustomData_bmesh_get(&bm->ldata, l_iter->head.data, CD_MDISPS); if (!md->totdisp || !md->disps) @@ -777,7 +781,7 @@ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f BM_CHECK_ELEMENT(l_iter->f); } - BLI_array_free(edar); + BLI_array_fixedstack_free(edar); BM_CHECK_ELEMENT(f); diff --git a/source/blender/bmesh/intern/bmesh_error.h b/source/blender/bmesh/intern/bmesh_error.h index 84065fe88f6..606e9eeb23b 100644 --- a/source/blender/bmesh/intern/bmesh_error.h +++ b/source/blender/bmesh/intern/bmesh_error.h @@ -69,6 +69,7 @@ void BMO_error_clear(BMesh *bm); #define BMERR_NONMANIFOLD 8 #define BMERR_INVALID_SELECTION 9 #define BMERR_MESH_ERROR 10 +#define BMERR_CONVEX_HULL_FAILED 11 /* BMESH_ASSERT */ #ifdef WITH_ASSERT_ABORT diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 5149a5436a2..f64b55193c5 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -78,7 +78,7 @@ void BM_data_interp_from_verts(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, con src[0] = v1->head.data; src[1] = v2->head.data; - w[0] = 1.0f-fac; + w[0] = 1.0f - fac; w[1] = fac; CustomData_bmesh_interp(&bm->vdata, src, w, NULL, 2, v->head.data); } @@ -198,20 +198,11 @@ void BM_face_interp_from_face(BMesh *bm, BMFace *target, BMFace *source) static int compute_mdisp_quad(BMLoop *l, float v1[3], float v2[3], float v3[3], float v4[3], float e1[3], float e2[3]) { - float cent[3] = {0.0f, 0.0f, 0.0f}, n[3], p[3]; - BMLoop *l_first; - BMLoop *l_iter; - + float cent[3], n[3], p[3]; + /* computer center */ - l_iter = l_first = BM_FACE_FIRST_LOOP(l->f); - do { - cent[0] += (float)l_iter->v->co[0]; - cent[1] += (float)l_iter->v->co[1]; - cent[2] += (float)l_iter->v->co[2]; - } while ((l_iter = l_iter->next) != l_first); - - mul_v3_fl(cent, (1.0 / (float)l->f->len)); - + BM_face_calc_center_mean(l->f, cent); + add_v3_v3v3(p, l->prev->v->co, l->v->co); mul_v3_fl(p, 0.5); add_v3_v3v3(n, l->next->v->co, l->v->co); @@ -240,8 +231,8 @@ static float quad_coord(float aa[3], float bb[3], float cc[3], float dd[3], int if (fabsf(2.0f * (x - y + z)) > FLT_EPSILON * 10.0f) { float f2; - f1 = (sqrt(y * y - 4.0 * x * z) - y + 2.0 * z) / (2.0 * (x - y + z)); - f2 = (-sqrt(y * y - 4.0 * x * z) - y + 2.0 * z) / (2.0 * (x - y + z)); + f1 = ( sqrtf(y * y - 4.0f * x * z) - y + 2.0f * z) / (2.0f * (x - y + z)); + f2 = (-sqrtf(y * y - 4.0f * x * z) - y + 2.0f * z) / (2.0f * (x - y + z)); f1 = fabsf(f1); f2 = fabsf(f2); @@ -252,7 +243,7 @@ static float quad_coord(float aa[3], float bb[3], float cc[3], float dd[3], int f1 = -z / (y - 2 * z); CLAMP(f1, 0.0f, 1.0f + FLT_EPSILON); - if (isnan(f1) || f1 > 1.0 || f1 < 0.0f) { + if (isnan(f1) || f1 > 1.0f || f1 < 0.0f) { int i; for (i = 0; i < 2; i++) { @@ -345,8 +336,8 @@ static int mdisp_in_mdispquad(BMLoop *l, BMLoop *tl, float p[3], float *x, float sub_v3_v3(v1, c); sub_v3_v3(v2, c); sub_v3_v3(v3, c); sub_v3_v3(v4, c); - mul_v3_fl(v1, 1.0 + eps); mul_v3_fl(v2, 1.0 + eps); - mul_v3_fl(v3, 1.0 + eps); mul_v3_fl(v4, 1.0 + eps); + mul_v3_fl(v1, 1.0f + eps); mul_v3_fl(v2, 1.0f + eps); + mul_v3_fl(v3, 1.0f + eps); mul_v3_fl(v4, 1.0f + eps); add_v3_v3(v1, c); add_v3_v3(v2, c); add_v3_v3(v3, c); add_v3_v3(v4, c); @@ -392,9 +383,9 @@ static void bm_loop_flip_disp(float source_axis_x[3], float source_axis_y[3], d = bm_loop_flip_equotion(mat, b, target_axis_x, target_axis_y, coord, 0, 1); - if (fabsf(d) < 1e-4) { + if (fabsf(d) < 1e-4f) { d = bm_loop_flip_equotion(mat, b, target_axis_x, target_axis_y, coord, 0, 2); - if (fabsf(d) < 1e-4) + if (fabsf(d) < 1e-4f) d = bm_loop_flip_equotion(mat, b, target_axis_x, target_axis_y, coord, 1, 2); } @@ -439,7 +430,7 @@ static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source) mdisp_axis_from_quad(v1, v2, v3, v4, axis_x, axis_y); res = (int)sqrt(mdisps->totdisp); - d = 1.0 / (float)(res - 1); + d = 1.0f / (float)(res - 1); for (x = 0.0f, ix = 0; ix < res; x += d, ix++) { for (y = 0.0f, iy = 0; iy < res; y += d, iy++) { float co1[3], co2[3], co[3]; @@ -853,6 +844,52 @@ void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n) if (olddata.layers) MEM_freeN(olddata.layers); } +void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int dst_n) +{ + BMIter iter; + + if (&bm->vdata == data) { + BMVert *eve; + + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, eve->head.data, type, dst_n); + CustomData_bmesh_set_n(data, eve->head.data, type, src_n, ptr); + } + } + else if (&bm->edata == data) { + BMEdge *eed; + + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, eed->head.data, type, dst_n); + CustomData_bmesh_set_n(data, eed->head.data, type, src_n, ptr); + } + } + else if (&bm->pdata == data) { + BMFace *efa; + + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, efa->head.data, type, dst_n); + CustomData_bmesh_set_n(data, efa->head.data, type, src_n, ptr); + } + } + else if (&bm->ldata == data) { + BMIter liter; + BMFace *efa; + BMLoop *l; + + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { + void *ptr = CustomData_bmesh_get_n(data, l->head.data, type, dst_n); + CustomData_bmesh_set_n(data, l->head.data, type, src_n, ptr); + } + } + } + else { + /* should never reach this! */ + BLI_assert(0); + } +} + float BM_elem_float_data_get(CustomData *cd, void *element, int type) { float *f = CustomData_bmesh_get(cd, ((BMHeader *)element)->data, type); diff --git a/source/blender/bmesh/intern/bmesh_interp.h b/source/blender/bmesh/intern/bmesh_interp.h index 0d97fbcc0ec..3380a3e6b1b 100644 --- a/source/blender/bmesh/intern/bmesh_interp.h +++ b/source/blender/bmesh/intern/bmesh_interp.h @@ -36,6 +36,8 @@ void BM_data_layer_add(BMesh *em, CustomData *data, int type); void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, const char *name); void BM_data_layer_free(BMesh *em, CustomData *data, int type); void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n); +void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int dst_n); + float BM_elem_float_data_get(CustomData *cd, void *element, int type); void BM_elem_float_data_set(CustomData *cd, void *element, int type, const float val); diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index bd6eb7ae149..fe94983dc88 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -47,10 +47,14 @@ BMAllocTemplate bm_mesh_chunksize_default = {512, 1024, 2048, 512}; static void bm_mempool_init(BMesh *bm, const BMAllocTemplate *allocsize) { - bm->vpool = BLI_mempool_create(sizeof(BMVert), allocsize->totvert, bm_mesh_chunksize_default.totvert, BLI_MEMPOOL_ALLOW_ITER); - bm->epool = BLI_mempool_create(sizeof(BMEdge), allocsize->totedge, bm_mesh_chunksize_default.totedge, BLI_MEMPOOL_ALLOW_ITER); - bm->lpool = BLI_mempool_create(sizeof(BMLoop), allocsize->totloop, bm_mesh_chunksize_default.totloop, 0); - bm->fpool = BLI_mempool_create(sizeof(BMFace), allocsize->totface, bm_mesh_chunksize_default.totface, BLI_MEMPOOL_ALLOW_ITER); + bm->vpool = BLI_mempool_create(sizeof(BMVert), allocsize->totvert, + bm_mesh_chunksize_default.totvert, BLI_MEMPOOL_ALLOW_ITER); + bm->epool = BLI_mempool_create(sizeof(BMEdge), allocsize->totedge, + bm_mesh_chunksize_default.totedge, BLI_MEMPOOL_ALLOW_ITER); + bm->lpool = BLI_mempool_create(sizeof(BMLoop), allocsize->totloop, + bm_mesh_chunksize_default.totloop, 0); + bm->fpool = BLI_mempool_create(sizeof(BMFace), allocsize->totface, + bm_mesh_chunksize_default.totface, BLI_MEMPOOL_ALLOW_ITER); #ifdef USE_BMESH_HOLES bm->looplistpool = BLI_mempool_create(sizeof(BMLoopList), allocsize[3], allocsize[3], FALSE, FALSE); @@ -672,8 +676,8 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) BMEdge *new_edp = edges_pool[*new_idx]; *new_edp = *ed; BLI_ghash_insert(eptr_map, (void *)*edp, (void *)new_edp); +/* printf("mapping edge from %d to %d (%p/%p to %p)\n", i, *new_idx, *edp, edges_pool[i], new_edp);*/ } - bm->elem_index_dirty |= BM_EDGE; MEM_freeN(edges_pool); @@ -722,13 +726,30 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx) } } - /* Edges' pointers, only vert pointers (as we don't mess with loops!)... */ - if (vptr_map) { + /* Edges' pointers, only vert pointers (as we don't mess with loops!), and - ack! - edge pointers, + * as we have to handle disklinks... */ + if (vptr_map || eptr_map) { BM_ITER_MESH (ed, &iter, bm, BM_EDGES_OF_MESH) { -/* printf("Edge v1: %p -> %p\n", ed->v1, BLI_ghash_lookup(vptr_map, (const void*)ed->v1));*/ -/* printf("Edge v2: %p -> %p\n", ed->v2, BLI_ghash_lookup(vptr_map, (const void*)ed->v2));*/ - ed->v1 = BLI_ghash_lookup(vptr_map, (const void *)ed->v1); - ed->v2 = BLI_ghash_lookup(vptr_map, (const void *)ed->v2); + if (vptr_map) { +/* printf("Edge v1: %p -> %p\n", ed->v1, BLI_ghash_lookup(vptr_map, (const void*)ed->v1));*/ +/* printf("Edge v2: %p -> %p\n", ed->v2, BLI_ghash_lookup(vptr_map, (const void*)ed->v2));*/ + ed->v1 = BLI_ghash_lookup(vptr_map, (const void *)ed->v1); + ed->v2 = BLI_ghash_lookup(vptr_map, (const void *)ed->v2); + } + if (eptr_map) { +/* printf("Edge v1_disk_link prev: %p -> %p\n", ed->v1_disk_link.prev,*/ +/* BLI_ghash_lookup(eptr_map, (const void*)ed->v1_disk_link.prev));*/ +/* printf("Edge v1_disk_link next: %p -> %p\n", ed->v1_disk_link.next,*/ +/* BLI_ghash_lookup(eptr_map, (const void*)ed->v1_disk_link.next));*/ +/* printf("Edge v2_disk_link prev: %p -> %p\n", ed->v2_disk_link.prev,*/ +/* BLI_ghash_lookup(eptr_map, (const void*)ed->v2_disk_link.prev));*/ +/* printf("Edge v2_disk_link next: %p -> %p\n", ed->v2_disk_link.next,*/ +/* BLI_ghash_lookup(eptr_map, (const void*)ed->v2_disk_link.next));*/ + ed->v1_disk_link.prev = BLI_ghash_lookup(eptr_map, (const void *)ed->v1_disk_link.prev); + ed->v1_disk_link.next = BLI_ghash_lookup(eptr_map, (const void *)ed->v1_disk_link.next); + ed->v2_disk_link.prev = BLI_ghash_lookup(eptr_map, (const void *)ed->v2_disk_link.prev); + ed->v2_disk_link.next = BLI_ghash_lookup(eptr_map, (const void *)ed->v2_disk_link.next); + } } } diff --git a/source/blender/bmesh/intern/bmesh_mesh_validate.c b/source/blender/bmesh/intern/bmesh_mesh_validate.c index 3ec3b84c120..8ab5f10361f 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_validate.c +++ b/source/blender/bmesh/intern/bmesh_mesh_validate.c @@ -107,10 +107,12 @@ int BM_mesh_validate(BMesh *bm) ERRMSG("edge %d: has invalid loop, loop is of face %d", i, BM_elem_index_get(l_iter->f)); } else if (BM_vert_in_edge(e, l_iter->v) == FALSE) { - ERRMSG("edge %d: has invalid loop with vert not in edge, loop is of face %d", i, BM_elem_index_get(l_iter->f)); + ERRMSG("edge %d: has invalid loop with vert not in edge, loop is of face %d", + i, BM_elem_index_get(l_iter->f)); } else if (BM_vert_in_edge(e, l_iter->next->v) == FALSE) { - ERRMSG("edge %d: has invalid loop with next vert not in edge, loop is of face %d", i, BM_elem_index_get(l_iter->f)); + ERRMSG("edge %d: has invalid loop with next vert not in edge, loop is of face %d", + i, BM_elem_index_get(l_iter->f)); } } while ((l_iter = l_iter->radial_next) != l_first); } diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index 5f3836cc413..c4cbb19eef7 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -1053,7 +1053,7 @@ BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_ /* first create the new edge, this is so we can copy the customdata from the old one * if splice if disabled, always add in a new edge even if theres one there. */ - e_new = BM_edge_create(bm, v1, v2, e, (check_flag & BM_EDGEROT_CHECK_SPLICE)!=0); + e_new = BM_edge_create(bm, v1, v2, e, (check_flag & BM_EDGEROT_CHECK_SPLICE) != 0); f_hflag_prev_1 = l1->f->head.hflag; f_hflag_prev_2 = l2->f->head.hflag; diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 4b5c67c8671..b5e6d7e1f68 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -696,6 +696,7 @@ static BMOpDefine bmo_esubd_def = { {{BMO_OP_SLOT_ELEMENT_BUF, "edges"}, {BMO_OP_SLOT_FLT, "smooth"}, {BMO_OP_SLOT_FLT, "fractal"}, + {BMO_OP_SLOT_FLT, "along_normal"}, {BMO_OP_SLOT_INT, "numcuts"}, {BMO_OP_SLOT_INT, "seed"}, {BMO_OP_SLOT_MAPPING, "custompatterns"}, @@ -1109,6 +1110,26 @@ static BMOpDefine bmo_inset_def = { }; /* + * Wire Frame + * + * Makes a wire copy of faces. + */ +static BMOpDefine bmo_wireframe_def = { + "wireframe", + {{BMO_OP_SLOT_ELEMENT_BUF, "faces"}, /* input faces */ + {BMO_OP_SLOT_ELEMENT_BUF, "faceout"}, /* output faces */ + {BMO_OP_SLOT_BOOL, "use_boundary"}, + {BMO_OP_SLOT_BOOL, "use_even_offset"}, + {BMO_OP_SLOT_BOOL, "use_crease"}, + {BMO_OP_SLOT_FLT, "thickness"}, + {BMO_OP_SLOT_BOOL, "use_relative_offset"}, + {BMO_OP_SLOT_FLT, "depth"}, + {0} /* null-terminating sentinel */}, + bmo_wireframe_exec, + 0 +}; + +/* * Vertex Slide * * Translates vertes along an edge @@ -1124,6 +1145,35 @@ static BMOpDefine bmo_vertex_slide_def = { BMO_OP_FLAG_UNTAN_MULTIRES }; +/* + * Convex Hull + * + * Builds a convex hull from the vertices in 'input'. + * + * If 'use_existing_faces' is true, the hull will not output triangles + * that are covered by a pre-existing face. + * + * All hull vertices, faces, and edges are added to 'geomout'. Any + * input elements that end up inside the hull (i.e. are not used by an + * output face) are added to the 'interior_geom' slot. The + * 'unused_geom' slot will contain all interior geometry that is + * completely unused. Lastly, 'holes_geom' contains edges and faces + * that were in the input and are part of the hull. +*/ +static BMOpDefine bmo_convex_hull_def = { + "convex_hull", + {{BMO_OP_SLOT_ELEMENT_BUF, "input"}, + {BMO_OP_SLOT_BOOL, "use_existing_faces"}, + + /* Outputs */ + {BMO_OP_SLOT_ELEMENT_BUF, "geomout"}, + {BMO_OP_SLOT_ELEMENT_BUF, "interior_geom"}, + {BMO_OP_SLOT_ELEMENT_BUF, "unused_geom"}, + {BMO_OP_SLOT_ELEMENT_BUF, "holes_geom"}, + {0} /* null-terminating sentinel */}, + bmo_convex_hull_exec, + 0 +}; BMOpDefine *opdefines[] = { &bmo_split_def, @@ -1192,7 +1242,9 @@ BMOpDefine *opdefines[] = { &bmo_bridge_loops_def, &bmo_solidify_def, &bmo_inset_def, + &bmo_wireframe_def, &bmo_vertex_slide_def, + &bmo_convex_hull_def, }; int bmesh_total_ops = (sizeof(opdefines) / sizeof(void *)); diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index dce491efe72..97347f841c8 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -1054,7 +1054,7 @@ static void bmo_flag_layer_alloc(BMesh *bm) BM_elem_index_set(ele, i); /* set_inline */ } - bm->elem_index_dirty &= ~(BM_VERT|BM_EDGE|BM_FACE); + bm->elem_index_dirty &= ~(BM_VERT | BM_EDGE | BM_FACE); BLI_mempool_destroy(oldpool); } @@ -1099,7 +1099,7 @@ static void bmo_flag_layer_free(BMesh *bm) BM_elem_index_set(ele, i); /* set_inline */ } - bm->elem_index_dirty &= ~(BM_VERT|BM_EDGE|BM_FACE); + bm->elem_index_dirty &= ~(BM_VERT | BM_EDGE | BM_FACE); BLI_mempool_destroy(oldpool); } @@ -1128,7 +1128,7 @@ static void bmo_flag_layer_clear(BMesh *bm) BM_elem_index_set(ele, i); /* set_inline */ } - bm->elem_index_dirty &= ~(BM_VERT|BM_EDGE|BM_FACE); + bm->elem_index_dirty &= ~(BM_VERT | BM_EDGE | BM_FACE); } void *BMO_slot_buffer_elem_first(BMOperator *op, const char *slotname) diff --git a/source/blender/bmesh/intern/bmesh_operators.h b/source/blender/bmesh/intern/bmesh_operators.h index f43f66687f8..3a63b77c50f 100644 --- a/source/blender/bmesh/intern/bmesh_operators.h +++ b/source/blender/bmesh/intern/bmesh_operators.h @@ -100,7 +100,7 @@ extern int bmesh_total_ops; struct Object; void BM_mesh_esubdivide(BMesh *bm, const char edge_hflag, - float smooth, float fractal, + float smooth, float fractal, float along_normal, int numcuts, int seltype, int cornertype, const short use_singleedge, const short use_gridfill, diff --git a/source/blender/bmesh/intern/bmesh_operators_private.h b/source/blender/bmesh/intern/bmesh_operators_private.h index 423b30a503a..df48ec8468f 100644 --- a/source/blender/bmesh/intern/bmesh_operators_private.h +++ b/source/blender/bmesh/intern/bmesh_operators_private.h @@ -100,5 +100,7 @@ void bmo_create_circle_exec(BMesh *bm, BMOperator *op); void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op); void bmo_solidify_face_region_exec(BMesh *bm, BMOperator *op); void bmo_inset_exec(BMesh *bm, BMOperator *op); +void bmo_wireframe_exec(BMesh *bm, BMOperator *op); +void bmo_convex_hull_exec(BMesh *bm, BMOperator *op); #endif /* __BMESH_OPERATORS_PRIVATE_H__ */ diff --git a/source/blender/bmesh/intern/bmesh_private.h b/source/blender/bmesh/intern/bmesh_private.h index 6297e20d9d2..23d0a1e3906 100644 --- a/source/blender/bmesh/intern/bmesh_private.h +++ b/source/blender/bmesh/intern/bmesh_private.h @@ -40,18 +40,18 @@ int bmesh_elem_check(void *element, const char htype); #define BM_CHECK_ELEMENT(el) \ - if (bmesh_elem_check(el, ((BMHeader *)el)->htype)) { \ - printf("check_element failure, with code %i on line %i in file\n" \ - " \"%s\"\n\n", \ - bmesh_elem_check(el, ((BMHeader *)el)->htype), \ - __LINE__, __FILE__); \ - } + if (bmesh_elem_check(el, ((BMHeader *)el)->htype)) { \ + printf("check_element failure, with code %i on line %i in file\n" \ + " \"%s\"\n\n", \ + bmesh_elem_check(el, ((BMHeader *)el)->htype), \ + __LINE__, __FILE__); \ + } #define BM_DISK_EDGE_LINK_GET(e, v) ( \ ((v) == ((BMEdge *)(e))->v1) ? \ &((e)->v1_disk_link) : \ &((e)->v2_disk_link) \ - ) + ) int bmesh_radial_length(BMLoop *l); int bmesh_disk_count(BMVert *v); diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 3543fd952bb..8628ed7f9a1 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -900,7 +900,7 @@ float BM_vert_calc_edge_angle(BMVert *v) BMVert *v1 = BM_edge_other_vert(e1, v); BMVert *v2 = BM_edge_other_vert(e2, v); - return M_PI - angle_v3v3v3(v1->co, v->co, v2->co); + return (float)M_PI - angle_v3v3v3(v1->co, v->co, v2->co); } else { return DEG2RADF(90.0f); @@ -928,6 +928,28 @@ float BM_vert_calc_shell_factor(BMVert *v) } /** + * \note quite an obscure function. + * used in bmesh operators that have a relative scale options, + */ +float BM_vert_calc_mean_tagged_edge_length(BMVert *v) +{ + BMIter iter; + BMEdge *e; + int tot; + float length = 0.0f; + + BM_ITER_ELEM_INDEX (e, &iter, v, BM_EDGES_OF_VERT, tot) { + BMVert *v_other = BM_edge_other_vert(e, v); + if (BM_elem_flag_test(v_other, BM_ELEM_TAG)) { + length += BM_edge_calc_length(e); + } + } + + return length / (float)tot; +} + + +/** * Returns the edge existing between v1 and v2, or NULL if there isn't one. * * \note multiple edges may exist between any two vertices, and therefore diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index aefeb80c4f3..08e15884b3f 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -65,6 +65,7 @@ void BM_edge_calc_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3]) float BM_vert_calc_edge_angle(BMVert *v); float BM_vert_calc_shell_factor(BMVert *v); +float BM_vert_calc_mean_tagged_edge_length(BMVert *v); BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2); diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index ec4b97d59f3..01c269657dc 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -838,7 +838,7 @@ static void *bmw_EdgeringWalker_step(BMWalker *walker) { BMwEdgeringWalker *lwalk = BMW_current_state(walker); BMEdge *e, *wireedge = lwalk->wireedge; - BMLoop *l = lwalk->l , *origl = lwalk->l; + BMLoop *l = lwalk->l, *origl = lwalk->l; #ifdef BMW_EDGERING_NGON int i, len; #endif diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index b6b54b82f3d..f02b88c5b05 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -151,10 +151,10 @@ static void calc_corner_co(BMLoop *l, const float fac, float r_co[3], /* done */ if (do_even) { - mul_v3_fl(co_ofs, (fac * 0.5) * shell_angle_to_dist(0.5f * angle)); + mul_v3_fl(co_ofs, (fac * 0.5f) * shell_angle_to_dist(0.5f * angle)); } else { - mul_v3_fl(co_ofs, fac * 0.5); + mul_v3_fl(co_ofs, fac * 0.5f); } } @@ -208,9 +208,9 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BLI_smallhash_init(&hash); BMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) { - BMO_elem_flag_enable(bm, e, BEVEL_FLAG|BEVEL_DEL); - BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG|BEVEL_DEL); - BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG|BEVEL_DEL); + BMO_elem_flag_enable(bm, e, BEVEL_FLAG | BEVEL_DEL); + BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG | BEVEL_DEL); + BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG | BEVEL_DEL); if (BM_edge_face_count(e) < 2) { BMO_elem_flag_disable(bm, e, BEVEL_DEL); @@ -281,8 +281,8 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BMLoop *l; BMIter liter; - BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG|BEVEL_DEL); - BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG|BEVEL_DEL); + BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG | BEVEL_DEL); + BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG | BEVEL_DEL); if (BM_edge_face_count(e) < 2) { BMO_elem_flag_disable(bm, e, BEVEL_DEL); @@ -597,7 +597,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) continue; } - BMO_elem_flag_enable(bm, f, FACE_NEW|FACE_SPAN); + BMO_elem_flag_enable(bm, f, FACE_NEW | FACE_SPAN); /* un-tag edges in f for deletio */ BM_ITER_ELEM (l2, &liter2, f, BM_LOOPS_OF_FACE) { @@ -775,7 +775,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) fprintf(stderr, "%s: in bevel vert fill! (bmesh internal error)\n", __func__); } else { - BMO_elem_flag_enable(bm, f, FACE_NEW|FACE_HOLE); + BMO_elem_flag_enable(bm, f, FACE_NEW | FACE_HOLE); } } BLI_smallhash_release(&tmphash); diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index 6f08ab421f3..85aed6141bb 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -1285,7 +1285,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) const short use_smooth = BMO_slot_bool_get(op, "use_smooth"); /* count number of each element type we were passe */ - BMO_ITER (h, &oiter, bm, op, "geom", BM_VERT|BM_EDGE|BM_FACE) { + BMO_ITER (h, &oiter, bm, op, "geom", BM_VERT | BM_EDGE | BM_FACE) { switch (h->htype) { case BM_VERT: totv++; break; case BM_EDGE: tote++; break; diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 8e7723fefdd..ae1773af05e 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -478,8 +478,8 @@ void dummy_exec(BMesh *bm, BMOperator *op) /* Limited Dissolve */ -#define UNIT_TO_ANGLE DEG2RADF(90.0) -#define ANGLE_TO_UNIT (1.0 / UNIT_TO_ANGLE) +#define UNIT_TO_ANGLE DEG2RADF(90.0f) +#define ANGLE_TO_UNIT (1.0f / UNIT_TO_ANGLE) /* multiply vertex edge angle by face angle * this means we are not left with sharp corners between _almost_ planer faces @@ -523,8 +523,17 @@ void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op) sizeof(DissolveElemWeight), __func__); int i, tot_found; + BMIter iter; + BMEdge *e_iter; + BMEdge **earray; + /* --- first edges --- */ + /* wire -> tag */ + BM_ITER_MESH(e_iter, &iter, bm, BM_EDGES_OF_MESH) { + BM_elem_flag_set(e_iter, BM_ELEM_TAG, BM_edge_is_wire(e_iter)); + } + /* go through and split edge */ for (i = 0, tot_found = 0; i < einput->len; i++) { BMEdge *e = ((BMEdge **)einput->data.p)[i]; @@ -562,18 +571,6 @@ void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op) } } } - - /* remove all edges/verts left behind from dissolving */ - for (i = 0; i < einput->len; i++) { - BMEdge *e = (BMEdge *)weight_elems[i].ele; - if (BM_edge_is_wire(e)) { - BMVert *v1 = e->v1; - BMVert *v2 = e->v2; - BM_edge_kill(bm, e); - if (v1->e == NULL) BM_vert_kill(bm, v1); - if (v2->e == NULL) BM_vert_kill(bm, v2); - } - } } /* --- second verts --- */ @@ -612,4 +609,25 @@ void bmo_dissolve_limit_exec(BMesh *bm, BMOperator *op) } MEM_freeN(weight_elems); + + /* --- cleanup --- */ + earray = MEM_mallocN(sizeof(BMEdge *) * bm->totedge, __func__); + BM_ITER_MESH_INDEX(e_iter, &iter, bm, BM_EDGES_OF_MESH, i) { + earray[i] = e_iter; + } + /* remove all edges/verts left behind from dissolving */ + for (i = bm->totedge - 1; i != -1; i--) { + e_iter = earray[i]; + + if (BM_edge_is_wire(e_iter) && (BM_elem_flag_test(e_iter, BM_ELEM_TAG) == FALSE)) { + /* edge has become wire */ + BMVert *v1 = e_iter->v1; + BMVert *v2 = e_iter->v2; + BM_edge_kill(bm, e_iter); + if (v1->e == NULL) BM_vert_kill(bm, v1); + if (v2->e == NULL) BM_vert_kill(bm, v2); + } + } + + MEM_freeN(earray); } diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index 4fced09c588..4bac54794bf 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -251,7 +251,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* initialize our sub-operators */ BMO_op_init(bm, &dupeop, "dupe"); - BMO_slot_buffer_flag_enable(bm, op, "edgefacein", BM_EDGE|BM_FACE, EXT_INPUT); + BMO_slot_buffer_flag_enable(bm, op, "edgefacein", BM_EDGE | BM_FACE, EXT_INPUT); /* if one flagged face is bordered by an un-flagged face, then we delete * original geometry unless caller explicitly asked to keep it. */ diff --git a/source/blender/bmesh/operators/bmo_hull.c b/source/blender/bmesh/operators/bmo_hull.c new file mode 100644 index 00000000000..1cd095f72e4 --- /dev/null +++ b/source/blender/bmesh/operators/bmo_hull.c @@ -0,0 +1,758 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Nicholas Bishop + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/bmesh/operators/bmo_hull.c + * \ingroup bmesh + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_ghash.h" +#include "BLI_listbase.h" +#include "BLI_math.h" +#include "BLI_utildefines.h" + +/* XXX: using 128 for totelem and pchunk of mempool, no idea what good + * values would be though */ +#include "BLI_mempool.h" + +#include "bmesh.h" + +/* Internal operator flags */ +typedef enum { + HULL_FLAG_INPUT = (1 << 0), + HULL_FLAG_TETRA_VERT = (1 << 1), + + HULL_FLAG_INTERIOR_ELE = (1 << 2), + HULL_FLAG_OUTPUT_GEOM = (1 << 3), + + HULL_FLAG_DEL = (1 << 4), + HULL_FLAG_HOLE = (1 << 5) +} HullFlags; + +/* Store hull triangles seperate from BMesh faces until the end; this + * way we don't have to worry about cleaning up extraneous edges or + * incorrectly deleting existing geometry. */ +typedef struct HullTriangle { + BMVert *v[3]; + float no[3]; + int skip; +} HullTriangle; + +/* These edges define the hole created in the hull by deleting faces + * that can "see" a new vertex (the boundary edges then form the edge + * of a new triangle fan that has the new vertex as its center) */ +typedef struct HullBoundaryEdge { + struct HullBoundaryEdge *next, *prev; + BMVert *v[2]; +} HullBoundaryEdge; + + + +/*************************** Boundary Edges ***************************/ + +static int edge_match(BMVert *e1_0, BMVert *e1_1, BMVert *e2[2]) +{ + return (e1_0 == e2[0] && e1_1 == e2[1]) || + (e1_0 == e2[1] && e1_1 == e2[0]); +} + +/* Returns true if the edge (e1, e2) is already in edges; that edge is + * deleted here as well. if not found just returns 0 */ +static int check_for_dup(ListBase *edges, BLI_mempool *pool, + BMVert *e1, BMVert *e2) +{ + HullBoundaryEdge *e, *next; + + for (e = edges->first; e; e = next) { + next = e->next; + + if (edge_match(e1, e2, e->v)) { + /* remove the interior edge */ + BLI_remlink(edges, e); + BLI_mempool_free(pool, e); + return 1; + } + } + + return 0; +} + +static void expand_boundary_edges(ListBase *edges, BLI_mempool *edge_pool, + const HullTriangle *t) +{ + HullBoundaryEdge *new; + int i; + + /* Insert each triangle edge into the boundary list; if any of + * its edges are already in there, remove the edge entirely */ + for (i = 0; i < 3; i++) { + if (!check_for_dup(edges, edge_pool, t->v[i], t->v[(i + 1) % 3])) { + new = BLI_mempool_calloc(edge_pool); + new->v[0] = t->v[i]; + new->v[1] = t->v[(i + 1) % 3]; + BLI_addtail(edges, new); + } + } +} + + + +/*************************** Hull Triangles ***************************/ + +static void hull_add_triangle(GHash *hull_triangles, BLI_mempool *pool, + BMVert *v1, BMVert *v2, BMVert *v3) +{ + HullTriangle *t; + + t = BLI_mempool_calloc(pool); + t->v[0] = v1; + t->v[1] = v2; + t->v[2] = v3; + + BLI_ghash_insert(hull_triangles, t, NULL); + normal_tri_v3(t->no, v1->co, v2->co, v3->co); +} + +static int hull_point_tri_side(const HullTriangle *t, const float co[3]) +{ + float p[3], d; + sub_v3_v3v3(p, co, t->v[0]->co); + d = dot_v3v3(t->no, p); + if (d < 0) return -1; + else if (d > 0) return 1; + else return 0; +} + +/* Get all hull triangles that vertex 'v' is outside of */ +static GHash *hull_triangles_v_outside(GHash *hull_triangles, const BMVert *v) +{ + GHash *outside; + GHashIterator iter; + + outside = BLI_ghash_new(BLI_ghashutil_ptrhash, + BLI_ghashutil_ptrcmp, + "outside"); + + GHASH_ITER (iter, hull_triangles) { + HullTriangle *t = BLI_ghashIterator_getKey(&iter); + + if (hull_point_tri_side(t, v->co) >= 0) + BLI_ghash_insert(outside, t, NULL); + } + + return outside; +} + +/* Similar to above, but just get true/false rather than triangles */ +static int hull_test_v_outside(GHash *hull_triangles, const BMVert *v) +{ + GHashIterator iter; + + GHASH_ITER (iter, hull_triangles) { + HullTriangle *t = BLI_ghashIterator_getKey(&iter); + + if (hull_point_tri_side(t, v->co) >= 0) + return TRUE; + } + + return FALSE; +} + + +/* For vertex 'v', find which triangles must be deleted to extend the + * hull; find the boundary edges of that hole so that it can be filled + * with connections to the new vertex, and update the hull_triangles + * to delete the marked triangles */ +static void add_point(GHash *hull_triangles, BLI_mempool *hull_pool, + BLI_mempool *edge_pool, GHash *outside, BMVert *v) +{ + ListBase edges = {NULL, NULL}; + HullBoundaryEdge *e, *next; + GHashIterator iter; + + GHASH_ITER (iter, outside) { + HullTriangle *t = BLI_ghashIterator_getKey(&iter); + expand_boundary_edges(&edges, edge_pool, t); + + /* Delete the triangle */ + BLI_ghash_remove(hull_triangles, t, NULL, NULL); + BLI_mempool_free(hull_pool, t); + } + + /* Fill hole boundary with triangles to new point */ + for (e = edges.first; e; e = next) { + next = e->next; + hull_add_triangle(hull_triangles, hull_pool, e->v[0], e->v[1], v); + BLI_mempool_free(edge_pool, e); + } +} + +static BMFace *hull_find_example_face(BMesh *bm, BMEdge *e) +{ + BMIter iter; + BMFace *f; + + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { + if (BMO_elem_flag_test(bm, f, HULL_FLAG_INPUT) || + !BMO_elem_flag_test(bm, f, HULL_FLAG_OUTPUT_GEOM)) + { + return f; + } + } + + return NULL; +} + +static void hull_output_triangles(BMesh *bm, GHash *hull_triangles) +{ + GHashIterator iter; + + GHASH_ITER (iter, hull_triangles) { + HullTriangle *t = BLI_ghashIterator_getKey(&iter); + + if (!t->skip) { + BMEdge *edges[3] = { + BM_edge_create(bm, t->v[0], t->v[1], NULL, TRUE), + BM_edge_create(bm, t->v[1], t->v[2], NULL, TRUE), + BM_edge_create(bm, t->v[2], t->v[0], NULL, TRUE) + }; + BMFace *f, *example = NULL; + int i; + + /* Look for an adjacent face that existed before the hull */ + for (i = 0; i < 3; i++) { + if (!example) + example = hull_find_example_face(bm, edges[i]); + } + + f = BM_face_create_quad_tri_v(bm, t->v, 3, example, FALSE); + BM_face_copy_shared(bm, f); + + /* Mark face/verts/edges for 'geomout' slot and select */ + BMO_elem_flag_enable(bm, f, HULL_FLAG_OUTPUT_GEOM); + BM_face_select_set(bm, f, TRUE); + for (i = 0; i < 3; i++) { + BMO_elem_flag_enable(bm, t->v[i], HULL_FLAG_OUTPUT_GEOM); + BMO_elem_flag_enable(bm, edges[i], HULL_FLAG_OUTPUT_GEOM); + } + } + } +} + + + +/***************************** Final Edges ****************************/ + +typedef struct { + GHash *edges; + BLI_mempool *base_pool, *link_pool; +} HullFinalEdges; + +static LinkData *final_edges_find_link(ListBase *adj, BMVert *v) +{ + LinkData *link; + + for (link = adj->first; link; link = link->next) { + if (link->data == v) + return link; + } + + return NULL; +} + +static int hull_final_edges_lookup(HullFinalEdges *final_edges, + BMVert *v1, BMVert *v2) +{ + ListBase *adj; + + /* Use lower vertex pointer for hash key */ + if (v1 > v2) + SWAP(BMVert *, v1, v2); + + adj = BLI_ghash_lookup(final_edges->edges, v1); + if (!adj) + return FALSE; + + return !!final_edges_find_link(adj, v2); +} + +/* Used for checking whether a pre-existing edge lies on the hull */ +static HullFinalEdges *hull_final_edges(GHash *hull_triangles) +{ + HullFinalEdges *final_edges; + GHashIterator iter; + + final_edges = MEM_callocN(sizeof(HullFinalEdges), "HullFinalEdges"); + final_edges->edges = BLI_ghash_new(BLI_ghashutil_ptrhash, + BLI_ghashutil_ptrcmp, + "final edges ghash"); + final_edges->base_pool = BLI_mempool_create(sizeof(ListBase), 128, 128, 0); + final_edges->link_pool = BLI_mempool_create(sizeof(LinkData), 128, 128, 0); + + GHASH_ITER (iter, hull_triangles) { + LinkData *link; + int i; + + for (i = 0; i < 3; i++) { + HullTriangle *t = BLI_ghashIterator_getKey(&iter); + BMVert *v1 = t->v[i]; + BMVert *v2 = t->v[(i + 1) % 3]; + ListBase *adj; + + /* Use lower vertex pointer for hash key */ + if (v1 > v2) + SWAP(BMVert *, v1, v2); + + adj = BLI_ghash_lookup(final_edges->edges, v1); + if (!adj) { + adj = BLI_mempool_calloc(final_edges->base_pool); + BLI_ghash_insert(final_edges->edges, v1, adj); + } + + if (!final_edges_find_link(adj, v2)) { + link = BLI_mempool_calloc(final_edges->link_pool); + link->data = v2; + BLI_addtail(adj, link); + } + } + } + + return final_edges; +} + +static void hull_final_edges_free(HullFinalEdges *final_edges) +{ + BLI_ghash_free(final_edges->edges, NULL, NULL); + BLI_mempool_destroy(final_edges->base_pool); + BLI_mempool_destroy(final_edges->link_pool); + MEM_freeN(final_edges); +} + + + +/************************* Initial Tetrahedron ************************/ + +static void hull_add_tetrahedron(GHash *hull_triangles, BLI_mempool *pool, + BMVert *tetra[4]) +{ + float center[3]; + int i, indices[4][3] = { + {0, 1, 2}, + {0, 2, 3}, + {1, 0, 3}, + {2, 1, 3}}; + + /* Calculate center */ + zero_v3(center); + for (i = 0; i < 4; i++) + add_v3_v3(center, tetra[i]->co); + mul_v3_fl(center, 0.25f); + + for (i = 0; i < 4; i++) { + BMVert *v1 = tetra[indices[i][0]]; + BMVert *v2 = tetra[indices[i][1]]; + BMVert *v3 = tetra[indices[i][2]]; + float no[3], d[3]; + + normal_tri_v3(no, v1->co, v2->co, v3->co); + sub_v3_v3v3(d, center, v1->co); + if (dot_v3v3(no, d) > 0) + SWAP(BMVert *, v1, v3); + + hull_add_triangle(hull_triangles, pool, v1, v2, v3); + } +} + +/* For each axis, get the minimum and maximum input vertices */ +static void hull_get_min_max(BMesh *bm, BMOperator *op, + BMVert *min[3], BMVert *max[3]) +{ + BMOIter oiter; + BMVert *v; + + min[0] = min[1] = min[2] = NULL; + max[0] = max[1] = max[2] = NULL; + + BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) { + int i; + + for (i = 0; i < 3; i++) { + if (!min[i] || v->co[i] < min[i]->co[i]) + min[i] = v; + if (!max[i] || v->co[i] > max[i]->co[i]) + max[i] = v; + } + } +} + +/* Returns true if input is coplanar */ +static int hull_find_large_tetrahedron(BMesh *bm, BMOperator *op, + BMVert *tetra[4]) +{ + BMVert *min[3], *max[3], *v; + BMOIter oiter; + float widest_axis_len, largest_dist, plane_normal[3]; + int i, j, widest_axis; + + tetra[0] = tetra[1] = tetra[2] = tetra[3] = NULL; + hull_get_min_max(bm, op, min, max); + + /* Check for flat axis */ + for (i = 0; i < 3; i++) { + if (min[i] == max[i]) { + return TRUE; + } + } + + /* Find widest axis */ + widest_axis_len = 0.0f; + widest_axis = 0; /* set here in the unlikey case this isn't set below */ + for (i = 0; i < 3; i++) { + float len = (max[i]->co[i] - min[i]->co[i]); + if (len >= widest_axis_len) { + widest_axis_len = len; + widest_axis = i; + } + } + + /* Use widest axis for first two points */ + tetra[0] = min[widest_axis]; + tetra[1] = max[widest_axis]; + BMO_elem_flag_enable(bm, tetra[0], HULL_FLAG_TETRA_VERT); + BMO_elem_flag_enable(bm, tetra[1], HULL_FLAG_TETRA_VERT); + + /* Choose third vertex farthest from existing line segment */ + largest_dist = 0; + for (i = 0; i < 3; i++) { + BMVert *v; + float dist; + + if (i == widest_axis) + continue; + + v = min[i]; + for (j = 0; j < 2; j++) { + dist = dist_to_line_segment_v3(v->co, tetra[0]->co, tetra[1]->co); + if (dist > largest_dist) { + largest_dist = dist; + tetra[2] = v; + } + + v = max[i]; + } + } + + if (tetra[2]) { + BMO_elem_flag_enable(bm, tetra[2], HULL_FLAG_TETRA_VERT); + } + else { + return TRUE; + } + + /* Check for colinear vertices */ + if (largest_dist < 0.0001f) + return TRUE; + + /* Choose fourth point farthest from existing plane */ + largest_dist = 0; + normal_tri_v3(plane_normal, tetra[0]->co, tetra[1]->co, tetra[2]->co); + BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) { + if (!BMO_elem_flag_test(bm, v, HULL_FLAG_TETRA_VERT)) { + float dist = fabsf(dist_to_plane_v3(v->co, tetra[0]->co, plane_normal)); + if (dist > largest_dist) { + largest_dist = dist; + tetra[3] = v; + } + } + } + + if (tetra[3]) { + BMO_elem_flag_enable(bm, tetra[3], HULL_FLAG_TETRA_VERT); + } + else { + return TRUE; + } + + if (largest_dist < 0.0001f) + return TRUE; + + return FALSE; +} + + + +/**************************** Final Output ****************************/ + +static void hull_remove_overlapping(BMesh *bm, GHash *hull_triangles, + HullFinalEdges *final_edges) +{ + GHashIterator hull_iter; + + GHASH_ITER (hull_iter, hull_triangles) { + HullTriangle *t = BLI_ghashIterator_getKey(&hull_iter); + BMIter bm_iter1, bm_iter2; + BMFace *f; + int f_on_hull; + + BM_ITER_ELEM (f, &bm_iter1, t->v[0], BM_FACES_OF_VERT) { + BMEdge *e; + + /* Check that all the face's edges are on the hull, + otherwise can't reuse it */ + f_on_hull = TRUE; + BM_ITER_ELEM (e, &bm_iter2, f, BM_EDGES_OF_FACE) { + if (!hull_final_edges_lookup(final_edges, e->v1, e->v2)) { + f_on_hull = FALSE; + break; + } + } + + /* Note: can't change ghash while iterating, so mark + with 'skip' flag rather than deleting triangles */ + if (BM_vert_in_face(f, t->v[1]) && + BM_vert_in_face(f, t->v[2]) && f_on_hull) { + t->skip = TRUE; + BMO_elem_flag_disable(bm, f, HULL_FLAG_INTERIOR_ELE); + BMO_elem_flag_enable(bm, f, HULL_FLAG_HOLE); + } + } + } +} + +static void hull_mark_interior_elements(BMesh *bm, BMOperator *op, + GHash *hull_triangles, + HullFinalEdges *final_edges) +{ + BMVert *v; + BMEdge *e; + BMFace *f; + BMOIter oiter; + + /* Check all input vertices again to see if they are actually part + of the hull */ + BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) { + if (!hull_test_v_outside(hull_triangles, v)) { + /* Mark for 'interior_verts' slot */ + BMO_elem_flag_enable(bm, v, HULL_FLAG_INTERIOR_ELE); + } + } + + /* Check for interior edges too */ + BMO_ITER (e, &oiter, bm, op, "input", BM_EDGE) { + if (!hull_final_edges_lookup(final_edges, e->v1, e->v2)) + BMO_elem_flag_enable(bm, e, HULL_FLAG_INTERIOR_ELE); + } + + /* Mark all input faces as interior, some may be unmarked in + hull_remove_overlapping() */ + BMO_ITER (f, &oiter, bm, op, "input", BM_FACE) { + BMO_elem_flag_enable(bm, f, HULL_FLAG_INTERIOR_ELE); + } +} + +static void hull_tag_unused(BMesh *bm, BMOperator *op) +{ + BMIter iter; + BMOIter oiter; + BMVert *v; + BMEdge *e; + BMFace *f; + + /* Mark vertices, edges, and faces that are already marked + interior (i.e. were already part of the input, but not part of + the hull), but that aren't also used by elements outside the + input set */ + BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) { + if (BMO_elem_flag_test(bm, v, HULL_FLAG_INTERIOR_ELE)) { + int del = TRUE; + + BM_ITER_ELEM (e, &iter, v, BM_EDGES_OF_VERT) { + if (!BMO_elem_flag_test(bm, e, HULL_FLAG_INPUT)) { + del = FALSE; + break; + } + } + + BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) { + if (!BMO_elem_flag_test(bm, f, HULL_FLAG_INPUT)) { + del = FALSE; + break; + } + } + + if (del) + BMO_elem_flag_enable(bm, v, HULL_FLAG_DEL); + } + } + + BMO_ITER (e, &oiter, bm, op, "input", BM_EDGE) { + if (BMO_elem_flag_test(bm, e, HULL_FLAG_INTERIOR_ELE)) { + int del = TRUE; + + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { + if (!BMO_elem_flag_test(bm, f, HULL_FLAG_INPUT)) { + del = FALSE; + break; + } + } + + if (del) + BMO_elem_flag_enable(bm, e, HULL_FLAG_DEL); + } + } + + BMO_ITER (f, &oiter, bm, op, "input", BM_FACE) { + if (BMO_elem_flag_test(bm, f, HULL_FLAG_INTERIOR_ELE)) + BMO_elem_flag_enable(bm, f, HULL_FLAG_DEL); + } +} + +void hull_tag_holes(BMesh *bm, BMOperator *op) +{ + BMIter iter; + BMOIter oiter; + BMFace *f; + BMEdge *e; + + /* Unmark any hole faces if they are isolated or part of a + * border */ + BMO_ITER (f, &oiter, bm, op, "input", BM_FACE) { + if (BMO_elem_flag_test(bm, f, HULL_FLAG_HOLE)) { + BM_ITER_ELEM (e, &iter, f, BM_EDGES_OF_FACE) { + if (BM_edge_face_count(e) == 1) { + BMO_elem_flag_disable(bm, f, HULL_FLAG_HOLE); + break; + } + } + } + } + + /* Mark edges too if all adjacent faces are holes */ + BMO_ITER (e, &oiter, bm, op, "input", BM_EDGE) { + int hole = TRUE; + + BM_ITER_ELEM (f, &iter, e, BM_FACES_OF_EDGE) { + if (!BMO_elem_flag_test(bm, f, HULL_FLAG_HOLE)) { + hole = FALSE; + break; + } + } + + if (hole) + BMO_elem_flag_enable(bm, e, HULL_FLAG_HOLE); + } +} + +void bmo_convex_hull_exec(BMesh *bm, BMOperator *op) +{ + HullFinalEdges *final_edges; + BLI_mempool *hull_pool, *edge_pool; + BMVert *v, *tetra[4]; + BMElemF *ele; + BMOIter oiter; + GHash *hull_triangles; + + /* Verify that at least four verts in the input */ + if (BMO_slot_get(op, "input")->len < 4) { + BMO_error_raise(bm, op, BMERR_CONVEX_HULL_FAILED, + "Requires at least four vertices"); + return; + } + + /* Initialize the convex hull by building a tetrahedron. A + * degenerate tetrahedron can cause problems, so report error and + * fail if the result is coplanar */ + if (hull_find_large_tetrahedron(bm, op, tetra)) { + BMO_error_raise(bm, op, BMERR_CONVEX_HULL_FAILED, + "Input vertices are coplanar"); + return; + } + + /* Tag input elements */ + BMO_ITER (ele, &oiter, bm, op, "input", BM_ALL) + BMO_elem_flag_enable(bm, ele, HULL_FLAG_INPUT); + + edge_pool = BLI_mempool_create(sizeof(HullBoundaryEdge), 128, 128, 0); + hull_pool = BLI_mempool_create(sizeof(HullTriangle), 128, 128, 0); + hull_triangles = BLI_ghash_new(BLI_ghashutil_ptrhash, + BLI_ghashutil_ptrcmp, + "hull_triangles"); + + /* Add tetrahedron triangles */ + hull_add_tetrahedron(hull_triangles, hull_pool, tetra); + + /* Expand hull to cover new vertices outside the existing hull */ + BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) { + if (!BMO_elem_flag_test(bm, v, HULL_FLAG_TETRA_VERT)) { + GHash *outside = hull_triangles_v_outside(hull_triangles, v); + if (BLI_ghash_size(outside)) { + /* Expand hull and delete interior triangles */ + add_point(hull_triangles, hull_pool, edge_pool, outside, v); + } + BLI_ghash_free(outside, NULL, NULL); + } + } + + BLI_mempool_destroy(edge_pool); + final_edges = hull_final_edges(hull_triangles); + + hull_mark_interior_elements(bm, op, hull_triangles, final_edges); + + /* Remove hull triangles covered by an existing face */ + if (BMO_slot_bool_get(op, "use_existing_faces")) { + hull_remove_overlapping(bm, hull_triangles, final_edges); + + hull_tag_holes(bm, op); + } + + /* Done with edges */ + hull_final_edges_free(final_edges); + + /* Convert hull triangles to BMesh faces */ + hull_output_triangles(bm, hull_triangles); + BLI_mempool_destroy(hull_pool); + + BLI_ghash_free(hull_triangles, NULL, NULL); + + hull_tag_unused(bm, op); + + /* Output slot of input elements that ended up inside the hull + * rather than part of it */ + BMO_slot_buffer_from_enabled_flag(bm, op, "interior_geom", BM_ALL, + HULL_FLAG_INTERIOR_ELE); + + /* Output slot of input elements that ended up inside the hull and + * are are unused by other geometry. */ + BMO_slot_buffer_from_enabled_flag(bm, op, "unused_geom", BM_ALL, + HULL_FLAG_DEL); + + /* Output slot of faces and edges that were in the input and on + * the hull (useful for cases like bridging where you want to + * delete some input geometry) */ + BMO_slot_buffer_from_enabled_flag(bm, op, "holes_geom", BM_ALL, + HULL_FLAG_HOLE); + + /* Output slot of all hull vertices, faces, and edges */ + BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_ALL, + HULL_FLAG_OUTPUT_GEOM); +} diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 712f6b736d6..26197c43bd0 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -80,23 +80,6 @@ static BMLoop *bm_edge_is_mixed_face_tag(BMLoop *l) } } -float bm_vert_avg_tag_dist(BMVert *v) -{ - BMIter iter; - BMEdge *e; - int tot; - float length = 0.0f; - - BM_ITER_ELEM_INDEX (e, &iter, v, BM_EDGES_OF_VERT, tot) { - BMVert *v_other = BM_edge_other_vert(e, v); - if (BM_elem_flag_test(v_other, BM_ELEM_TAG)) { - length += BM_edge_calc_length(e); - } - } - - return length / (float)tot; -} - /** * implementation is as follows... * @@ -330,7 +313,8 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) /* scale by edge angle */ if (use_even_offset) { - mul_v3_fl(tvec, shell_angle_to_dist(angle_normalized_v3v3(e_info_a->no, e_info_b->no) / 2.0f)); + mul_v3_fl(tvec, shell_angle_to_dist(angle_normalized_v3v3(e_info_a->no, + e_info_b->no) / 2.0f)); } /* scale relative to edge lengths */ @@ -544,7 +528,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(v, BM_ELEM_TAG)) { const float fac = (depth * - (use_relative_offset ? bm_vert_avg_tag_dist(v) : 1.0f) * + (use_relative_offset ? BM_vert_calc_mean_tagged_edge_length(v) : 1.0f) * (use_even_boundry ? BM_vert_calc_shell_factor(v) : 1.0f)); madd_v3_v3v3fl(varr_co[i], v->co, v->no, fac); } diff --git a/source/blender/bmesh/operators/bmo_primitive.c b/source/blender/bmesh/operators/bmo_primitive.c index 6fd3c8ce99c..08cd3835b2d 100644 --- a/source/blender/bmesh/operators/bmo_primitive.c +++ b/source/blender/bmesh/operators/bmo_primitive.c @@ -36,41 +36,41 @@ /* ************************ primitives ******************* */ static float icovert[12][3] = { - {0.0f,0.0f,-200.0f}, - {144.72f, -105.144f,-89.443f}, - {-55.277f, -170.128,-89.443f}, - {-178.885f,0.0f,-89.443f}, - {-55.277f,170.128f,-89.443f}, - {144.72f,105.144f,-89.443f}, - {55.277f,-170.128f,89.443f}, - {-144.72f,-105.144f,89.443f}, - {-144.72f,105.144f,89.443f}, - {55.277f,170.128f,89.443f}, - {178.885f,0.0f,89.443f}, - {0.0f,0.0f,200.0f} + {0.0f, 0.0f, -200.0f}, + {144.72f, -105.144f, -89.443f}, + {-55.277f, -170.128, -89.443f}, + {-178.885f, 0.0f, -89.443f}, + {-55.277f, 170.128f, -89.443f}, + {144.72f, 105.144f, -89.443f}, + {55.277f, -170.128f, 89.443f}, + {-144.72f, -105.144f, 89.443f}, + {-144.72f, 105.144f, 89.443f}, + {55.277f, 170.128f, 89.443f}, + {178.885f, 0.0f, 89.443f}, + {0.0f, 0.0f, 200.0f} }; static short icoface[20][3] = { - {0,1,2}, - {1,0,5}, - {0,2,3}, - {0,3,4}, - {0,4,5}, - {1,5,10}, - {2,1,6}, - {3,2,7}, - {4,3,8}, - {5,4,9}, - {1,10,6}, - {2,6,7}, - {3,7,8}, - {4,8,9}, - {5,9,10}, - {6,10,11}, - {7,6,11}, - {8,7,11}, - {9,8,11}, - {10,9,11} + {0, 1, 2}, + {1, 0, 5}, + {0, 2, 3}, + {0, 3, 4}, + {0, 4, 5}, + {1, 5, 10}, + {2, 1, 6}, + {3, 2, 7}, + {4, 3, 8}, + {5, 4, 9}, + {1, 10, 6}, + {2, 6, 7}, + {3, 7, 8}, + {4, 8, 9}, + {5, 9, 10}, + {6, 10, 11}, + {7, 6, 11}, + {8, 7, 11}, + {9, 8, 11}, + {10, 9, 11} }; /* HACK: these can also be found in cmoview.tga.c, but are here so that they can be found by linker @@ -81,149 +81,149 @@ static int monkeyo = 4; static int monkeynv = 271; static int monkeynf = 250; static signed char monkeyv[271][3] = { - {-71,21,98},{-63,12,88},{-57,7,74},{-82,-3,79},{-82,4,92}, - {-82,17,100},{-92,21,102},{-101,12,95},{-107,7,83}, - {-117,31,84},{-109,31,95},{-96,31,102},{-92,42,102}, - {-101,50,95},{-107,56,83},{-82,66,79},{-82,58,92}, - {-82,46,100},{-71,42,98},{-63,50,88},{-57,56,74}, - {-47,31,72},{-55,31,86},{-67,31,97},{-66,31,99}, - {-70,43,100},{-82,48,103},{-93,43,105},{-98,31,105}, - {-93,20,105},{-82,31,106},{-82,15,103},{-70,20,100}, - {-127,55,95},{-127,45,105},{-127,-87,94},{-127,-41,100}, - {-127,-24,102},{-127,-99,92},{-127,52,77},{-127,73,73}, - {-127,115,-70},{-127,72,-109},{-127,9,-106},{-127,-49,-45}, - {-101,-24,72},{-87,-56,73},{-82,-89,73},{-80,-114,68}, - {-85,-121,67},{-104,-124,71},{-127,-126,74},{-71,-18,68}, - {-46,-5,69},{-21,19,57},{-17,55,76},{-36,62,80}, - {-64,77,88},{-86,97,94},{-107,92,97},{-119,63,96}, - {-106,53,99},{-111,39,98},{-101,12,95},{-79,2,90}, - {-64,8,86},{-47,24,83},{-45,38,83},{-50,48,85}, - {-72,56,92},{-95,60,97},{-127,-98,94},{-113,-92,94}, - {-112,-107,91},{-119,-113,89},{-127,-114,88},{-127,-25,96}, - {-127,-18,95},{-114,-19,95},{-111,-29,96},{-116,-37,95}, - {-76,-6,86},{-48,7,80},{-34,26,77},{-32,48,84}, - {-39,53,93},{-71,70,102},{-87,82,107},{-101,79,109}, - {-114,55,108},{-111,-13,104},{-100,-57,91},{-95,-90,88}, - {-93,-105,85},{-97,-117,81},{-106,-119,81},{-127,-121,82}, - {-127,6,93},{-127,27,98},{-85,61,95},{-106,18,96}, - {-110,27,97},{-112,-88,94},{-117,-57,96},{-127,-57,96}, - {-127,-42,95},{-115,-35,100},{-110,-29,102},{-113,-17,100}, - {-122,-16,100},{-127,-26,106},{-121,-19,104},{-115,-20,104}, - {-113,-29,106},{-117,-32,103},{-127,-37,103},{-94,-40,71}, - {-106,-31,91},{-104,-40,91},{-97,-32,71},{-127,-112,88}, - {-121,-111,88},{-115,-105,91},{-115,-95,93},{-127,-100,84}, - {-115,-96,85},{-115,-104,82},{-121,-109,81},{-127,-110,81}, - {-105,28,100},{-103,20,99},{-84,55,97},{-92,54,99}, - {-73,51,99},{-55,45,89},{-52,37,88},{-53,25,87}, - {-66,13,92},{-79,8,95},{-98,14,100},{-104,38,100}, - {-100,48,100},{-97,46,97},{-102,38,97},{-96,16,97}, - {-79,11,93},{-68,15,90},{-57,27,86},{-56,36,86}, - {-59,43,87},{-74,50,96},{-91,51,98},{-84,52,96}, - {-101,22,96},{-102,29,96},{-113,59,78},{-102,85,79}, - {-84,88,76},{-65,71,71},{-40,58,63},{-25,52,59}, - {-28,21,48},{-50,0,53},{-71,-12,60},{-127,115,37}, - {-127,126,-10},{-127,-25,-86},{-127,-59,24},{-127,-125,59}, - {-127,-103,44},{-127,-73,41},{-127,-62,36},{-18,30,7}, - {-17,41,-6},{-28,34,-56},{-68,56,-90},{-33,-6,9}, - {-51,-16,-21},{-45,-1,-55},{-84,7,-85},{-97,-45,52}, - {-104,-53,33},{-90,-91,49},{-95,-64,50},{-85,-117,51}, - {-109,-97,47},{-111,-69,46},{-106,-121,56},{-99,-36,55}, - {-100,-29,60},{-101,-22,64},{-100,-50,21},{-89,-40,-34}, - {-83,-19,-69},{-69,111,-49},{-69,119,-9},{-69,109,30}, - {-68,67,55},{-34,52,43},{-46,58,36},{-45,90,7}, - {-25,72,16},{-25,79,-15},{-45,96,-25},{-45,87,-57}, - {-25,69,-46},{-48,42,-75},{-65,3,-70},{-22,42,-26}, - {-75,-22,19},{-72,-25,-27},{-13,52,-30},{-28,-18,-16}, - {6,-13,-42},{37,7,-55},{46,41,-54},{31,65,-54}, - {4,61,-40},{3,53,-37},{25,56,-50},{35,37,-52}, - {28,10,-52},{5,-5,-39},{-21,-9,-17},{-9,46,-28}, - {-6,39,-37},{-14,-3,-27},{6,0,-47},{25,12,-57}, - {31,32,-57},{23,46,-56},{4,44,-46},{-19,37,-27}, - {-20,22,-35},{-30,12,-35},{-22,11,-35},{-19,2,-35}, - {-23,-2,-35},{-34,0,-9},{-35,-3,-22},{-35,5,-24}, - {-25,26,-27},{-13,31,-34},{-13,30,-41},{-23,-2,-41}, - {-18,2,-41},{-21,10,-41},{-29,12,-41},{-19,22,-41}, - {6,42,-53},{25,44,-62},{34,31,-63},{28,11,-62}, - {7,0,-54},{-14,-2,-34},{-5,37,-44},{-13,14,-42}, - {-7,8,-43},{1,16,-47},{-4,22,-45},{3,30,-48}, - {8,24,-49},{15,27,-50},{12,35,-50},{4,56,-62}, - {33,60,-70},{48,38,-64},{41,7,-68},{6,-11,-63}, - {-26,-16,-42},{-17,49,-49}, + {-71, 21, 98}, {-63, 12, 88}, {-57, 7, 74}, {-82, -3, 79}, {-82, 4, 92}, + {-82, 17, 100}, {-92, 21, 102}, {-101, 12, 95}, {-107, 7, 83}, + {-117, 31, 84}, {-109, 31, 95}, {-96, 31, 102}, {-92, 42, 102}, + {-101, 50, 95}, {-107, 56, 83}, {-82, 66, 79}, {-82, 58, 92}, + {-82, 46, 100}, {-71, 42, 98}, {-63, 50, 88}, {-57, 56, 74}, + {-47, 31, 72}, {-55, 31, 86}, {-67, 31, 97}, {-66, 31, 99}, + {-70, 43, 100}, {-82, 48, 103}, {-93, 43, 105}, {-98, 31, 105}, + {-93, 20, 105}, {-82, 31, 106}, {-82, 15, 103}, {-70, 20, 100}, + {-127, 55, 95}, {-127, 45, 105}, {-127, -87, 94}, {-127, -41, 100}, + {-127, -24, 102}, {-127, -99, 92}, {-127, 52, 77}, {-127, 73, 73}, + {-127, 115, -70}, {-127, 72, -109}, {-127, 9, -106}, {-127, -49, -45}, + {-101, -24, 72}, {-87, -56, 73}, {-82, -89, 73}, {-80, -114, 68}, + {-85, -121, 67}, {-104, -124, 71}, {-127, -126, 74}, {-71, -18, 68}, + {-46, -5, 69}, {-21, 19, 57}, {-17, 55, 76}, {-36, 62, 80}, + {-64, 77, 88}, {-86, 97, 94}, {-107, 92, 97}, {-119, 63, 96}, + {-106, 53, 99}, {-111, 39, 98}, {-101, 12, 95}, {-79, 2, 90}, + {-64, 8, 86}, {-47, 24, 83}, {-45, 38, 83}, {-50, 48, 85}, + {-72, 56, 92}, {-95, 60, 97}, {-127, -98, 94}, {-113, -92, 94}, + {-112, -107, 91}, {-119, -113, 89}, {-127, -114, 88}, {-127, -25, 96}, + {-127, -18, 95}, {-114, -19, 95}, {-111, -29, 96}, {-116, -37, 95}, + {-76, -6, 86}, {-48, 7, 80}, {-34, 26, 77}, {-32, 48, 84}, + {-39, 53, 93}, {-71, 70, 102}, {-87, 82, 107}, {-101, 79, 109}, + {-114, 55, 108}, {-111, -13, 104}, {-100, -57, 91}, {-95, -90, 88}, + {-93, -105, 85}, {-97, -117, 81}, {-106, -119, 81}, {-127, -121, 82}, + {-127, 6, 93}, {-127, 27, 98}, {-85, 61, 95}, {-106, 18, 96}, + {-110, 27, 97}, {-112, -88, 94}, {-117, -57, 96}, {-127, -57, 96}, + {-127, -42, 95}, {-115, -35, 100}, {-110, -29, 102}, {-113, -17, 100}, + {-122, -16, 100}, {-127, -26, 106}, {-121, -19, 104}, {-115, -20, 104}, + {-113, -29, 106}, {-117, -32, 103}, {-127, -37, 103}, {-94, -40, 71}, + {-106, -31, 91}, {-104, -40, 91}, {-97, -32, 71}, {-127, -112, 88}, + {-121, -111, 88}, {-115, -105, 91}, {-115, -95, 93}, {-127, -100, 84}, + {-115, -96, 85}, {-115, -104, 82}, {-121, -109, 81}, {-127, -110, 81}, + {-105, 28, 100}, {-103, 20, 99}, {-84, 55, 97}, {-92, 54, 99}, + {-73, 51, 99}, {-55, 45, 89}, {-52, 37, 88}, {-53, 25, 87}, + {-66, 13, 92}, {-79, 8, 95}, {-98, 14, 100}, {-104, 38, 100}, + {-100, 48, 100}, {-97, 46, 97}, {-102, 38, 97}, {-96, 16, 97}, + {-79, 11, 93}, {-68, 15, 90}, {-57, 27, 86}, {-56, 36, 86}, + {-59, 43, 87}, {-74, 50, 96}, {-91, 51, 98}, {-84, 52, 96}, + {-101, 22, 96}, {-102, 29, 96}, {-113, 59, 78}, {-102, 85, 79}, + {-84, 88, 76}, {-65, 71, 71}, {-40, 58, 63}, {-25, 52, 59}, + {-28, 21, 48}, {-50, 0, 53}, {-71, -12, 60}, {-127, 115, 37}, + {-127, 126, -10}, {-127, -25, -86}, {-127, -59, 24}, {-127, -125, 59}, + {-127, -103, 44}, {-127, -73, 41}, {-127, -62, 36}, {-18, 30, 7}, + {-17, 41, -6}, {-28, 34, -56}, {-68, 56, -90}, {-33, -6, 9}, + {-51, -16, -21}, {-45, -1, -55}, {-84, 7, -85}, {-97, -45, 52}, + {-104, -53, 33}, {-90, -91, 49}, {-95, -64, 50}, {-85, -117, 51}, + {-109, -97, 47}, {-111, -69, 46}, {-106, -121, 56}, {-99, -36, 55}, + {-100, -29, 60}, {-101, -22, 64}, {-100, -50, 21}, {-89, -40, -34}, + {-83, -19, -69}, {-69, 111, -49}, {-69, 119, -9}, {-69, 109, 30}, + {-68, 67, 55}, {-34, 52, 43}, {-46, 58, 36}, {-45, 90, 7}, + {-25, 72, 16}, {-25, 79, -15}, {-45, 96, -25}, {-45, 87, -57}, + {-25, 69, -46}, {-48, 42, -75}, {-65, 3, -70}, {-22, 42, -26}, + {-75, -22, 19}, {-72, -25, -27}, {-13, 52, -30}, {-28, -18, -16}, + {6, -13, -42}, {37, 7, -55}, {46, 41, -54}, {31, 65, -54}, + {4, 61, -40}, {3, 53, -37}, {25, 56, -50}, {35, 37, -52}, + {28, 10, -52}, {5, -5, -39}, {-21, -9, -17}, {-9, 46, -28}, + {-6, 39, -37}, {-14, -3, -27}, {6, 0, -47}, {25, 12, -57}, + {31, 32, -57}, {23, 46, -56}, {4, 44, -46}, {-19, 37, -27}, + {-20, 22, -35}, {-30, 12, -35}, {-22, 11, -35}, {-19, 2, -35}, + {-23, -2, -35}, {-34, 0, -9}, {-35, -3, -22}, {-35, 5, -24}, + {-25, 26, -27}, {-13, 31, -34}, {-13, 30, -41}, {-23, -2, -41}, + {-18, 2, -41}, {-21, 10, -41}, {-29, 12, -41}, {-19, 22, -41}, + {6, 42, -53}, {25, 44, -62}, {34, 31, -63}, {28, 11, -62}, + {7, 0, -54}, {-14, -2, -34}, {-5, 37, -44}, {-13, 14, -42}, + {-7, 8, -43}, {1, 16, -47}, {-4, 22, -45}, {3, 30, -48}, + {8, 24, -49}, {15, 27, -50}, {12, 35, -50}, {4, 56, -62}, + {33, 60, -70}, {48, 38, -64}, {41, 7, -68}, {6, -11, -63}, + {-26, -16, -42}, {-17, 49, -49}, }; static signed char monkeyf[250][4] = { - {27,4,5,26}, {25,4,5,24}, {3,6,5,4}, {1,6,5,2}, {5,6,7,4}, - {3,6,7,2}, {5,8,7,6}, {3,8,7,4}, {7,8,9,6}, - {5,8,9,4}, {7,10,9,8}, {5,10,9,6}, {9,10,11,8}, - {7,10,11,6}, {9,12,11,10}, {7,12,11,8}, {11,6,13,12}, - {5,4,13,12}, {3,-2,13,12}, {-3,-4,13,12}, {-5,-10,13,12}, - {-11,-12,14,12}, {-13,-18,14,13}, {-19,4,5,13}, {10,12,4,4}, - {10,11,9,9}, {8,7,9,9}, {7,5,6,6}, {6,3,4,4}, - {5,1,2,2}, {4,-1,0,0}, {3,-3,-2,-2}, {22,67,68,23}, - {20,65,66,21}, {18,63,64,19}, {16,61,62,17}, {14,59,60,15}, - {12,19,48,57}, {18,19,48,47}, {18,19,48,47}, {18,19,48,47}, - {18,19,48,47}, {18,19,48,47}, {18,19,48,47}, {18,19,48,47}, - {18,19,48,47}, {18,-9,-8,47}, {18,27,45,46}, {26,55,43,44}, - {24,41,42,54}, {22,39,40,23}, {20,37,38,21}, {18,35,36,19}, - {16,33,34,17}, {14,31,32,15}, {12,39,30,13}, {11,48,45,38}, - {8,36,-19,9}, {8,-20,44,47}, {42,45,46,43}, {18,19,40,39}, - {16,17,38,37}, {14,15,36,35}, {32,44,43,33}, {12,33,32,42}, - {19,44,43,42}, {40,41,42,-27}, {8,9,39,-28}, {15,43,42,16}, - {13,43,42,14}, {11,43,42,12}, {9,-30,42,10}, {37,12,38,-32}, - {-33,37,45,46}, {-33,40,41,39}, {38,40,41,37}, {36,40,41,35}, - {34,40,41,33}, {36,39,38,37}, {35,40,39,38}, {1,2,14,21}, - {1,2,40,13}, {1,2,40,39}, {1,24,12,39}, {-34,36,38,11}, - {35,38,36,37}, {-37,8,35,37}, {-11,-12,-45,40}, {-11,-12,39,38}, - {-11,-12,37,36}, {-11,-12,35,34}, {33,34,40,41}, {33,34,38,39}, - {33,34,36,37}, {33,-52,34,35}, {33,37,36,34}, {33,35,34,34}, - {8,7,37,36}, {-32,7,35,46}, {-34,-33,45,46}, {4,-33,43,34}, - {-34,-33,41,42}, {-34,-33,39,40}, {-34,-33,37,38}, {-34,-33,35,36}, - {-34,-33,33,34}, {-34,-33,31,32}, {-34,-4,28,30}, {-5,-34,28,27}, - {-35,-44,36,27}, {26,35,36,45}, {24,25,44,45}, {25,23,44,42}, - {25,24,41,40}, {25,24,39,38}, {25,24,37,36}, {25,24,35,34}, - {25,24,33,32}, {25,24,31,30}, {15,24,29,38}, {25,24,27,26}, - {23,12,37,26}, {11,12,35,36}, {-86,-59,36,-80}, {-60,-61,36,35}, - {-62,-63,36,35}, {-64,-65,36,35}, {-66,-67,36,35}, {-68,-69,36,35}, - {-70,-71,36,35}, {-72,-73,36,35}, {-74,-75,36,35}, {42,43,53,58}, - {40,41,57,56}, {38,39,55,57}, {-81,-80,37,56}, {-83,-82,55,52}, - {-85,-84,51,49}, {-87,-86,48,49}, {47,50,51,48}, {46,48,51,49}, - {43,46,49,44}, {-92,-91,45,42}, {-23,49,50,-20}, {-94,40,48,-24}, - {-96,-22,48,49}, {-97,48,21,-90}, {-100,36,50,23}, {22,49,48,-100}, - {-101,47,46,22}, {21,45,35,25}, {33,34,44,41}, {13,14,28,24}, - {-107,26,30,-106}, {14,46,45,15}, {14,44,43,-110}, {-111,42,23,-110}, - {6,7,45,46}, {45,44,47,46}, {45,46,47,48}, {47,46,49,48}, - {17,49,47,48}, {17,36,46,48}, {35,36,44,45}, {35,36,40,43}, - {35,36,38,39}, {-4,-3,37,35}, {-123,34,33,1}, {-9,-8,-7,-6}, - {-10,-7,32,-125}, {-127,-11,-126,-126}, {-7,-6,5,31}, {4,5,33,30}, - {4,39,33,32}, {4,35,32,38}, {20,21,39,38}, {4,37,38,5}, - {-11,-10,36,3}, {-11,15,14,35}, {13,16,34,34}, {-13,14,13,13}, - {-3,1,30,29}, {-3,28,29,1}, {-2,31,28,-1}, {12,13,27,30}, - {-2,26,12,12}, {35,29,42,36}, {34,35,36,33}, {32,35,36,31}, - {30,35,36,29}, {28,35,36,27}, {26,35,36,25}, {34,39,38,35}, - {32,39,38,33}, {30,39,38,31}, {28,39,38,29}, {26,39,38,27}, - {25,31,32,38}, {-18,-17,45,44}, {-18,17,28,44}, {-24,-20,42,-23}, - {11,35,27,14}, {25,28,39,41}, {37,41,40,38}, {34,40,36,35}, - {32,40,39,33}, {30,39,31,40}, {21,29,39,22}, {-31,37,28,4}, - {-32,33,35,36}, {32,33,34,34}, {18,35,36,48}, {34,25,40,35}, - {24,25,38,39}, {24,25,36,37}, {24,25,34,35}, {24,25,32,33}, - {24,13,41,31}, {17,11,41,35}, {15,16,34,35}, {13,14,34,35}, - {11,12,34,35}, {9,10,34,35}, {7,8,34,35}, {26,25,37,36}, - {35,36,37,38}, {37,36,39,38}, {37,38,39,40}, {25,31,36,39}, - {18,34,35,30}, {17,22,30,33}, {19,29,21,20}, {16,26,29,17}, - {24,29,28,25}, {22,31,28,23}, {20,31,30,21}, {18,31,30,19}, - {16,30,17,17}, {-21,-22,35,34}, {-21,-22,33,32}, {-21,-22,31,30}, - {-21,-22,29,28}, {-21,-22,27,26}, {-28,-22,25,31}, {24,28,29,30}, - {23,24,26,27}, {23,24,25,25}, {-69,-35,-32,27}, {-70,26,25,-66}, - {-68,-67,24,-33}, + {27, 4, 5, 26}, {25, 4, 5, 24}, {3, 6, 5, 4}, {1, 6, 5, 2}, {5, 6, 7, 4}, + {3, 6, 7, 2}, {5, 8, 7, 6}, {3, 8, 7, 4}, {7, 8, 9, 6}, + {5, 8, 9, 4}, {7, 10, 9, 8}, {5, 10, 9, 6}, {9, 10, 11, 8}, + {7, 10, 11, 6}, {9, 12, 11, 10}, {7, 12, 11, 8}, {11, 6, 13, 12}, + {5, 4, 13, 12}, {3, -2, 13, 12}, {-3, -4, 13, 12}, {-5, -10, 13, 12}, + {-11, -12, 14, 12}, {-13, -18, 14, 13}, {-19, 4, 5, 13}, {10, 12, 4, 4}, + {10, 11, 9, 9}, {8, 7, 9, 9}, {7, 5, 6, 6}, {6, 3, 4, 4}, + {5, 1, 2, 2}, {4, -1, 0, 0}, {3, -3, -2, -2}, {22, 67, 68, 23}, + {20, 65, 66, 21}, {18, 63, 64, 19}, {16, 61, 62, 17}, {14, 59, 60, 15}, + {12, 19, 48, 57}, {18, 19, 48, 47}, {18, 19, 48, 47}, {18, 19, 48, 47}, + {18, 19, 48, 47}, {18, 19, 48, 47}, {18, 19, 48, 47}, {18, 19, 48, 47}, + {18, 19, 48, 47}, {18, -9, -8, 47}, {18, 27, 45, 46}, {26, 55, 43, 44}, + {24, 41, 42, 54}, {22, 39, 40, 23}, {20, 37, 38, 21}, {18, 35, 36, 19}, + {16, 33, 34, 17}, {14, 31, 32, 15}, {12, 39, 30, 13}, {11, 48, 45, 38}, + {8, 36, -19, 9}, {8, -20, 44, 47}, {42, 45, 46, 43}, {18, 19, 40, 39}, + {16, 17, 38, 37}, {14, 15, 36, 35}, {32, 44, 43, 33}, {12, 33, 32, 42}, + {19, 44, 43, 42}, {40, 41, 42, -27}, {8, 9, 39, -28}, {15, 43, 42, 16}, + {13, 43, 42, 14}, {11, 43, 42, 12}, {9, -30, 42, 10}, {37, 12, 38, -32}, + {-33, 37, 45, 46}, {-33, 40, 41, 39}, {38, 40, 41, 37}, {36, 40, 41, 35}, + {34, 40, 41, 33}, {36, 39, 38, 37}, {35, 40, 39, 38}, {1, 2, 14, 21}, + {1, 2, 40, 13}, {1, 2, 40, 39}, {1, 24, 12, 39}, {-34, 36, 38, 11}, + {35, 38, 36, 37}, {-37, 8, 35, 37}, {-11, -12, -45, 40}, {-11, -12, 39, 38}, + {-11, -12, 37, 36}, {-11, -12, 35, 34}, {33, 34, 40, 41}, {33, 34, 38, 39}, + {33, 34, 36, 37}, {33, -52, 34, 35}, {33, 37, 36, 34}, {33, 35, 34, 34}, + {8, 7, 37, 36}, {-32, 7, 35, 46}, {-34, -33, 45, 46}, {4, -33, 43, 34}, + {-34, -33, 41, 42}, {-34, -33, 39, 40}, {-34, -33, 37, 38}, {-34, -33, 35, 36}, + {-34, -33, 33, 34}, {-34, -33, 31, 32}, {-34, -4, 28, 30}, {-5, -34, 28, 27}, + {-35, -44, 36, 27}, {26, 35, 36, 45}, {24, 25, 44, 45}, {25, 23, 44, 42}, + {25, 24, 41, 40}, {25, 24, 39, 38}, {25, 24, 37, 36}, {25, 24, 35, 34}, + {25, 24, 33, 32}, {25, 24, 31, 30}, {15, 24, 29, 38}, {25, 24, 27, 26}, + {23, 12, 37, 26}, {11, 12, 35, 36}, {-86, -59, 36, -80}, {-60, -61, 36, 35}, + {-62, -63, 36, 35}, {-64, -65, 36, 35}, {-66, -67, 36, 35}, {-68, -69, 36, 35}, + {-70, -71, 36, 35}, {-72, -73, 36, 35}, {-74, -75, 36, 35}, {42, 43, 53, 58}, + {40, 41, 57, 56}, {38, 39, 55, 57}, {-81, -80, 37, 56}, {-83, -82, 55, 52}, + {-85, -84, 51, 49}, {-87, -86, 48, 49}, {47, 50, 51, 48}, {46, 48, 51, 49}, + {43, 46, 49, 44}, {-92, -91, 45, 42}, {-23, 49, 50, -20}, {-94, 40, 48, -24}, + {-96, -22, 48, 49}, {-97, 48, 21, -90}, {-100, 36, 50, 23}, {22, 49, 48, -100}, + {-101, 47, 46, 22}, {21, 45, 35, 25}, {33, 34, 44, 41}, {13, 14, 28, 24}, + {-107, 26, 30, -106}, {14, 46, 45, 15}, {14, 44, 43, -110}, {-111, 42, 23, -110}, + {6, 7, 45, 46}, {45, 44, 47, 46}, {45, 46, 47, 48}, {47, 46, 49, 48}, + {17, 49, 47, 48}, {17, 36, 46, 48}, {35, 36, 44, 45}, {35, 36, 40, 43}, + {35, 36, 38, 39}, {-4, -3, 37, 35}, {-123, 34, 33, 1}, {-9, -8, -7, -6}, + {-10, -7, 32, -125}, {-127, -11, -126, -126}, {-7, -6, 5, 31}, {4, 5, 33, 30}, + {4, 39, 33, 32}, {4, 35, 32, 38}, {20, 21, 39, 38}, {4, 37, 38, 5}, + {-11, -10, 36, 3}, {-11, 15, 14, 35}, {13, 16, 34, 34}, {-13, 14, 13, 13}, + {-3, 1, 30, 29}, {-3, 28, 29, 1}, {-2, 31, 28, -1}, {12, 13, 27, 30}, + {-2, 26, 12, 12}, {35, 29, 42, 36}, {34, 35, 36, 33}, {32, 35, 36, 31}, + {30, 35, 36, 29}, {28, 35, 36, 27}, {26, 35, 36, 25}, {34, 39, 38, 35}, + {32, 39, 38, 33}, {30, 39, 38, 31}, {28, 39, 38, 29}, {26, 39, 38, 27}, + {25, 31, 32, 38}, {-18, -17, 45, 44}, {-18, 17, 28, 44}, {-24, -20, 42, -23}, + {11, 35, 27, 14}, {25, 28, 39, 41}, {37, 41, 40, 38}, {34, 40, 36, 35}, + {32, 40, 39, 33}, {30, 39, 31, 40}, {21, 29, 39, 22}, {-31, 37, 28, 4}, + {-32, 33, 35, 36}, {32, 33, 34, 34}, {18, 35, 36, 48}, {34, 25, 40, 35}, + {24, 25, 38, 39}, {24, 25, 36, 37}, {24, 25, 34, 35}, {24, 25, 32, 33}, + {24, 13, 41, 31}, {17, 11, 41, 35}, {15, 16, 34, 35}, {13, 14, 34, 35}, + {11, 12, 34, 35}, {9, 10, 34, 35}, {7, 8, 34, 35}, {26, 25, 37, 36}, + {35, 36, 37, 38}, {37, 36, 39, 38}, {37, 38, 39, 40}, {25, 31, 36, 39}, + {18, 34, 35, 30}, {17, 22, 30, 33}, {19, 29, 21, 20}, {16, 26, 29, 17}, + {24, 29, 28, 25}, {22, 31, 28, 23}, {20, 31, 30, 21}, {18, 31, 30, 19}, + {16, 30, 17, 17}, {-21, -22, 35, 34}, {-21, -22, 33, 32}, {-21, -22, 31, 30}, + {-21, -22, 29, 28}, {-21, -22, 27, 26}, {-28, -22, 25, 31}, {24, 28, 29, 30}, + {23, 24, 26, 27}, {23, 24, 25, 25}, {-69, -35, -32, 27}, {-70, 26, 25, -66}, + {-68, -67, 24, -33}, }; -#define VERT_MARK 1 +#define VERT_MARK 1 -#define EDGE_ORIG 1 -#define EDGE_MARK 2 +#define EDGE_ORIG 1 +#define EDGE_MARK 2 -#define FACE_MARK 1 -#define FACE_NEW 2 +#define FACE_MARK 1 +#define FACE_NEW 2 void bmo_create_grid_exec(BMesh *bm, BMOperator *op) { @@ -260,6 +260,7 @@ void bmo_create_grid_exec(BMesh *bm, BMOperator *op) } /* extrude and translate */ + phid = 2.0f / ((float)seg - 1); vec[0] = vec[2] = 0.0f; vec[1] = dia * phid; mul_mat3_m4_v3(mat, vec); @@ -308,7 +309,7 @@ void bmo_create_uvsphere_exec(BMesh *bm, BMOperator *op) phid /= 2; for (a = 0; a <= tot; a++) { /* Going in this direction, then edge extruding, makes normals face outward */ - vec[0] = -dia * sinf(phi); + vec[0] = -dia *sinf(phi); vec[1] = 0.0; vec[2] = dia * cosf(phi); eve = BM_vert_create(bm, vec, NULL); @@ -353,7 +354,7 @@ void bmo_create_uvsphere_exec(BMesh *bm, BMOperator *op) { float len, len2, vec2[3]; - len = 2 * dia * sinf(phid / 2.0f); + len = 2 *dia *sinf(phid / 2.0f); /* length of one segment in shortest parallen */ vec[0] = dia * sinf(phid); @@ -430,7 +431,7 @@ void bmo_create_icosphere_exec(BMesh *bm, BMOperator *op) "smooth=%f " "numcuts=%i " "use_gridfill=%b use_sphere=%b", - EDGE_MARK, dia, (1 << (subdiv-1)) - 1, + EDGE_MARK, dia, (1 << (subdiv - 1)) - 1, TRUE, TRUE); BMO_op_exec(bm, &bmop); @@ -467,8 +468,8 @@ void bmo_create_monkey_exec(BMesh *bm, BMOperator *op) BMO_elem_flag_enable(bm, tv[i], VERT_MARK); tv[monkeynv + i] = (fabsf(v[0] = -v[0]) < 0.001f) ? - tv[i] : - (eve = BM_vert_create(bm, v, NULL), mul_m4_v3(mat, eve->co), eve); + tv[i] : + (eve = BM_vert_create(bm, v, NULL), mul_m4_v3(mat, eve->co), eve); BMO_elem_flag_enable(bm, tv[monkeynv + i], VERT_MARK); @@ -487,7 +488,7 @@ void bmo_create_monkey_exec(BMesh *bm, BMOperator *op) tv[monkeynv + monkeyf[i][2] + i - monkeyo], tv[monkeynv + monkeyf[i][1] + i - monkeyo], tv[monkeynv + monkeyf[i][0] + i - monkeyo], - (monkeyf[i][3] != monkeyf[i][2]) ? tv[monkeynv + monkeyf[i][3] + i - monkeyo]: NULL, + (monkeyf[i][3] != monkeyf[i][2]) ? tv[monkeynv + monkeyf[i][3] + i - monkeyo] : NULL, NULL, FALSE); } @@ -525,7 +526,7 @@ void bmo_create_circle_exec(BMesh *bm, BMOperator *op) for (a = 0; a < segs; a++, phi += phid) { /* Going this way ends up with normal(s) upward */ - vec[0] = -dia * sinf(phi); + vec[0] = -dia *sinf(phi); vec[1] = dia * cosf(phi); vec[2] = 0.0f; mul_m4_v3(mat, vec); diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c index 70dcc6fa3ae..8060c3b5142 100644 --- a/source/blender/bmesh/operators/bmo_removedoubles.c +++ b/source/blender/bmesh/operators/bmo_removedoubles.c @@ -147,7 +147,7 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) BM_elem_index_set(f, 0); /* set_dirty! */ BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { if (BMO_elem_flag_test(bm, l->v, ELE_DEL)) { - BMO_elem_flag_enable(bm, f, FACE_MARK|ELE_DEL); + BMO_elem_flag_enable(bm, f, FACE_MARK | ELE_DEL); } if (BMO_elem_flag_test(bm, l->e, EDGE_COL)) { BM_elem_index_set(f, BM_elem_index_get(f) + 1); /* set_dirty! */ diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index d96d0f6c74d..03a691e3e9c 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -132,7 +132,7 @@ static void alter_co(BMesh *bm, BMVert *v, BMEdge *UNUSED(origed), const SubDPar madd_v3_v3fl(tvec, nor2, fac); /* falloff for multi subdivide */ - smooth *= sqrtf(fabsf(1.0f - 2.0f * fabsf(0.5f-perc))); + smooth *= sqrtf(fabsf(1.0f - 2.0f * fabsf(0.5f - perc))); mul_v3_fl(tvec, smooth * len); @@ -141,23 +141,24 @@ static void alter_co(BMesh *bm, BMVert *v, BMEdge *UNUSED(origed), const SubDPar if (params->use_fractal) { float len = len_v3v3(vsta->co, vend->co); - float vec2[3] = {0.0f, 0.0f, 0.0f}, co2[3]; + float normal[3] = {0.0f, 0.0f, 0.0f}, co2[3], base1[3], base2[3]; fac = params->fractal * len; - add_v3_v3(vec2, vsta->no); - add_v3_v3(vec2, vend->no); - mul_v3_fl(vec2, 0.5f); + mid_v3_v3v3(normal, vsta->no, vend->no); + ortho_basis_v3v3_v3(base1, base2, normal); add_v3_v3v3(co2, v->co, params->off); - tvec[0] = fac * (BLI_gTurbulence(1.0, co2[0], co2[1], co2[2], 15, 0, 1) - 0.5f); - tvec[1] = fac * (BLI_gTurbulence(1.0, co2[0], co2[1], co2[2], 15, 0, 1) - 0.5f); - tvec[2] = fac * (BLI_gTurbulence(1.0, co2[0], co2[1], co2[2], 15, 0, 1) - 0.5f); + mul_v3_fl(co2, 10.0f); - mul_v3_v3(vec2, tvec); + tvec[0] = fac * (BLI_gTurbulence(1.0, co2[0], co2[1], co2[2], 15, 0, 2) - 0.5f); + tvec[1] = fac * (BLI_gTurbulence(1.0, co2[1], co2[0], co2[2], 15, 0, 2) - 0.5f); + tvec[2] = fac * (BLI_gTurbulence(1.0, co2[1], co2[2], co2[0], 15, 0, 2) - 0.5f); /* add displacement */ - add_v3_v3v3(co, co, vec2); + madd_v3_v3fl(co, normal, tvec[0]); + madd_v3_v3fl(co, base1, tvec[1] * (1.0f - params->along_normal)); + madd_v3_v3fl(co, base2, tvec[2] * (1.0f - params->along_normal)); } /* apply the new difference to the rest of the shape keys, @@ -224,7 +225,7 @@ static BMVert *subdivideedgenum(BMesh *bm, BMEdge *edge, BMEdge *oedge, if (BMO_elem_flag_test(bm, edge, EDGE_PERCENT) && totpoint == 1) percent = BMO_slot_map_float_get(bm, params->op, "edgepercents", edge); else { - percent = 1.0f / (float)(totpoint + 1-curpoint); + percent = 1.0f / (float)(totpoint + 1 - curpoint); percent2 = (float)(curpoint + 1) / (float)(totpoint + 1); } @@ -687,7 +688,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) BLI_array_declare(facedata); BLI_array_declare(edges); BLI_array_declare(verts); - float smooth, fractal; + float smooth, fractal, along_normal; int use_sphere, cornertype, use_singleedge, use_gridfill; int skey, seed, i, j, matched, a, b, numcuts, totesel; @@ -697,6 +698,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) seed = BMO_slot_int_get(op, "seed"); smooth = BMO_slot_float_get(op, "smooth"); fractal = BMO_slot_float_get(op, "fractal"); + along_normal = BMO_slot_float_get(op, "along_normal"); cornertype = BMO_slot_int_get(op, "quadcornertype"); use_singleedge = BMO_slot_bool_get(op, "use_singleedge"); @@ -754,6 +756,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) params.smooth = smooth; params.seed = seed; params.fractal = fractal; + params.along_normal = along_normal; params.use_smooth = (smooth != 0.0f); params.use_fractal = (fractal != 0.0f); params.use_sphere = use_sphere; @@ -1020,12 +1023,12 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) BMO_slot_buffer_from_enabled_flag(bm, op, "outinner", BM_ALL, ELE_INNER); BMO_slot_buffer_from_enabled_flag(bm, op, "outsplit", BM_ALL, ELE_SPLIT); - BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_ALL, ELE_INNER|ELE_SPLIT|SUBD_SPLIT); + BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_ALL, ELE_INNER | ELE_SPLIT | SUBD_SPLIT); } /* editmesh-emulating function */ void BM_mesh_esubdivide(BMesh *bm, const char edge_hflag, - float smooth, float fractal, + float smooth, float fractal, float along_normal, int numcuts, int seltype, int cornertype, const short use_singleedge, const short use_gridfill, @@ -1036,13 +1039,13 @@ void BM_mesh_esubdivide(BMesh *bm, const char edge_hflag, /* use_sphere isnt exposed here since its only used for new primitives */ BMO_op_initf(bm, &op, "esubd edges=%he " - "smooth=%f fractal=%f " + "smooth=%f fractal=%f along_normal=%f " "numcuts=%i " "quadcornertype=%i " "use_singleedge=%b use_gridfill=%b " "seed=%i", edge_hflag, - smooth, fractal, + smooth, fractal, along_normal, numcuts, cornertype, use_singleedge, use_gridfill, diff --git a/source/blender/bmesh/operators/bmo_subdivide.h b/source/blender/bmesh/operators/bmo_subdivide.h index cc6ced8bfaa..d4b926b9275 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.h +++ b/source/blender/bmesh/operators/bmo_subdivide.h @@ -31,6 +31,7 @@ typedef struct SubDParams { int numcuts; float smooth; float fractal; + float along_normal; //int beauty; short use_smooth; short use_sphere; diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index 9632a79b7dd..afc60d844db 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -143,8 +143,8 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) if (e) { BMO_elem_flag_enable(bm, e, ELE_NEW); - BMO_elem_flag_enable(bm, e->l->f, FACE_MARK|ELE_NEW); - BMO_elem_flag_enable(bm, e->l->radial_next->f, FACE_MARK|ELE_NEW); + BMO_elem_flag_enable(bm, e->l->f, FACE_MARK | ELE_NEW); + BMO_elem_flag_enable(bm, e->l->radial_next->f, FACE_MARK | ELE_NEW); stop = 0; } } @@ -152,7 +152,7 @@ void bmo_beautify_fill_exec(BMesh *bm, BMOperator *op) } } - BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_EDGE|BM_FACE, ELE_NEW); + BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_EDGE | BM_FACE, ELE_NEW); } void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) @@ -168,30 +168,30 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) BLI_smallhash_init(&hash); - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); BMO_ITER (e, &siter, bm, op, "edges", BM_EDGE) { BMO_elem_flag_enable(bm, e, EDGE_MARK); if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v1)) { - eve = BLI_addfillvert(&sf_ctx, e->v1->co); + eve = BLI_scanfill_vert_add(&sf_ctx, e->v1->co); eve->tmp.p = e->v1; BLI_smallhash_insert(&hash, (uintptr_t)e->v1, eve); } if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v2)) { - eve = BLI_addfillvert(&sf_ctx, e->v2->co); + eve = BLI_scanfill_vert_add(&sf_ctx, e->v2->co); eve->tmp.p = e->v2; BLI_smallhash_insert(&hash, (uintptr_t)e->v2, eve); } v1 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v1); v2 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v2); - /* eed = */ BLI_addfilledge(&sf_ctx, v1, v2); + /* eed = */ BLI_scanfill_edge_add(&sf_ctx, v1, v2); /* eed->tmp.p = e; */ /* UNUSED */ } - BLI_edgefill(&sf_ctx, FALSE); + BLI_scanfill_calc(&sf_ctx, FALSE); for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) { BMFace *f = BM_face_create_quad_tri(bm, @@ -208,14 +208,14 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) } } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); BLI_smallhash_release(&hash); /* clean up fill */ BMO_op_initf(bm, &bmop, "beautify_fill faces=%ff constrain_edges=%fe", ELE_NEW, EDGE_MARK); BMO_op_exec(bm, &bmop); - BMO_slot_buffer_flag_enable(bm, &bmop, "geomout", BM_FACE|BM_EDGE, ELE_NEW); + BMO_slot_buffer_flag_enable(bm, &bmop, "geomout", BM_FACE | BM_EDGE, ELE_NEW); BMO_op_finish(bm, &bmop); - BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_EDGE|BM_FACE, ELE_NEW); + BMO_slot_buffer_from_enabled_flag(bm, op, "geomout", BM_EDGE | BM_FACE, ELE_NEW); } diff --git a/source/blender/bmesh/operators/bmo_wireframe.c b/source/blender/bmesh/operators/bmo_wireframe.c new file mode 100644 index 00000000000..e0dc5cf48c7 --- /dev/null +++ b/source/blender/bmesh/operators/bmo_wireframe.c @@ -0,0 +1,404 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/bmesh/operators/bmo_wireframe.c + * \ingroup bmesh + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" + +#include "BKE_customdata.h" + +#include "bmesh.h" + +#include "intern/bmesh_operators_private.h" /* own include */ + +BMLoop *bm_edge_tag_faceloop(BMEdge *e) +{ + BMLoop *l, *l_first; + + l = l_first = e->l; + do { + if (BM_elem_flag_test(l->f, BM_ELEM_TAG)) { + return l; + } + } while ((l = l->radial_next) != l_first); + + /* in the case this is used, we know this will never happen */ + return NULL; +} + +static void bm_vert_boundary_tangent(BMVert *v, float r_no[3], float r_no_face[3], + BMVert **r_va_other, BMVert **r_vb_other) +{ + BMIter iter; + BMEdge *e_iter; + + BMEdge *e_a = NULL, *e_b = NULL; + BMVert *v_a, *v_b; + + BMLoop *l_a, *l_b; + + float no_face[3], no_edge[3]; + float tvec_a[3], tvec_b[3]; + + /* get 2 boundary edges, there should only _be_ 2, + * in case there are more - results wont be valid of course */ + BM_ITER_ELEM (e_iter, &iter, v, BM_EDGES_OF_VERT) { + if (BM_elem_flag_test(e_iter, BM_ELEM_TAG)) { + if (e_a == NULL) { + e_a = e_iter; + } + else { + e_b = e_iter; + break; + } + } + } + + l_a = bm_edge_tag_faceloop(e_a); + l_b = bm_edge_tag_faceloop(e_b); + + /* average edge face normal */ + add_v3_v3v3(no_face, l_a->f->no, l_b->f->no); + + /* average edge direction */ + v_a = BM_edge_other_vert(e_a, v); + v_b = BM_edge_other_vert(e_b, v); + + sub_v3_v3v3(tvec_a, v->co, v_a->co); + sub_v3_v3v3(tvec_b, v_b->co, v->co); + normalize_v3(tvec_a); + normalize_v3(tvec_b); + add_v3_v3v3(no_edge, tvec_a, tvec_b); /* not unit length but this is ok */ + + + /* find the normal */ + cross_v3_v3v3(r_no, no_edge, no_face); + normalize_v3(r_no); + + /* check are we flipped the right way */ + BM_edge_calc_face_tangent(e_a, l_a, tvec_a); + BM_edge_calc_face_tangent(e_b, l_b, tvec_b); + add_v3_v3(tvec_a, tvec_b); + + if (dot_v3v3(r_no, tvec_a) > 0.0f) { + negate_v3(r_no); + } + + copy_v3_v3(r_no_face, no_face); + *r_va_other = v_a; + *r_vb_other = v_b; +} + +/* check if we are the only tagged loop-face around this edge */ +static int bm_loop_is_radial_boundary(BMLoop *l_first) +{ + BMLoop *l = l_first->radial_next; + + if (l == l_first) { + return TRUE; /* a real boundary */ + } + else { + do { + if (BM_elem_flag_test(l->f, BM_ELEM_TAG)) { + return FALSE; + } + } while ((l = l->radial_next) != l_first); + } + return TRUE; +} + +extern float BM_vert_calc_mean_tagged_edge_length(BMVert *v); + +void bmo_wireframe_exec(BMesh *bm, BMOperator *op) +{ + const int use_boundary = BMO_slot_bool_get(op, "use_boundary"); + const int use_even_offset = BMO_slot_bool_get(op, "use_even_offset"); + const int use_relative_offset = BMO_slot_bool_get(op, "use_relative_offset"); + const int use_crease = (BMO_slot_bool_get(op, "use_crease") && + CustomData_has_layer(&bm->edata, CD_CREASE)); + const float depth = BMO_slot_float_get(op, "thickness"); + const float inset = depth; + + const int totvert_orig = bm->totvert; + + BMOIter oiter; + BMIter iter; + BMIter itersub; + + /* filled only with boundary verts */ + BMVert **verts_src = MEM_mallocN(sizeof(BMVert **) * totvert_orig, __func__); + BMVert **verts_neg = MEM_mallocN(sizeof(BMVert **) * totvert_orig, __func__); + BMVert **verts_pos = MEM_mallocN(sizeof(BMVert **) * totvert_orig, __func__); + + /* will over-alloc, but makes for easy lookups by index to keep aligned */ + BMVert **verts_boundary = use_boundary ? + MEM_mallocN(sizeof(BMVert **) * totvert_orig, __func__) : NULL; + + float *verts_relfac = use_relative_offset ? + MEM_mallocN(sizeof(float) * totvert_orig, __func__) : NULL; + + /* may over-alloc if not all faces have wire */ + BMVert **verts_loop; + int verts_loop_tot = 0; + + BMVert *v_src; + + BMFace *f_src; + BMLoop *l; + + float tvec[3]; + float fac; + + int i; + + BM_mesh_elem_index_ensure(bm, BM_VERT); + + BM_ITER_MESH_INDEX (v_src, &iter, bm, BM_VERTS_OF_MESH, i) { + BM_elem_flag_disable(v_src, BM_ELEM_TAG); + verts_src[i] = v_src; + } + + /* setup tags, all faces and verts will be tagged which will be duplicated */ + BM_mesh_elem_hflag_disable_all(bm, BM_FACE, BM_ELEM_TAG, FALSE); + + BMO_ITER (f_src, &oiter, bm, op, "faces", BM_FACE) { + verts_loop_tot += f_src->len; + BM_elem_flag_enable(f_src, BM_ELEM_TAG); + BM_ITER_ELEM (l, &itersub, f_src, BM_LOOPS_OF_FACE) { + BM_elem_flag_enable(l->v, BM_ELEM_TAG); + + /* also tag boundary edges */ + BM_elem_flag_set(l->e, BM_ELEM_TAG, bm_loop_is_radial_boundary(l)); + } + } + + /* duplicate tagged verts */ + for (i = 0, v_src = verts_src[i]; i < totvert_orig; i++, v_src = verts_src[i]) { + if (BM_elem_flag_test(v_src, BM_ELEM_TAG)) { + fac = depth; + + if (use_relative_offset) { + verts_relfac[i] = BM_vert_calc_mean_tagged_edge_length(v_src); + fac *= verts_relfac[i]; + } + + madd_v3_v3v3fl(tvec, v_src->co, v_src->no, -fac); + verts_neg[i] = BM_vert_create(bm, tvec, v_src); + madd_v3_v3v3fl(tvec, v_src->co, v_src->no, fac); + verts_pos[i] = BM_vert_create(bm, tvec, v_src); + } + else { + /* could skip this */ + verts_src[i] = NULL; + verts_neg[i] = NULL; + verts_pos[i] = NULL; + } + + /* conflicts with BM_vert_calc_mean_tagged_edge_length */ + if (use_relative_offset == FALSE) { + BM_elem_flag_disable(v_src, BM_ELEM_TAG); + } + } + + if (use_relative_offset) { + BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, FALSE); + } + + verts_loop = MEM_mallocN(sizeof(BMVert **) * verts_loop_tot, __func__); + verts_loop_tot = 0; /* count up again */ + + BMO_ITER (f_src, &oiter, bm, op, "faces", BM_FACE) { + BM_ITER_ELEM (l, &itersub, f_src, BM_LOOPS_OF_FACE) { + BM_elem_index_set(l, verts_loop_tot); /* set_loop */ + + BM_loop_calc_face_tangent(l, tvec); + + /* create offset vert */ + fac = inset; + if (use_even_offset) { + fac *= shell_angle_to_dist(((float)M_PI - BM_loop_calc_face_angle(l)) * 0.5f); + } + if (use_relative_offset) { + fac *= verts_relfac[BM_elem_index_get(l->v)]; + } + + madd_v3_v3v3fl(tvec, l->v->co, tvec, fac); + verts_loop[verts_loop_tot] = BM_vert_create(bm, tvec, l->v); + + + if (use_boundary) { + if (BM_elem_flag_test(l->e, BM_ELEM_TAG)) { /* is this a boundary? */ + + BMLoop *l_pair[2] = {l, l->next}; + + BM_elem_flag_enable(l->e, BM_ELEM_TAG); + for (i = 0; i < 2; i++) { + if (!BM_elem_flag_test(l_pair[i]->v, BM_ELEM_TAG)) { + float no_face[3]; + BMVert *va_other; + BMVert *vb_other; + + BM_elem_flag_enable(l_pair[i]->v, BM_ELEM_TAG); + + bm_vert_boundary_tangent(l_pair[i]->v, tvec, no_face, &va_other, &vb_other); + + /* create offset vert */ + /* similar to code above but different angle calc */ + fac = inset; + if (use_even_offset) { + fac *= shell_angle_to_dist(((float)M_PI - angle_on_axis_v3v3v3_v3(va_other->co, + l_pair[i]->v->co, + vb_other->co, + no_face)) * 0.5f); + } + if (use_relative_offset) { + fac *= verts_relfac[BM_elem_index_get(l_pair[i]->v)]; + } + madd_v3_v3v3fl(tvec, l_pair[i]->v->co, tvec, fac); + verts_boundary[BM_elem_index_get(l_pair[i]->v)] = BM_vert_create(bm, tvec, l_pair[i]->v); + } + } + } + } + + verts_loop_tot++; + } + } + + BMO_ITER (f_src, &oiter, bm, op, "faces", BM_FACE) { + BM_elem_flag_disable(f_src, BM_ELEM_TAG); + BM_ITER_ELEM (l, &itersub, f_src, BM_LOOPS_OF_FACE) { + BMFace *f_new; + BMLoop *l_new; + BMLoop *l_next = l->next; + BMVert *v_l1 = verts_loop[BM_elem_index_get(l)]; + BMVert *v_l2 = verts_loop[BM_elem_index_get(l_next)]; + + BMVert *v_src_l1 = l->v; + BMVert *v_src_l2 = l_next->v; + + const int i_1 = BM_elem_index_get(v_src_l1); + const int i_2 = BM_elem_index_get(v_src_l2); + + BMVert *v_neg1 = verts_neg[i_1]; + BMVert *v_neg2 = verts_neg[i_2]; + + BMVert *v_pos1 = verts_pos[i_1]; + BMVert *v_pos2 = verts_pos[i_2]; + + f_new = BM_face_create_quad_tri(bm, v_l1, v_l2, v_neg2, v_neg1, f_src, FALSE); + BM_elem_flag_enable(f_new, BM_ELEM_TAG); + l_new = BM_FACE_FIRST_LOOP(f_new); + + BM_elem_attrs_copy(bm, bm, l, l_new); + BM_elem_attrs_copy(bm, bm, l, l_new->prev); + BM_elem_attrs_copy(bm, bm, l_next, l_new->next); + BM_elem_attrs_copy(bm, bm, l_next, l_new->next->next); + + f_new = BM_face_create_quad_tri(bm, v_l2, v_l1, v_pos1, v_pos2, f_src, FALSE); + BM_elem_flag_enable(f_new, BM_ELEM_TAG); + l_new = BM_FACE_FIRST_LOOP(f_new); + + BM_elem_attrs_copy(bm, bm, l_next, l_new); + BM_elem_attrs_copy(bm, bm, l_next, l_new->prev); + BM_elem_attrs_copy(bm, bm, l, l_new->next); + BM_elem_attrs_copy(bm, bm, l, l_new->next->next); + + if (use_boundary) { + if (BM_elem_flag_test(l->e, BM_ELEM_TAG)) { + /* we know its a boundary and this is the only face user (which is being wire'd) */ + /* we know we only touch this edge/face once */ + BMVert *v_b1 = verts_boundary[i_1]; + BMVert *v_b2 = verts_boundary[i_2]; + + f_new = BM_face_create_quad_tri(bm, v_b2, v_b1, v_neg1, v_neg2, f_src, FALSE); + BM_elem_flag_enable(f_new, BM_ELEM_TAG); + l_new = BM_FACE_FIRST_LOOP(f_new); + + BM_elem_attrs_copy(bm, bm, l_next, l_new); + BM_elem_attrs_copy(bm, bm, l_next, l_new->prev); + BM_elem_attrs_copy(bm, bm, l, l_new->next); + BM_elem_attrs_copy(bm, bm, l, l_new->next->next); + + f_new = BM_face_create_quad_tri(bm, v_b1, v_b2, v_pos2, v_pos1, f_src, FALSE); + BM_elem_flag_enable(f_new, BM_ELEM_TAG); + l_new = BM_FACE_FIRST_LOOP(f_new); + + BM_elem_attrs_copy(bm, bm, l, l_new); + BM_elem_attrs_copy(bm, bm, l, l_new->prev); + BM_elem_attrs_copy(bm, bm, l_next, l_new->next); + BM_elem_attrs_copy(bm, bm, l_next, l_new->next->next); + + if (use_crease) { + BMEdge *e_new; + e_new = BM_edge_exists(v_pos1, v_b1); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_pos2, v_b2); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_neg1, v_b1); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_neg2, v_b2); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + } + } + } + + if (use_crease) { + BMEdge *e_new; + e_new = BM_edge_exists(v_pos1, v_l1); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_pos2, v_l2); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_neg1, v_l1); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + + e_new = BM_edge_exists(v_neg2, v_l2); + BM_elem_float_data_set(&bm->edata, e_new, CD_CREASE, 1.0f); + } + + } + } + + if (use_boundary) { + MEM_freeN(verts_boundary); + } + + if (use_relative_offset) { + MEM_freeN(verts_relfac); + } + + MEM_freeN(verts_src); + MEM_freeN(verts_neg); + MEM_freeN(verts_pos); + MEM_freeN(verts_loop); + + BMO_slot_buffer_from_enabled_hflag(bm, op, "faceout", BM_FACE, BM_ELEM_TAG); +} diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index a357767e1d8..e03df77a290 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -234,7 +234,8 @@ static int BME_bevel_get_vec(float *vec, BMVert *v1, BMVert *v2, BME_TransData_H * vec2 is the direction of projection (pointing away from vec1) * up_vec is used for orientation (expected to be normalized) * returns the length of the projected vector that lies along vec1 */ -static float BME_bevel_project_vec(float *vec1, float *vec2, float *up_vec, int is_forward, BME_TransData_Head *UNUSED(td)) +static float BME_bevel_project_vec(float *vec1, float *vec2, float *up_vec, + int is_forward, BME_TransData_Head *UNUSED(td)) { float factor, vec3[3], tmp[3], c1, c2; @@ -264,7 +265,8 @@ static float BME_bevel_project_vec(float *vec1, float *vec2, float *up_vec, int * using the vert and the loop passed, get or make the split vert, set its coordinates * and transform properties, and set the max limits. * Finally, return the split vert. */ -static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, float *up_vec, float value, BME_TransData_Head *td) +static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, + float *up_vec, float value, BME_TransData_Head *td) { BME_TransData *vtd, *vtd1, *vtd2; BMVert *sv, *v2, *v3, *ov; @@ -496,7 +498,8 @@ static BMVert *BME_bevel_wire(BMesh *bm, BMVert *v, float value, int res, int UN } #endif -static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(options), float *up_vec, BME_TransData_Head *td) +static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(options), + float *up_vec, BME_TransData_Head *td) { BMVert *v1, *v2, *kv; BMLoop *kl = NULL, *nl; @@ -617,7 +620,8 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti return l; } -static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int UNUSED(options), float *up_vec, BME_TransData_Head *td) +static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int UNUSED(options), + float up_vec[3], BME_TransData_Head *td) { BMVert *v1, *v2; /* BMFace *f; */ /* UNUSED */ @@ -810,7 +814,7 @@ static float BME_bevel_get_angle_vert(BMVert *v) } /* return cosf(angle_diff + 0.001f); */ /* compare with dot product */ - return (angle_diff / tot_angle) * (M_PI / 2); + return (angle_diff / tot_angle) * (float)(M_PI / 2.0); } static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, float weight, float factor, int options) @@ -894,7 +898,7 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ int count; float weight; BMIter iter; - const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; + const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001f) : 0.0f; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { weight = 0.0f; @@ -945,7 +949,8 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ } } -static BMesh *BME_bevel_initialize(BMesh *bm, int options, int UNUSED(defgrp_index), float angle, BME_TransData_Head *td) +static BMesh *BME_bevel_initialize(BMesh *bm, int options, + int UNUSED(defgrp_index), float angle, BME_TransData_Head *td) { BMVert *v /*, *v2 */; BMEdge *e /*, *curedg */; @@ -1037,7 +1042,8 @@ static BMesh *BME_bevel_reinitialize(BMesh *bm) * A BMesh pointer to the BM passed as a parameter. */ -static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int options, int UNUSED(defgrp_index), BME_TransData_Head *td) +static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int options, + int UNUSED(defgrp_index), BME_TransData_Head *td) { BMVert *v; BMEdge *e, *curedge; @@ -1102,14 +1108,14 @@ BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_i BME_TransData_Head *td; BME_TransData *vtd; int i; - double fac = 1, d; + double fac = 1.0, d; td = BME_init_transdata(BLI_MEMARENA_STD_BUFSIZE); /* recursion math courtesy of Martin Poirier (theeth) */ for (i = 0; i < res - 1; i++) { - if (i == 0) fac += 1.0f / 3.0f; else fac += 1.0f / (3 * i * 2.0f); + if (i == 0) fac += 1.0 / 3.0; else fac += 1.0 / (3.0 * i * 2.0); } - d = 1.0f / fac; + d = 1.0 / fac; for (i = 0; i < res || (res == 0 && i == 0); i++) { BMO_push(bm, NULL); @@ -1143,7 +1149,7 @@ BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_i else { d = value; } - madd_v3_v3v3fl(v->co, vtd->org, vtd->vec, vtd->factor * d); + madd_v3_v3v3fl(v->co, vtd->org, vtd->vec, vtd->factor * (float)d); } } diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index c93ee832fe6..6565a9e0c2e 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -80,7 +80,7 @@ void AnimationExporter::operator() (Object *ob) (!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)|| (!strcmp(transformName, "rotation_quaternion"))) { - dae_animation(ob ,fcu, transformName, false); + dae_animation(ob, fcu, transformName, false); } fcu = fcu->next; } @@ -96,7 +96,7 @@ void AnimationExporter::operator() (Object *ob) if ((!strcmp(transformName, "color")) || (!strcmp(transformName, "spot_size"))|| (!strcmp(transformName, "spot_blend")) || (!strcmp(transformName, "distance"))) { - dae_animation(ob , fcu, transformName, true); + dae_animation(ob, fcu, transformName, true); } fcu = fcu->next; } @@ -112,7 +112,7 @@ void AnimationExporter::operator() (Object *ob) (!strcmp(transformName, "ortho_scale"))|| (!strcmp(transformName, "clip_end"))||(!strcmp(transformName, "clip_start"))) { - dae_animation(ob , fcu, transformName, true); + dae_animation(ob, fcu, transformName, true); } fcu = fcu->next; } @@ -132,7 +132,7 @@ void AnimationExporter::operator() (Object *ob) (!strcmp(transformName, "diffuse_color"))||(!strcmp(transformName, "alpha")) || (!strcmp(transformName, "ior"))) { - dae_animation(ob ,fcu, transformName, true, ma ); + dae_animation(ob, fcu, transformName, true, ma ); } fcu = fcu->next; } @@ -165,7 +165,7 @@ float * AnimationExporter::get_eul_source_for_quat(Object *ob ) for ( int j = 0;j<4;j++) temp_quat[j] = quat[(i*4)+j]; - quat_to_eul(temp_eul,temp_quat); + quat_to_eul(temp_eul, temp_quat); for (int k = 0;k<3;k++) eul[i*3 + k] = temp_eul[k]; @@ -177,13 +177,13 @@ float * AnimationExporter::get_eul_source_for_quat(Object *ob ) } //Get proper name for bones -std::string AnimationExporter::getObjectBoneName( Object* ob,const FCurve* fcu ) +std::string AnimationExporter::getObjectBoneName( Object* ob, const FCurve* fcu ) { //hard-way to derive the bone name from rna_path. Must find more compact method std::string rna_path = std::string(fcu->rna_path); char* boneName = strtok((char *)rna_path.c_str(), "\""); - boneName = strtok(NULL,"\""); + boneName = strtok(NULL, "\""); if ( boneName != NULL ) return /*id_name(ob) + "_" +*/ std::string(boneName); @@ -192,7 +192,7 @@ std::string AnimationExporter::getObjectBoneName( Object* ob,const FCurve* fcu ) } //convert f-curves to animation curves and write -void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformName , bool is_param, Material * ma ) +void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformName, bool is_param, Material * ma ) { const char *axis_name = NULL; char anim_id[200]; @@ -232,7 +232,7 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa //Create anim Id if (ob->type == OB_ARMATURE) { - ob_name = getObjectBoneName( ob , fcu); + ob_name = getObjectBoneName(ob, fcu); BLI_snprintf(anim_id, sizeof(anim_id), "%s_%s.%s", (char*)translate_id(ob_name).c_str(), transformName, axis_name); } @@ -260,7 +260,7 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa for (int i = 0 ; i< fcu->totvert ; i++) { eul_axis[i] = eul[i*3 + fcu->array_index]; } - output_id= create_source_from_array(COLLADASW::InputSemantic::OUTPUT, eul_axis , fcu->totvert, quatRotation, anim_id, axis_name); + output_id= create_source_from_array(COLLADASW::InputSemantic::OUTPUT, eul_axis, fcu->totvert, quatRotation, anim_id, axis_name); MEM_freeN(eul); MEM_freeN(eul_axis); } @@ -364,8 +364,8 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B FCurve* fcu = (FCurve*)ob_arm->adt->action->curves.first; while (fcu) { - std::string bone_name = getObjectBoneName(ob_arm,fcu); - int val = BLI_strcasecmp((char*)bone_name.c_str(),bone->name); + std::string bone_name = getObjectBoneName(ob_arm, fcu); + int val = BLI_strcasecmp((char*)bone_name.c_str(), bone->name); if (val==0) break; fcu = fcu->next; } @@ -383,7 +383,7 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B } if (fra.size()) { - dae_baked_animation(fra ,ob_arm, bone ); + dae_baked_animation(fra, ob_arm, bone ); } if (flag & ARM_RESTPOS) @@ -391,7 +391,7 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B where_is_pose(scene, ob_arm); } -void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_arm , Bone *bone) +void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_arm, Bone *bone) { std::string ob_name = id_name(ob_arm); std::string bone_name = bone->name; @@ -410,7 +410,7 @@ void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_ // create output source std::string output_id; - output_id = create_4x4_source( fra, ob_arm , bone , anim_id); + output_id = create_4x4_source( fra, ob_arm, bone, anim_id); // create interpolations source std::string interpolation_id = fake_interpolation_source(fra.size(), anim_id, ""); @@ -719,7 +719,7 @@ std::string AnimationExporter::create_source_from_vector(COLLADASW::InputSemanti return source_id; } -std::string AnimationExporter::create_4x4_source(std::vector<float> &frames , Object * ob_arm, Bone *bone , const std::string& anim_id) +std::string AnimationExporter::create_4x4_source(std::vector<float> &frames, Object * ob_arm, Bone *bone, const std::string& anim_id) { COLLADASW::InputSemantic::Semantics semantic = COLLADASW::InputSemantic::OUTPUT; std::string source_id = anim_id + get_semantic_suffix(semantic); @@ -755,7 +755,7 @@ std::string AnimationExporter::create_4x4_source(std::vector<float> &frames , Ob float ctime = BKE_frame_to_ctime(scene, *it); - BKE_animsys_evaluate_animdata(scene , &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM); + BKE_animsys_evaluate_animdata(scene, &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM); where_is_pose_bone(scene, ob_arm, pchan, ctime, 1); // compute bone local mat @@ -787,7 +787,7 @@ std::string AnimationExporter::create_4x4_source(std::vector<float> &frames , Ob } float outmat[4][4]; - converter.mat4_to_dae(outmat,mat); + converter.mat4_to_dae(outmat, mat); source.appendValues(outmat); @@ -1281,7 +1281,7 @@ void AnimationExporter::sample_animation(float *v, std::vector<float> &frames, i float ctime = BKE_frame_to_ctime(scene, *it); - BKE_animsys_evaluate_animdata(scene , &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM); + BKE_animsys_evaluate_animdata(scene, &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM); where_is_pose_bone(scene, ob_arm, pchan, ctime, 1); // compute bone local mat diff --git a/source/blender/collada/AnimationExporter.h b/source/blender/collada/AnimationExporter.h index ba7ec6859cc..1313687db28 100644 --- a/source/blender/collada/AnimationExporter.h +++ b/source/blender/collada/AnimationExporter.h @@ -96,7 +96,7 @@ public: protected: const ExportSettings *export_settings; - void dae_animation(Object* ob, FCurve *fcu, char* transformName , bool is_param, Material *ma = NULL); + void dae_animation(Object* ob, FCurve *fcu, char* transformName, bool is_param, Material *ma = NULL); void write_bone_animation_matrix(Object *ob_arm, Bone *bone); @@ -116,7 +116,7 @@ protected: // (blend this into dae_bone_animation) void dae_bone_animation(std::vector<float> &fra, float *v, int tm_type, int axis, std::string ob_name, std::string bone_name); - void dae_baked_animation(std::vector<float> &fra, Object *ob_arm , Bone *bone); + void dae_baked_animation(std::vector<float> &fra, Object *ob_arm, Bone *bone); float convert_time(float frame); @@ -125,7 +125,7 @@ protected: std::string get_semantic_suffix(COLLADASW::InputSemantic::Semantics semantic); void add_source_parameters(COLLADASW::SourceBase::ParameterNameList& param, - COLLADASW::InputSemantic::Semantics semantic, bool is_rot, const char *axis , bool transform); + COLLADASW::InputSemantic::Semantics semantic, bool is_rot, const char *axis, bool transform); void get_source_values(BezTriple *bezt, COLLADASW::InputSemantic::Semantics semantic, bool rotation, float *values, int *length); @@ -139,7 +139,7 @@ protected: std::string create_xyz_source(float *v, int tot, const std::string& anim_id); - std::string create_4x4_source(std::vector<float> &frames , Object * ob_arm, Bone *bone , const std::string& anim_id); + std::string create_4x4_source(std::vector<float> &frames, Object * ob_arm, Bone *bone, const std::string& anim_id); std::string create_interpolation_source(FCurve *fcu, const std::string& anim_id, const char *axis_name, bool *has_tangents); @@ -161,5 +161,5 @@ protected: char* extract_transform_name(char *rna_path); - std::string getObjectBoneName ( Object *ob,const FCurve * fcu); + std::string getObjectBoneName(Object *ob, const FCurve * fcu); }; diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index 8ef2235b6fb..a72d51721ce 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -423,7 +423,7 @@ virtual void AnimationImporter::change_eul_to_quat(Object *ob, bAction *act) //sets the rna_path and array index to curve -void AnimationImporter::modify_fcurve(std::vector<FCurve*>* curves , const char* rna_path , int array_index ) +void AnimationImporter::modify_fcurve(std::vector<FCurve*>* curves, const char* rna_path, int array_index ) { std::vector<FCurve*>::iterator it; int i; @@ -438,7 +438,17 @@ void AnimationImporter::modify_fcurve(std::vector<FCurve*>* curves , const char* } } -void AnimationImporter::find_frames( std::vector<float>* frames , std::vector<FCurve*>* curves) +void AnimationImporter::unused_fcurve(std::vector<FCurve*>* curves) +{ + // when an error happens and we can't actually use curve remove it from unused_curves + std::vector<FCurve*>::iterator it; + for (it = curves->begin(); it != curves->end(); it++) { + FCurve *fcu = *it; + unused_curves.erase(std::remove(unused_curves.begin(), unused_curves.end(), fcu), unused_curves.end()); + } +} + +void AnimationImporter::find_frames( std::vector<float>* frames, std::vector<FCurve*>* curves) { std::vector<FCurve*>::iterator iter; for (iter = curves->begin(); iter != curves->end(); iter++) { @@ -456,7 +466,7 @@ void AnimationImporter::find_frames( std::vector<float>* frames , std::vector<FC } //creates the rna_paths and array indices of fcurves from animations using transformation and bound animation class of each animation. -void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * transform , +void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * transform, const COLLADAFW::AnimationList::AnimationBinding * binding, std::vector<FCurve*>* curves, bool is_joint, char * joint_path) { @@ -499,6 +509,7 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * modify_fcurve(curves, rna_path, -1 ); break; default: + unused_fcurve(curves); fprintf(stderr, "AnimationClass %d is not supported for %s.\n", binding->animationClass, loc ? "TRANSLATE" : "SCALE"); } @@ -534,10 +545,13 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * else if (COLLADABU::Math::Vector3::UNIT_Z == axis) { modify_fcurve(curves, rna_path, 2 ); } + else + unused_fcurve(curves); break; case COLLADAFW::AnimationList::AXISANGLE: // TODO convert axis-angle to quat? or XYZ? default: + unused_fcurve(curves); fprintf(stderr, "AnimationClass %d is not supported for ROTATE transformation.\n", binding->animationClass); } @@ -553,9 +567,11 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * } }*/ + unused_fcurve(curves); break; case COLLADAFW::Transformation::SKEW: case COLLADAFW::Transformation::LOOKAT: + unused_fcurve(curves); fprintf(stderr, "Animation of SKEW and LOOKAT transformations is not supported yet.\n"); break; } @@ -563,10 +579,10 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation * } //creates the rna_paths and array indices of fcurves from animations using color and bound animation class of each animation. -void AnimationImporter:: Assign_color_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves ,const char * anim_type) +void AnimationImporter:: Assign_color_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves, const char * anim_type) { char rna_path[100]; - BLI_strncpy(rna_path,anim_type, sizeof(rna_path)); + BLI_strncpy(rna_path, anim_type, sizeof(rna_path)); const COLLADAFW::AnimationList *animlist = animlist_map[listid]; const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings(); @@ -591,6 +607,7 @@ void AnimationImporter:: Assign_color_animations(const COLLADAFW::UniqueId& list break; default: + unused_fcurve(&animcurves); fprintf(stderr, "AnimationClass %d is not supported for %s.\n", bindings[j].animationClass, "COLOR" ); } @@ -621,7 +638,7 @@ void AnimationImporter:: Assign_float_animations(const COLLADAFW::UniqueId& list for (unsigned int j = 0; j < bindings.getCount(); j++) { animcurves = curve_map[bindings[j].animation]; - BLI_strncpy(rna_path, anim_type , sizeof(rna_path)); + BLI_strncpy(rna_path, anim_type, sizeof(rna_path)); modify_fcurve(&animcurves, rna_path, 0 ); std::vector<FCurve*>::iterator iter; //Add the curves of the current animation to the object @@ -634,7 +651,7 @@ void AnimationImporter:: Assign_float_animations(const COLLADAFW::UniqueId& list } -void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root ,COLLADAFW::Node* node, +void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root, COLLADAFW::Node* node, COLLADAFW::Transformation * tm ) { bool is_joint = node->getType() == COLLADAFW::Node::JOINT; @@ -725,7 +742,7 @@ void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>& calc_joint_parent_mat_rest(par, NULL, root, node); mult_m4_m4m4(temp, par, matfra); - // evaluate_joint_world_transform_at_frame(temp, NULL, , node, fra); + // evaluate_joint_world_transform_at_frame(temp, NULL, node, fra); // calc special matrix mul_serie_m4(mat, irest, temp, irest_dae, rest, NULL, NULL, NULL, NULL); @@ -778,16 +795,16 @@ void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>& } -void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , - std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, - std::map<COLLADAFW::UniqueId, Object*>& object_map, - std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map) +void AnimationImporter::translate_Animations ( COLLADAFW::Node * node, + std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, + std::multimap<COLLADAFW::UniqueId, Object*>& object_map, + std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map) { AnimationImporter::AnimMix* animType = get_animation_type(node, FW_object_map ); bool is_joint = node->getType() == COLLADAFW::Node::JOINT; COLLADAFW::Node *root = root_map.find(node->getUniqueId()) == root_map.end() ? node : root_map[node->getUniqueId()]; - Object *ob = is_joint ? armature_importer->get_armature_for_joint(root) : object_map[node->getUniqueId()]; + Object *ob = is_joint ? armature_importer->get_armature_for_joint(root) : object_map.find(node->getUniqueId())->second; if (!ob) { fprintf(stderr, "cannot find Object for Node with id=\"%s\"\n", node->getOriginalId().c_str()); return; @@ -834,7 +851,7 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , for (unsigned int j = 0; j < bindings.getCount(); j++) { animcurves = curve_map[bindings[j].animation]; if ( is_matrix ) { - apply_matrix_curves(ob, animcurves, root , node, transform ); + apply_matrix_curves(ob, animcurves, root, node, transform ); } else { @@ -886,13 +903,13 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , const COLLADAFW::AnimatableFloat *foa = &(light->getFallOffAngle()); const COLLADAFW::UniqueId& listid = foa->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "spot_size"); + Assign_float_animations( listid, AnimCurves, "spot_size"); } if ( (animType->light & LIGHT_FOE) != 0 ) { const COLLADAFW::AnimatableFloat *foe = &(light->getFallOffExponent()); const COLLADAFW::UniqueId& listid = foe->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "spot_blend"); + Assign_float_animations( listid, AnimCurves, "spot_blend"); } } @@ -913,25 +930,25 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , if ((animType->camera & CAMERA_XFOV) != 0 ) { const COLLADAFW::AnimatableFloat *xfov = &(camera->getXFov()); const COLLADAFW::UniqueId& listid = xfov->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "lens"); + Assign_float_animations( listid, AnimCurves, "lens"); } else if ((animType->camera & CAMERA_XMAG) != 0 ) { const COLLADAFW::AnimatableFloat *xmag = &(camera->getXMag()); const COLLADAFW::UniqueId& listid = xmag->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "ortho_scale"); + Assign_float_animations( listid, AnimCurves, "ortho_scale"); } if ((animType->camera & CAMERA_ZFAR) != 0 ) { const COLLADAFW::AnimatableFloat *zfar = &(camera->getFarClippingPlane()); const COLLADAFW::UniqueId& listid = zfar->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "clip_end"); + Assign_float_animations( listid, AnimCurves, "clip_end"); } if ((animType->camera & CAMERA_ZNEAR) != 0 ) { const COLLADAFW::AnimatableFloat *znear = &(camera->getNearClippingPlane()); const COLLADAFW::UniqueId& listid = znear->getAnimationList(); - Assign_float_animations( listid ,AnimCurves, "clip_start"); + Assign_float_animations( listid, AnimCurves, "clip_start"); } } @@ -955,25 +972,25 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , if ((animType->material & MATERIAL_SHININESS) != 0) { const COLLADAFW::FloatOrParam *shin = &(efc->getShininess()); const COLLADAFW::UniqueId& listid = shin->getAnimationList(); - Assign_float_animations( listid, AnimCurves , "specular_hardness" ); + Assign_float_animations( listid, AnimCurves, "specular_hardness" ); } if ((animType->material & MATERIAL_IOR) != 0) { const COLLADAFW::FloatOrParam *ior = &(efc->getIndexOfRefraction()); const COLLADAFW::UniqueId& listid = ior->getAnimationList(); - Assign_float_animations( listid, AnimCurves , "raytrace_transparency.ior" ); + Assign_float_animations( listid, AnimCurves, "raytrace_transparency.ior" ); } if ((animType->material & MATERIAL_SPEC_COLOR) != 0) { const COLLADAFW::ColorOrTexture *cot = &(efc->getSpecular()); const COLLADAFW::UniqueId& listid = cot->getColor().getAnimationList(); - Assign_color_animations( listid, AnimCurves , "specular_color" ); + Assign_color_animations( listid, AnimCurves, "specular_color" ); } if ((animType->material & MATERIAL_DIFF_COLOR) != 0) { const COLLADAFW::ColorOrTexture *cot = &(efc->getDiffuse()); const COLLADAFW::UniqueId& listid = cot->getColor().getAnimationList(); - Assign_color_animations( listid, AnimCurves , "diffuse_color" ); + Assign_color_animations( listid, AnimCurves, "diffuse_color" ); } } } @@ -1078,7 +1095,7 @@ void AnimationImporter::add_bone_animation_sampled(Object * ob, std::vector<FCur calc_joint_parent_mat_rest(par, NULL, root, node); mult_m4_m4m4(temp, par, matfra); - // evaluate_joint_world_transform_at_frame(temp, NULL, , node, fra); + // evaluate_joint_world_transform_at_frame(temp, NULL,, node, fra); // calc special matrix mul_serie_m4(mat, irest, temp, irest_dae, rest, NULL, NULL, NULL, NULL); @@ -1113,7 +1130,7 @@ void AnimationImporter::add_bone_animation_sampled(Object * ob, std::vector<FCur //Check if object is animated by checking if animlist_map holds the animlist_id of node transforms -AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLADAFW::Node * node , +AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLADAFW::Node * node, std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map) { AnimMix *types = new AnimMix(); @@ -1138,9 +1155,9 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD for (unsigned int i = 0; i < nodeLights.getCount(); i++) { const COLLADAFW::Light *light = (COLLADAFW::Light *) FW_object_map[nodeLights[i]->getInstanciatedObjectId()]; - types->light = setAnimType(&(light->getColor()),(types->light), LIGHT_COLOR); - types->light = setAnimType(&(light->getFallOffAngle()),(types->light), LIGHT_FOA); - types->light = setAnimType(&(light->getFallOffExponent()),(types->light), LIGHT_FOE); + types->light = setAnimType(&(light->getColor()), (types->light), LIGHT_COLOR); + types->light = setAnimType(&(light->getFallOffAngle()), (types->light), LIGHT_FOA); + types->light = setAnimType(&(light->getFallOffExponent()), (types->light), LIGHT_FOE); if ( types->light != 0) break; @@ -1151,13 +1168,13 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD const COLLADAFW::Camera *camera = (COLLADAFW::Camera *) FW_object_map[nodeCameras[i]->getInstanciatedObjectId()]; if ( camera->getCameraType() == COLLADAFW::Camera::PERSPECTIVE ) { - types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XFOV); + types->camera = setAnimType(&(camera->getXMag()), (types->camera), CAMERA_XFOV); } else { - types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XMAG); + types->camera = setAnimType(&(camera->getXMag()), (types->camera), CAMERA_XMAG); } - types->camera = setAnimType(&(camera->getFarClippingPlane()),(types->camera), CAMERA_ZFAR); - types->camera = setAnimType(&(camera->getNearClippingPlane()),(types->camera), CAMERA_ZNEAR); + types->camera = setAnimType(&(camera->getFarClippingPlane()), (types->camera), CAMERA_ZFAR); + types->camera = setAnimType(&(camera->getNearClippingPlane()), (types->camera), CAMERA_ZNEAR); if ( types->camera != 0) break; @@ -1173,11 +1190,11 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD const COLLADAFW::CommonEffectPointerArray& commonEffects = ef->getCommonEffects(); if (!commonEffects.empty()) { COLLADAFW::EffectCommon *efc = commonEffects[0]; - types->material = setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS); - types->material = setAnimType(&(efc->getSpecular().getColor()),(types->material), MATERIAL_SPEC_COLOR); - types->material = setAnimType(&(efc->getDiffuse().getColor()),(types->material), MATERIAL_DIFF_COLOR); - // types->material = setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY); - types->material = setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR); + types->material = setAnimType(&(efc->getShininess()), (types->material), MATERIAL_SHININESS); + types->material = setAnimType(&(efc->getSpecular().getColor()), (types->material), MATERIAL_SPEC_COLOR); + types->material = setAnimType(&(efc->getDiffuse().getColor()), (types->material), MATERIAL_DIFF_COLOR); + // types->material = setAnimType(&(efc->get()), (types->material), MATERIAL_TRANSPARENCY); + types->material = setAnimType(&(efc->getIndexOfRefraction()), (types->material), MATERIAL_IOR); } } } @@ -1185,7 +1202,7 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD return types; } -int AnimationImporter::setAnimType ( const COLLADAFW::Animatable * prop , int types, int addition) +int AnimationImporter::setAnimType ( const COLLADAFW::Animatable * prop, int types, int addition) { const COLLADAFW::UniqueId& listid = prop->getAnimationList(); if (animlist_map.find(listid) != animlist_map.end()) @@ -1194,7 +1211,7 @@ int AnimationImporter::setAnimType ( const COLLADAFW::Animatable * prop , int ty } // Is not used anymore. -void AnimationImporter::find_frames_old(std::vector<float> * frames, COLLADAFW::Node * node , COLLADAFW::Transformation::TransformationType tm_type) +void AnimationImporter::find_frames_old(std::vector<float> * frames, COLLADAFW::Node * node, COLLADAFW::Transformation::TransformationType tm_type) { bool is_matrix = tm_type == COLLADAFW::Transformation::MATRIX; bool is_rotation = tm_type == COLLADAFW::Transformation::ROTATE; @@ -1279,7 +1296,7 @@ Object *AnimationImporter::translate_animation_OLD(COLLADAFW::Node *node, // frames at which to sample std::vector<float> frames; - find_frames_old(&frames, node , tm_type); + find_frames_old(&frames, node, tm_type); unsigned int i; @@ -1396,7 +1413,7 @@ Object *AnimationImporter::translate_animation_OLD(COLLADAFW::Node *node, calc_joint_parent_mat_rest(par, NULL, root, node); mult_m4_m4m4(temp, par, matfra); - // evaluate_joint_world_transform_at_frame(temp, NULL, , node, fra); + // evaluate_joint_world_transform_at_frame(temp, NULL,, node, fra); // calc special matrix mul_serie_m4(mat, irest, temp, irest_dae, rest, NULL, NULL, NULL, NULL); @@ -1753,9 +1770,7 @@ bool AnimationImporter::calc_joint_parent_mat_rest(float mat[4][4], float par[4] Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::Node *node, Object *par_job) { if (joint_objects.find(node->getUniqueId()) == joint_objects.end()) { - Object *job = add_object(scene, OB_EMPTY); - - rename_id((ID*)&job->id, (char*)get_joint_name(node)); + Object *job = bc_add_object(scene, OB_EMPTY, (char*)get_joint_name(node)); job->lay = object_in_scene(job, scene)->lay = 2; diff --git a/source/blender/collada/AnimationImporter.h b/source/blender/collada/AnimationImporter.h index e42a1cc7a55..6324853d91c 100644 --- a/source/blender/collada/AnimationImporter.h +++ b/source/blender/collada/AnimationImporter.h @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov, Nathan Letwory , Sukhitha Jayathilake. + * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov, Nathan Letwory, Sukhitha Jayathilake. * * ***** END GPL LICENSE BLOCK ***** */ @@ -143,38 +143,39 @@ public: virtual void change_eul_to_quat(Object *ob, bAction *act); #endif - void translate_Animations( COLLADAFW::Node * Node , - std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, - std::map<COLLADAFW::UniqueId, Object*>& object_map , - std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map); + void translate_Animations(COLLADAFW::Node * Node, + std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, + std::multimap<COLLADAFW::UniqueId, Object*>& object_map, + std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map); - AnimMix* get_animation_type( const COLLADAFW::Node * node , std::map<COLLADAFW::UniqueId,const COLLADAFW::Object*> FW_object_map ); + AnimMix* get_animation_type( const COLLADAFW::Node * node, std::map<COLLADAFW::UniqueId, const COLLADAFW::Object*> FW_object_map ); - void apply_matrix_curves( Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root ,COLLADAFW::Node* node, - COLLADAFW::Transformation * tm ); - - void add_bone_animation_sampled(Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root ,COLLADAFW::Node* node, COLLADAFW::Transformation * tm); + void apply_matrix_curves(Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root, COLLADAFW::Node* node, + COLLADAFW::Transformation * tm ); + + void add_bone_animation_sampled(Object * ob, std::vector<FCurve*>& animcurves, COLLADAFW::Node* root, COLLADAFW::Node* node, COLLADAFW::Transformation * tm); - void Assign_transform_animations(COLLADAFW::Transformation* transform , - const COLLADAFW::AnimationList::AnimationBinding * binding, - std::vector<FCurve*>* curves, bool is_joint, char * joint_path); + void Assign_transform_animations(COLLADAFW::Transformation* transform, + const COLLADAFW::AnimationList::AnimationBinding * binding, + std::vector<FCurve*>* curves, bool is_joint, char * joint_path); void Assign_color_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves, const char * anim_type); void Assign_float_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves, const char * anim_type); - int setAnimType ( const COLLADAFW::Animatable * prop , int type, int addition); + int setAnimType ( const COLLADAFW::Animatable * prop, int type, int addition); - void modify_fcurve(std::vector<FCurve*>* curves , const char* rna_path , int array_index ); + void modify_fcurve(std::vector<FCurve*>* curves, const char* rna_path, int array_index ); + void unused_fcurve(std::vector<FCurve*>* curves ); // prerequisites: // animlist_map - map animlist id -> animlist // curve_map - map anim id -> curve(s) Object * translate_animation_OLD(COLLADAFW::Node *node, - std::map<COLLADAFW::UniqueId, Object*>& object_map, - std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, - COLLADAFW::Transformation::TransformationType tm_type, - Object *par_job = NULL); + std::map<COLLADAFW::UniqueId, Object*>& object_map, + std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map, + COLLADAFW::Transformation::TransformationType tm_type, + Object *par_job = NULL); - void find_frames( std::vector<float>* frames , std::vector<FCurve*>* curves ); + void find_frames( std::vector<float>* frames, std::vector<FCurve*>* curves ); void find_frames_old( std::vector<float>* frames, COLLADAFW::Node * node, COLLADAFW::Transformation::TransformationType tm_type ); // internal, better make it private // warning: evaluates only rotation diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp index 0d45df37796..d5a3b4cb0a2 100644 --- a/source/blender/collada/ArmatureExporter.cpp +++ b/source/blender/collada/ArmatureExporter.cpp @@ -289,7 +289,7 @@ void ArmatureExporter::add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW: } } - TransformWriter::add_node_transform(node, mat,NULL ); + TransformWriter::add_node_transform(node, mat, NULL); } std::string ArmatureExporter::get_controller_id(Object *ob_arm, Object *ob) diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp index 05a2e5643f2..4316edf1e67 100644 --- a/source/blender/collada/ArmatureImporter.cpp +++ b/source/blender/collada/ArmatureImporter.cpp @@ -81,7 +81,7 @@ void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *p float parent_mat[][4], Object * ob_arm) { std::vector<COLLADAFW::Node*>::iterator it; - it = std::find(finished_joints.begin(),finished_joints.end(),node); + it = std::find(finished_joints.begin(), finished_joints.end(), node); if ( it != finished_joints.end()) return; float mat[4][4]; @@ -159,7 +159,7 @@ void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBo { //Checking if bone is already made. std::vector<COLLADAFW::Node*>::iterator it; - it = std::find(finished_joints.begin(),finished_joints.end(),node); + it = std::find(finished_joints.begin(), finished_joints.end(), node); if ( it != finished_joints.end()) return; float joint_inv_bind_mat[4][4]; @@ -189,7 +189,7 @@ void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBo else copy_m4_m4(mat, obmat); - float loc[3], size[3], rot[3][3] , angle; + float loc[3], size[3], rot[3][3], angle; mat4_to_loc_rot_size( loc, rot, size, obmat); mat3_to_vec_roll(rot, NULL, &angle ); bone->roll=angle; @@ -261,7 +261,7 @@ void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBo // in second case it's not a leaf bone, but we handle it the same way if (!children.getCount() || children.getCount() > 1) { - add_leaf_bone(mat, bone , node); + add_leaf_bone(mat, bone, node); } finished_joints.push_back(node); @@ -282,11 +282,11 @@ void ArmatureImporter::add_leaf_bone(float mat[][4], EditBone *bone, COLLADAFW: et = etit->second; //else return; - float x,y,z; - et->setData("tip_x",&x); - et->setData("tip_y",&y); - et->setData("tip_z",&z); - float vec[3] = {x,y,z}; + float x, y, z; + et->setData("tip_x", &x); + et->setData("tip_y", &y); + et->setData("tip_z", &z); + float vec[3] = {x, y, z}; copy_v3_v3(leaf.bone->tail, leaf.bone->head); add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec); }else @@ -367,7 +367,7 @@ Object *ArmatureImporter::get_empty_for_leaves() { if (empty) return empty; - empty = add_object(scene, OB_EMPTY); + empty = bc_add_object(scene, OB_EMPTY, NULL); empty->empty_drawtype = OB_EMPTY_SPHERE; return empty; @@ -412,7 +412,7 @@ void ArmatureImporter::create_armature_bones( ) if ( get_armature_for_joint(*ri) != NULL ) continue; //add armature object for current joint - //Object *ob_arm = add_object(scene, OB_ARMATURE); + //Object *ob_arm = bc_add_object(scene, OB_ARMATURE, NULL); Object *ob_arm = joint_parent_map[(*ri)->getUniqueId()]; @@ -440,7 +440,7 @@ void ArmatureImporter::create_armature_bones( ) ED_armature_from_edit(ob_arm); - set_pose(ob_arm , *ri, NULL, NULL ); + set_pose(ob_arm, *ri, NULL, NULL ); ED_armature_edit_free(ob_arm); DAG_id_tag_update(&ob_arm->id, OB_RECALC_OB|OB_RECALC_DATA); @@ -569,7 +569,7 @@ void ArmatureImporter::create_armature_bones(SkinInfo& skin) // is a child of a node (not joint), root should be true since // this is where we build armature bones from -void ArmatureImporter::set_pose ( Object * ob_arm , COLLADAFW::Node * root_node , const char *parentname, float parent_mat[][4]) +void ArmatureImporter::set_pose(Object * ob_arm, COLLADAFW::Node * root_node, const char *parentname, float parent_mat[][4]) { char * bone_name = (char *) bc_get_joint_name ( root_node); float mat[4][4]; @@ -582,7 +582,7 @@ void ArmatureImporter::set_pose ( Object * ob_arm , COLLADAFW::Node * root_node get_node_mat(obmat, root_node, NULL, NULL); //if (*edbone) - bPoseChannel * pchan = get_pose_channel(ob_arm -> pose , bone_name); + bPoseChannel * pchan = get_pose_channel(ob_arm -> pose, bone_name); //else fprintf ( "", // get world-space @@ -600,7 +600,7 @@ void ArmatureImporter::set_pose ( Object * ob_arm , COLLADAFW::Node * root_node mult_m4_m4m4(pchan->pose_mat, invObmat, mat); } - mat4_to_axis_angle(ax,&angle,mat); + mat4_to_axis_angle(ax, &angle, mat); pchan->bone->roll = angle; diff --git a/source/blender/collada/ArmatureImporter.h b/source/blender/collada/ArmatureImporter.h index 0c95ee81272..eead45353af 100644 --- a/source/blender/collada/ArmatureImporter.h +++ b/source/blender/collada/ArmatureImporter.h @@ -113,7 +113,7 @@ private: void fix_leaf_bones(); - void set_pose ( Object * ob_arm , COLLADAFW::Node * root_node , const char *parentname, float parent_mat[][4]); + void set_pose ( Object * ob_arm, COLLADAFW::Node * root_node, const char *parentname, float parent_mat[][4]); #if 0 diff --git a/source/blender/collada/CameraExporter.cpp b/source/blender/collada/CameraExporter.cpp index 8640e544dbf..ce46c681c8c 100644 --- a/source/blender/collada/CameraExporter.cpp +++ b/source/blender/collada/CameraExporter.cpp @@ -67,23 +67,29 @@ void CamerasExporter::operator()(Object *ob, Scene *sce) Camera *cam = (Camera*)ob->data; std::string cam_id(get_camera_id(ob)); std::string cam_name(id_name(cam)); - - if (cam->type == CAM_PERSP) { + + switch (cam->type) { + case CAM_PANO: + case CAM_PERSP: { COLLADASW::PerspectiveOptic persp(mSW); persp.setXFov(RAD2DEGF(focallength_to_fov(cam->lens, cam->sensor_x)), "xfov"); - persp.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch),false,"aspect_ratio"); - persp.setZFar(cam->clipend, false , "zfar"); - persp.setZNear(cam->clipsta,false , "znear"); + persp.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch), false, "aspect_ratio"); + persp.setZFar(cam->clipend, false, "zfar"); + persp.setZNear(cam->clipsta, false, "znear"); COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_name); addCamera(ccam); + break; } - else { + case CAM_ORTHO: + default: + { COLLADASW::OrthographicOptic ortho(mSW); - ortho.setXMag(cam->ortho_scale,"xmag"); - ortho.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch),false,"aspect_ratio"); - ortho.setZFar(cam->clipend , false , "zfar"); - ortho.setZNear(cam->clipsta, false , "znear"); + ortho.setXMag(cam->ortho_scale, "xmag"); + ortho.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch), false, "aspect_ratio"); + ortho.setZFar(cam->clipend, false, "zfar"); + ortho.setZNear(cam->clipsta, false, "znear"); COLLADASW::Camera ccam(mSW, &ortho, cam_id, cam_name); addCamera(ccam); - } -} + break; + }} +} diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index d81ffebae66..1d315b6ea06 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -121,6 +121,9 @@ bool DocumentImporter::import() loader.registerExtraDataCallbackHandler(ehandler); + // deselect all to select new objects + scene_deselect_all(CTX_data_scene(mContext)); + if (!root.loadDocument(mFilename)) { fprintf(stderr, "COLLADAFW::Root::loadDocument() returned false on 1st pass\n"); return false; @@ -144,6 +147,8 @@ bool DocumentImporter::import() delete ehandler; + mesh_importer.bmeshConversion(); + return true; } @@ -157,7 +162,9 @@ void DocumentImporter::cancel(const COLLADAFW::String& errorMessage) // The latter sounds better. } -void DocumentImporter::start() {} +void DocumentImporter::start() +{ +} void DocumentImporter::finish() { @@ -208,7 +215,7 @@ void DocumentImporter::finish() const COLLADAFW::NodePointerArray& roots = (*it)->getRootNodes(); for (unsigned int i = 0; i < roots.getCount(); i++) - translate_anim_recursive(roots[i],NULL,NULL); + translate_anim_recursive(roots[i], NULL, NULL); } if (libnode_ob.size()) { @@ -298,7 +305,8 @@ Object* DocumentImporter::create_camera_object(COLLADAFW::InstanceCamera *camera fprintf(stderr, "Couldn't find camera by UID.\n"); return NULL; } - Object *ob = add_object(sce, OB_CAMERA); + + Object *ob = bc_add_object(sce, OB_CAMERA, NULL); Camera *cam = uid_camera_map[cam_uid]; Camera *old_cam = (Camera*)ob->data; ob->data = cam; @@ -315,7 +323,8 @@ Object* DocumentImporter::create_lamp_object(COLLADAFW::InstanceLight *lamp, Sce fprintf(stderr, "Couldn't find lamp by UID.\n"); return NULL; } - Object *ob = add_object(sce, OB_LAMP); + + Object *ob = bc_add_object(sce, OB_LAMP, NULL); Lamp *la = uid_lamp_map[lamp_uid]; Lamp *old_lamp = (Lamp*)ob->data; ob->data = la; @@ -371,10 +380,11 @@ Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod Object *new_child = NULL; if (inodes.getCount()) { // \todo loop through instance nodes const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId(); - new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, is_library_node); + fprintf(stderr, "Doing %d child nodes\n", node_map.count(id)); + new_child = create_instance_node(object_map.find(id)->second, node_map[id], child_node, sce, is_library_node); } else { - new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, is_library_node); + new_child = create_instance_node(object_map.find(child_id)->second, child_node, NULL, sce, is_library_node); } bc_set_parent(new_child, obn, mContext, true); @@ -392,13 +402,15 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren bool is_joint = node->getType() == COLLADAFW::Node::JOINT; bool read_transform = true; + std::vector<Object*> * objects_done = new std::vector<Object *>(); + if (is_joint) { if ( par ) { Object * empty = par; - par = add_object(sce, OB_ARMATURE); - bc_set_parent(par,empty->parent, mContext); + par = bc_add_object(sce, OB_ARMATURE, NULL); + bc_set_parent(par, empty->parent, mContext); //remove empty : todo - object_map[parent_node->getUniqueId()] = par; + object_map.insert(std::make_pair<COLLADAFW::UniqueId, Object *>(parent_node->getUniqueId(), par)); } armature_importer.add_joint(node, parent_node == NULL || parent_node->getType() != COLLADAFW::Node::JOINT, par, sce); } @@ -420,19 +432,23 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren while (geom_done < geom.getCount()) { ob = mesh_importer.create_mesh_object(node, geom[geom_done], false, uid_material_map, material_texture_mapping_map); + objects_done->push_back(ob); ++geom_done; } while (camera_done < camera.getCount()) { ob = create_camera_object(camera[camera_done], sce); + objects_done->push_back(ob); ++camera_done; } while (lamp_done < lamp.getCount()) { ob = create_lamp_object(lamp[lamp_done], sce); + objects_done->push_back(ob); ++lamp_done; } while (controller_done < controller.getCount()) { COLLADAFW::InstanceGeometry *geom = (COLLADAFW::InstanceGeometry*)controller[controller_done]; ob = mesh_importer.create_mesh_object(node, geom, true, uid_material_map, material_texture_mapping_map); + objects_done->push_back(ob); ++controller_done; } // XXX instance_node is not supported yet @@ -443,11 +459,14 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren ob = NULL; } else { - Object *source_ob = object_map[node_id]; - COLLADAFW::Node *source_node = node_map[node_id]; - - ob = create_instance_node(source_ob, source_node, node, sce, is_library_node); + std::pair<std::multimap<COLLADAFW::UniqueId, Object *>::iterator, std::multimap<COLLADAFW::UniqueId, Object *>::iterator> pair_iter = object_map.equal_range(node_id); + for (std::multimap<COLLADAFW::UniqueId, Object *>::iterator it2 = pair_iter.first; it2 != pair_iter.second; it2++) { + Object *source_ob = (Object *)it2->second; + COLLADAFW::Node *source_node = node_map[node_id]; + ob = create_instance_node(source_ob, source_node, node, sce, is_library_node); + } } + if (ob != NULL) objects_done->push_back(ob); ++inst_done; read_transform = false; @@ -455,32 +474,38 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren // if node is empty - create empty object // XXX empty node may not mean it is empty object, not sure about this if ( (geom_done + camera_done + lamp_done + controller_done + inst_done) < 1) { - ob = add_object(sce, OB_EMPTY); + ob = bc_add_object(sce, OB_EMPTY, NULL); + objects_done->push_back(ob); } // XXX: if there're multiple instances, only one is stored if (!ob) return; - - std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId(); - rename_id(&ob->id, (char*)nodename.c_str()); + for (std::vector<Object *>::iterator it = objects_done->begin(); it != objects_done->end(); ++it) { + ob = *it; + std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId(); + rename_id(&ob->id, (char*)nodename.c_str()); + object_map.insert(std::make_pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), ob)); + node_map[node->getUniqueId()] = node; - object_map[node->getUniqueId()] = ob; - node_map[node->getUniqueId()] = node; + if (is_library_node) + libnode_ob.push_back(ob); + } - if (is_library_node) - libnode_ob.push_back(ob); } - if (read_transform) - anim_importer.read_node_transform(node, ob); // overwrites location set earlier + for (std::vector<Object *>::iterator it = objects_done->begin(); it != objects_done->end(); ++it) { + ob =*it; - if (!is_joint) { - // if par was given make this object child of the previous - if (par && ob) - bc_set_parent(ob, par, mContext); - } + if (read_transform) + anim_importer.read_node_transform(node, ob); // overwrites location set earlier + if (!is_joint) { + // if par was given make this object child of the previous + if (par && ob) + bc_set_parent(ob, par, mContext); + } + } // if node has child nodes write them COLLADAFW::NodePointerArray &child_nodes = node->getChildNodes(); for (unsigned int i = 0; i < child_nodes.getCount(); i++) { @@ -777,8 +802,8 @@ bool DocumentImporter::writeCamera( const COLLADAFW::Camera* camera ) cam_id = camera->getOriginalId(); cam_name = camera->getName(); - if (cam_name.size()) cam = (Camera*)add_camera((char*)cam_name.c_str()); - else cam = (Camera*)add_camera((char*)cam_id.c_str()); + if (cam_name.size()) cam = (Camera *)BKE_camera_add((char*)cam_name.c_str()); + else cam = (Camera *)BKE_camera_add((char*)cam_id.c_str()); if (!cam) { fprintf(stderr, "Cannot create camera.\n"); diff --git a/source/blender/collada/DocumentImporter.h b/source/blender/collada/DocumentImporter.h index 606218b644d..13f23b23388 100644 --- a/source/blender/collada/DocumentImporter.h +++ b/source/blender/collada/DocumentImporter.h @@ -151,7 +151,7 @@ private: std::map<COLLADAFW::UniqueId, Camera*> uid_camera_map; std::map<COLLADAFW::UniqueId, Lamp*> uid_lamp_map; std::map<Material*, TexIndexTextureArrayMap> material_texture_mapping_map; - std::map<COLLADAFW::UniqueId, Object*> object_map; + std::multimap<COLLADAFW::UniqueId, Object*> object_map; std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> node_map; std::vector<const COLLADAFW::VisualScene*> vscenes; std::vector<Object*> libnode_ob; diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp index bbc7677c279..36ed6867525 100644 --- a/source/blender/collada/EffectExporter.cpp +++ b/source/blender/collada/EffectExporter.cpp @@ -93,10 +93,10 @@ void EffectsExporter::writeBlinn(COLLADASW::EffectProfile &ep, Material *ma) COLLADASW::ColorOrTexture cot; ep.setShaderType(COLLADASW::EffectProfile::BLINN); // shininess - ep.setShininess(ma->har, false , "shininess"); + ep.setShininess(ma->har, false, "shininess"); // specular cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f); - ep.setSpecular(cot, false , "specular" ); + ep.setSpecular(cot, false, "specular" ); } void EffectsExporter::writeLambert(COLLADASW::EffectProfile &ep, Material *ma) @@ -110,10 +110,10 @@ void EffectsExporter::writePhong(COLLADASW::EffectProfile &ep, Material *ma) COLLADASW::ColorOrTexture cot; ep.setShaderType(COLLADASW::EffectProfile::PHONG); // shininess - ep.setShininess(ma->har , false , "shininess" ); + ep.setShininess(ma->har, false, "shininess" ); // specular cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f); - ep.setSpecular(cot, false , "specular" ); + ep.setSpecular(cot, false, "specular" ); } void EffectsExporter::operator()(Material *ma, Object *ob) @@ -150,10 +150,10 @@ void EffectsExporter::operator()(Material *ma, Object *ob) // index of refraction if (ma->mode & MA_RAYTRANSP) { - ep.setIndexOfRefraction(ma->ang, false , "index_of_refraction"); + ep.setIndexOfRefraction(ma->ang, false, "index_of_refraction"); } else { - ep.setIndexOfRefraction(1.0f, false , "index_of_refraction"); + ep.setIndexOfRefraction(1.0f, false, "index_of_refraction"); } COLLADASW::ColorOrTexture cot; @@ -161,18 +161,18 @@ void EffectsExporter::operator()(Material *ma, Object *ob) // transparency if (ma->mode & MA_TRANSP) { // Tod: because we are in A_ONE mode transparency is calculated like this: - ep.setTransparency(ma->alpha, false , "transparency"); + ep.setTransparency(ma->alpha, false, "transparency"); // cot = getcol(1.0f, 1.0f, 1.0f, 1.0f); // ep.setTransparent(cot); } // emission cot=getcol(ma->emit, ma->emit, ma->emit, 1.0f); - ep.setEmission(cot, false , "emission"); + ep.setEmission(cot, false, "emission"); // diffuse multiplied by diffuse intensity cot = getcol(ma->r * ma->ref, ma->g * ma->ref, ma->b * ma->ref, 1.0f); - ep.setDiffuse(cot, false , "diffuse"); + ep.setDiffuse(cot, false, "diffuse"); // ambient /* ma->ambX is calculated only on render, so lets do it here manually and not rely on ma->ambX. */ @@ -181,7 +181,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob) else cot = getcol(ma->amb, ma->amb, ma->amb, 1.0f); - ep.setAmbient(cot, false , "ambient"); + ep.setAmbient(cot, false, "ambient"); // reflective, reflectivity if (ma->mode & MA_RAYMIRROR) { @@ -198,7 +198,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob) // specular if (ep.getShaderType() != COLLADASW::EffectProfile::LAMBERT) { cot = getcol(ma->specr * ma->spec, ma->specg * ma->spec, ma->specb * ma->spec, 1.0f); - ep.setSpecular(cot, false , "specular"); + ep.setSpecular(cot, false, "specular"); } // XXX make this more readable if possible @@ -279,19 +279,19 @@ void EffectsExporter::operator()(Material *ma, Object *ob) // color if (t->mapto & (MAP_COL | MAP_COLSPEC)) { - ep.setDiffuse(createTexture(ima, uvname, sampler), false , "diffuse"); + ep.setDiffuse(createTexture(ima, uvname, sampler), false, "diffuse"); } // ambient if (t->mapto & MAP_AMB) { - ep.setAmbient(createTexture(ima, uvname, sampler), false , "ambient"); + ep.setAmbient(createTexture(ima, uvname, sampler), false, "ambient"); } // specular if (t->mapto & MAP_SPEC) { - ep.setSpecular(createTexture(ima, uvname, sampler), false , "specular"); + ep.setSpecular(createTexture(ima, uvname, sampler), false, "specular"); } // emission if (t->mapto & MAP_EMIT) { - ep.setEmission(createTexture(ima, uvname, sampler), false , "emission"); + ep.setEmission(createTexture(ima, uvname, sampler), false, "emission"); } // reflective if (t->mapto & MAP_REF) { @@ -350,7 +350,7 @@ COLLADASW::ColorOrTexture EffectsExporter::createTexture(Image *ima, COLLADASW::ColorOrTexture EffectsExporter::getcol(float r, float g, float b, float a) { - COLLADASW::Color color(r,g,b,a); + COLLADASW::Color color(r, g, b, a); COLLADASW::ColorOrTexture cot(color); return cot; } diff --git a/source/blender/collada/ErrorHandler.h b/source/blender/collada/ErrorHandler.h index 07eccb713e8..3b3797e935a 100644 --- a/source/blender/collada/ErrorHandler.h +++ b/source/blender/collada/ErrorHandler.h @@ -47,7 +47,7 @@ public: bool hasError() { return mError; } private: /** Disable default copy ctor. */ - ErrorHandler( const ErrorHandler& pre ); + ErrorHandler(const ErrorHandler& pre); /** Disable default assignment operator. */ const ErrorHandler& operator= ( const ErrorHandler& pre ); /** Hold error status. */ diff --git a/source/blender/collada/ExtraHandler.h b/source/blender/collada/ExtraHandler.h index 68656dfc690..900e7b70331 100644 --- a/source/blender/collada/ExtraHandler.h +++ b/source/blender/collada/ExtraHandler.h @@ -63,7 +63,7 @@ public: const COLLADAFW::UniqueId& uniqueId ); private: /** Disable default copy constructor. */ - ExtraHandler( const ExtraHandler& pre ); + ExtraHandler(const ExtraHandler& pre); /** Disable default assignment operator. */ const ExtraHandler& operator= ( const ExtraHandler& pre ); diff --git a/source/blender/collada/ExtraTags.h b/source/blender/collada/ExtraTags.h index f8d12e6288a..03a311a7e86 100644 --- a/source/blender/collada/ExtraTags.h +++ b/source/blender/collada/ExtraTags.h @@ -59,7 +59,7 @@ public: private: /** Disable default copy constructor. */ - ExtraTags( const ExtraTags& pre ); + ExtraTags(const ExtraTags& pre); /** Disable default assignment operator. */ const ExtraTags& operator= ( const ExtraTags& pre ); diff --git a/source/blender/collada/LightExporter.cpp b/source/blender/collada/LightExporter.cpp index 1d7afb9b1a1..6d276cd782f 100644 --- a/source/blender/collada/LightExporter.cpp +++ b/source/blender/collada/LightExporter.cpp @@ -84,7 +84,7 @@ void LightsExporter::operator()(Object *ob) // sun if (la->type == LA_SUN) { COLLADASW::DirectionalLight cla(mSW, la_id, la_name); - cla.setColor(col,false,"color"); + cla.setColor(col, false, "color"); cla.setConstantAttenuation(constatt); exportBlenderProfile(cla, la); addLight(cla); @@ -92,7 +92,7 @@ void LightsExporter::operator()(Object *ob) // hemi else if (la->type == LA_HEMI) { COLLADASW::AmbientLight cla(mSW, la_id, la_name); - cla.setColor(col,false,"color"); + cla.setColor(col, false, "color"); cla.setConstantAttenuation(constatt); exportBlenderProfile(cla, la); addLight(cla); @@ -100,9 +100,9 @@ void LightsExporter::operator()(Object *ob) // spot else if (la->type == LA_SPOT) { COLLADASW::SpotLight cla(mSW, la_id, la_name); - cla.setColor(col,false,"color"); - cla.setFallOffAngle(la->spotsize,false,"fall_off_angle"); - cla.setFallOffExponent(la->spotblend,false,"fall_off_exponent"); + cla.setColor(col, false, "color"); + cla.setFallOffAngle(la->spotsize, false, "fall_off_angle"); + cla.setFallOffExponent(la->spotblend, false, "fall_off_exponent"); cla.setConstantAttenuation(constatt); cla.setLinearAttenuation(linatt); cla.setQuadraticAttenuation(quadatt); @@ -112,7 +112,7 @@ void LightsExporter::operator()(Object *ob) // lamp else if (la->type == LA_LOCAL) { COLLADASW::PointLight cla(mSW, la_id, la_name); - cla.setColor(col,false,"color"); + cla.setColor(col, false, "color"); cla.setConstantAttenuation(constatt); cla.setLinearAttenuation(linatt); cla.setQuadraticAttenuation(quadatt); @@ -123,7 +123,7 @@ void LightsExporter::operator()(Object *ob) // it will be exported as a local lamp else { COLLADASW::PointLight cla(mSW, la_id, la_name); - cla.setColor(col,false,"color"); + cla.setColor(col, false, "color"); cla.setConstantAttenuation(constatt); cla.setLinearAttenuation(linatt); cla.setQuadraticAttenuation(quadatt); diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp index 0bf33206fa7..ba6be75e051 100644 --- a/source/blender/collada/MeshImporter.cpp +++ b/source/blender/collada/MeshImporter.cpp @@ -727,6 +727,22 @@ bool MeshImporter::flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce) : unitconverter(unitconv), scene(sce), armature_importer(arm) {} +void MeshImporter::bmeshConversion() +{ + for (std::map<COLLADAFW::UniqueId, Mesh*>::iterator m = uid_mesh_map.begin(); + m != uid_mesh_map.end(); ++m) + { + if ((*m).second) { + Mesh *me = (*m).second; + BKE_mesh_convert_mfaces_to_mpolys(me); + BKE_mesh_tessface_clear(me); + + mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL); + } + } +} + + Object *MeshImporter::get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid) { if (uid_object_map.find(geom_uid) != uid_object_map.end()) @@ -839,13 +855,12 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri for (it = prims.begin(); it != prims.end(); it++) { Primitive& prim = *it; - i = 0; - while (i++ < prim.totface) { - prim.mface->mat_nr = mat_index; - prim.mface++; + MFace *mface = prim.mface; + + for (i = 0; i < prim.totface; i++, mface++) { + mface->mat_nr = mat_index; // bind texture images to faces if (texture_face && (*color_texture)) { - texture_face->mode = TF_TEX; texture_face->tpage = (Image*)(*color_texture)->tex->ima; texture_face++; } @@ -856,7 +871,6 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri return texture_face; } - Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom, bool isController, std::map<COLLADAFW::UniqueId, Material*>& uid_material_map, @@ -885,16 +899,16 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta } if (!uid_mesh_map[*geom_uid]) return NULL; - Object *ob = add_object(scene, OB_MESH); + // name Object + const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId(); + const char *name = (id.length())? id.c_str(): NULL; + + // add object + Object *ob = bc_add_object(scene, OB_MESH, name); // store object pointer for ArmatureImporter uid_object_map[*geom_uid] = ob; - // name Object - const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId(); - if (id.length()) - rename_id(&ob->id, (char*)id.c_str()); - // replace ob->data freeing the old one Mesh *old_mesh = (Mesh*)ob->data; @@ -922,7 +936,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta fprintf(stderr, "invalid referenced material for %s\n", mat_array[i].getName().c_str()); } } - + return ob; } @@ -949,6 +963,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom) const std::string& str_geom_id = mesh->getName().size() ? mesh->getName() : mesh->getOriginalId(); Mesh *me = add_mesh((char*)str_geom_id.c_str()); + me->id.us--; // is already 1 here, but will be set later in set_mesh // store the Mesh pointer to link it later with an Object this->uid_mesh_map[mesh->getUniqueId()] = me; @@ -963,8 +978,5 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom) make_edges(me, 0); - mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL); - - BKE_mesh_convert_mfaces_to_mpolys(me); return true; } diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h index 0c2e600121f..97ae4d99ad7 100644 --- a/source/blender/collada/MeshImporter.h +++ b/source/blender/collada/MeshImporter.h @@ -129,6 +129,8 @@ public: MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce); + void bmeshConversion(); + virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid); MTex *assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBinding &ctexture, diff --git a/source/blender/collada/SkinInfo.cpp b/source/blender/collada/SkinInfo.cpp index 99a4f024f77..0727ec21682 100644 --- a/source/blender/collada/SkinInfo.cpp +++ b/source/blender/collada/SkinInfo.cpp @@ -151,7 +151,7 @@ void SkinInfo::set_controller(const COLLADAFW::SkinController* co) // called from write_controller Object *SkinInfo::create_armature(Scene *scene) { - ob_arm = add_object(scene, OB_ARMATURE); + ob_arm = bc_add_object(scene, OB_ARMATURE, NULL); return ob_arm; } diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp index f96aff8aa90..4974566bba1 100644 --- a/source/blender/collada/TransformWriter.cpp +++ b/source/blender/collada/TransformWriter.cpp @@ -48,11 +48,11 @@ void TransformWriter::add_node_transform(COLLADASW::Node& node, float mat[][4], double dmat[4][4]; UnitConverter* converter = new UnitConverter(); - converter->mat4_to_dae_double(dmat,local); + converter->mat4_to_dae_double(dmat, local); TransformBase::decompose(local, loc, rot, NULL, scale); if ( node.getType() == COLLADASW::Node::JOINT) - node.addMatrix("transform",dmat); + node.addMatrix("transform", dmat); else add_transform(node, loc, rot, scale); } diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index 4aed29defbc..bd0f82fb0ac 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -34,6 +34,7 @@ #include "DNA_customdata_types.h" #include "DNA_object_types.h" +#include "DNA_scene_types.h" #include "BLI_math.h" @@ -41,6 +42,7 @@ #include "BKE_customdata.h" #include "BKE_depsgraph.h" #include "BKE_object.h" +#include "BKE_scene.h" #include "WM_api.h" // XXX hrm, see if we can do without this #include "WM_types.h" @@ -110,3 +112,16 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space) return true; } +Object *bc_add_object(Scene *scene, int type, const char *name) +{ + Object *ob = add_only_object(type, name); + + ob->data= add_obdata_from_type(type); + ob->lay= scene->lay; + ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + + scene_select_base(scene, scene_add_base(scene, ob)); + + return ob; +} + diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h index b0c24152652..1f5d2b1d8da 100644 --- a/source/blender/collada/collada_utils.h +++ b/source/blender/collada/collada_utils.h @@ -39,6 +39,7 @@ #include "DNA_customdata_types.h" #include "DNA_texture_types.h" #include "BKE_context.h" +#include "DNA_scene_types.h" typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex*> > TexIndexTextureArrayMap; @@ -48,5 +49,6 @@ extern int bc_test_parent_loop(Object *par, Object *ob); extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space=true); extern char *bc_CustomData_get_layer_name(const CustomData *data, int type, int n); extern char *bc_CustomData_get_active_layer_name(const CustomData *data, int type); +extern Object *bc_add_object(Scene *scene, int type, const char *name); #endif diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index a92ae9bbca3..d63d5ae2082 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -292,7 +292,7 @@ static short acf_generic_group_offset(bAnimContext *ac, bAnimListElem *ale) offset += 21; } /* materials and particles animdata */ - else if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) + else if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) offset += 14; /* if not in Action Editor mode, action-groups (and their children) must carry some offset too... */ @@ -2639,7 +2639,7 @@ bAnimChannelType *ANIM_channel_get_typeinfo (bAnimListElem *ale) /* --------------------------- */ /* Print debug info string for the given channel */ -void ANIM_channel_debug_print_info (bAnimListElem *ale, short indent_level) +void ANIM_channel_debug_print_info(bAnimListElem *ale, short indent_level) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); @@ -2671,7 +2671,7 @@ void ANIM_channel_debug_print_info (bAnimListElem *ale, short indent_level) /* Check if some setting for a channel is enabled * Returns: 1 = On, 0 = Off, -1 = Invalid */ -short ANIM_channel_setting_get (bAnimContext *ac, bAnimListElem *ale, int setting) +short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, int setting) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); @@ -2748,7 +2748,7 @@ short ANIM_channel_setting_get (bAnimContext *ac, bAnimListElem *ale, int settin * - setting: eAnimChannel_Settings * - mode: eAnimChannels_SetFlag */ -void ANIM_channel_setting_set (bAnimContext *ac, bAnimListElem *ale, int setting, short mode) +void ANIM_channel_setting_set(bAnimContext *ac, bAnimListElem *ale, int setting, short mode) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); @@ -2801,7 +2801,7 @@ void ANIM_channel_setting_set (bAnimContext *ac, bAnimListElem *ale, int setting /* Draw the given channel */ // TODO: make this use UI controls for the buttons -void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) +void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); View2D *v2d= &ac->ar->v2d; @@ -3230,7 +3230,7 @@ static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, bAnimChann } /* Draw UI widgets the given channel */ -void ANIM_channel_draw_widgets (bContext *C, bAnimContext *ac, bAnimListElem *ale, uiBlock *block, float yminc, float ymaxc, size_t channel_index) +void ANIM_channel_draw_widgets(bContext *C, bAnimContext *ac, bAnimListElem *ale, uiBlock *block, float yminc, float ymaxc, size_t channel_index) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); View2D *v2d= &ac->ar->v2d; diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 102587909cd..a1878de7523 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -69,7 +69,7 @@ /* Set the given animation-channel as the active one for the active context */ // TODO: extend for animdata types... -void ANIM_set_active_channel (bAnimContext *ac, void *data, short datatype, int filter, void *channel_data, short channel_type) +void ANIM_set_active_channel(bAnimContext *ac, void *data, short datatype, int filter, void *channel_data, short channel_type) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -190,7 +190,7 @@ void ANIM_set_active_channel (bAnimContext *ac, void *data, short datatype, int * - test: check if deselecting instead of selecting * - sel: eAnimChannels_SetFlag; */ -void ANIM_deselect_anim_channels (bAnimContext *ac, void *data, short datatype, short test, short sel) +void ANIM_deselect_anim_channels(bAnimContext *ac, void *data, short datatype, short test, short sel) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -376,7 +376,7 @@ void ANIM_deselect_anim_channels (bAnimContext *ac, void *data, short datatype, * - setting: type of setting to set * - on: whether the visibility setting has been enabled or disabled */ -void ANIM_flush_setting_anim_channels (bAnimContext *ac, ListBase *anim_data, bAnimListElem *ale_setting, int setting, short on) +void ANIM_flush_setting_anim_channels(bAnimContext *ac, ListBase *anim_data, bAnimListElem *ale_setting, int setting, short on) { bAnimListElem *ale, *match=NULL; int prevLevel=0, matchLevel=0; @@ -508,7 +508,7 @@ void ANIM_flush_setting_anim_channels (bAnimContext *ac, ListBase *anim_data, bA /* -------------------------- F-Curves ------------------------------------- */ /* Delete the given F-Curve from its AnimData block */ -void ANIM_fcurve_delete_from_animdata (bAnimContext *ac, AnimData *adt, FCurve *fcu) +void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, AnimData *adt, FCurve *fcu) { /* - if no AnimData, we've got nowhere to remove the F-Curve from * (this doesn't guarantee that the F-Curve is in there, but at least we tried diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 3f0e1b1be14..b449c11ff7b 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -241,7 +241,7 @@ static void animchan_sync_fcurve (bAnimContext *UNUSED(ac), bAnimListElem *ale) /* ---------------- */ /* Main call to be exported to animation editors */ -void ANIM_sync_animchannels_to_data (const bContext *C) +void ANIM_sync_animchannels_to_data(const bContext *C) { bAnimContext ac; ListBase anim_data = {NULL, NULL}; diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index bab341ae70b..236b8d18b78 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -63,7 +63,7 @@ * - cfra: time in frames or seconds, consistent with the values shown by timecodes */ // TODO: have this in kernel instead under scene? -void ANIM_timecode_string_from_frame (char *str, Scene *scene, int power, short timecodes, float cfra) +void ANIM_timecode_string_from_frame(char *str, Scene *scene, int power, short timecodes, float cfra) { if (timecodes) { int hours=0, minutes=0, seconds=0, frames=0; @@ -212,7 +212,7 @@ static void draw_cfra_number (Scene *scene, View2D *v2d, float cfra, short time) } /* General call for drawing current frame indicator in animation editor */ -void ANIM_draw_cfra (const bContext *C, View2D *v2d, short flag) +void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag) { Scene *scene= CTX_data_scene(C); float vec[2]; @@ -248,7 +248,7 @@ void ANIM_draw_cfra (const bContext *C, View2D *v2d, short flag) /* Note: 'Preview Range' tools are defined in anim_ops.c */ /* Draw preview range 'curtains' for highlighting where the animation data is */ -void ANIM_draw_previewrange (const bContext *C, View2D *v2d) +void ANIM_draw_previewrange(const bContext *C, View2D *v2d) { Scene *scene= CTX_data_scene(C); @@ -335,7 +335,7 @@ static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt) * - restore = whether to map points back to non-mapped time * - only_keys = whether to only adjust the location of the center point of beztriples */ -void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, short only_keys) +void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, short restore, short only_keys) { KeyframeEditData ked= {{NULL}}; KeyframeEditFunc map_cb; @@ -361,7 +361,7 @@ void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, s /* UNITS CONVERSION MAPPING (required for drawing and editing keyframes) */ /* Get unit conversion factor for given ID + F-Curve */ -float ANIM_unit_mapping_get_factor (Scene *scene, ID *id, FCurve *fcu, short restore) +float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short restore) { /* sanity checks */ if (id && fcu && fcu->rna_path) { @@ -415,7 +415,7 @@ static short bezt_unit_mapping_apply (KeyframeEditData *ked, BezTriple *bezt) } /* Apply/Unapply units conversions to keyframes */ -void ANIM_unit_mapping_apply_fcurve (Scene *scene, ID *id, FCurve *fcu, short flag) +void ANIM_unit_mapping_apply_fcurve(Scene *scene, ID *id, FCurve *fcu, short flag) { KeyframeEditData ked; KeyframeEditFunc sel_cb; diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 5a5f3bae6cc..809b4c8d65e 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -261,7 +261,7 @@ static short nlaedit_get_context (bAnimContext *ac, SpaceNla *snla) * - AnimContext to write to is provided as pointer to var on stack so that we don't have * allocation/freeing costs (which are not that avoidable with channels). */ -short ANIM_animdata_context_getdata (bAnimContext *ac) +short ANIM_animdata_context_getdata(bAnimContext *ac) { SpaceLink *sl = ac->sl; short ok= 0; @@ -304,7 +304,7 @@ short ANIM_animdata_context_getdata (bAnimContext *ac) * allocation/freeing costs (which are not that avoidable with channels). * - Clears data and sets the information from Blender Context which is useful */ -short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) +short ANIM_animdata_get_context(const bContext *C, bAnimContext *ac) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); @@ -838,11 +838,14 @@ static bAnimListElem *make_new_animlistelem (void *data, short datatype, ID *own /* ----------------------------------------- */ -/* 'Only Selected' selected data filtering +/* 'Only Selected' selected data and/or 'Include Hidden' filtering * NOTE: when this function returns true, the F-Curve is to be skipped */ -static size_t skip_fcurve_selected_data (bDopeSheet *ads, FCurve *fcu, ID *owner_id, int filter_mode) +static short skip_fcurve_selected_data (bDopeSheet *ads, FCurve *fcu, ID *owner_id, int filter_mode) { + /* hidden items should be skipped if we only care about visible data, but we aren't interested in hidden stuff */ + short skip_hidden = (filter_mode & ANIMFILTER_DATA_VISIBLE) && !(ads->filterflag & ADS_FILTER_INCL_HIDDEN); + if (GS(owner_id->name) == ID_OB) { Object *ob= (Object *)owner_id; @@ -859,17 +862,22 @@ static size_t skip_fcurve_selected_data (bDopeSheet *ads, FCurve *fcu, ID *owner /* check whether to continue or skip */ if ((pchan) && (pchan->bone)) { /* if only visible channels, skip if bone not visible unless user wants channels from hidden data too */ - if ((filter_mode & ANIMFILTER_DATA_VISIBLE) && !(ads->filterflag & ADS_FILTER_INCL_HIDDEN)) { + if (skip_hidden) { bArmature *arm= (bArmature *)ob->data; + /* skipping - not visible on currently visible layers */ if ((arm->layer & pchan->bone->layer) == 0) return 1; - // TODO: manually hidden using flags + /* skipping - is currently hidden */ + if (pchan->bone->flag & BONE_HIDDEN_P) + return 1; } /* can only add this F-Curve if it is selected */ - if ((pchan->bone->flag & BONE_SELECTED) == 0) - return 1; + if (ads->filterflag & ADS_FILTER_ONLYSEL) { + if ((pchan->bone->flag & BONE_SELECTED) == 0) + return 1; + } } } } @@ -888,14 +896,16 @@ static size_t skip_fcurve_selected_data (bDopeSheet *ads, FCurve *fcu, ID *owner if (seq_name) MEM_freeN(seq_name); /* can only add this F-Curve if it is selected */ - if (seq==NULL || (seq->flag & SELECT)==0) - return 1; + if (ads->filterflag & ADS_FILTER_ONLYSEL) { + if ((seq == NULL) || (seq->flag & SELECT)==0) + return 1; + } } } else if (GS(owner_id->name) == ID_NT) { bNodeTree *ntree = (bNodeTree *)owner_id; - /* check for selected nodes */ + /* check for selected nodes */ if ((fcu->rna_path) && strstr(fcu->rna_path, "nodes")) { bNode *node; char *node_name; @@ -906,8 +916,10 @@ static size_t skip_fcurve_selected_data (bDopeSheet *ads, FCurve *fcu, ID *owner if (node_name) MEM_freeN(node_name); /* can only add this F-Curve if it is selected */ - if ((node) && (node->flag & NODE_SELECT)==0) - return 1; + if (ads->filterflag & ADS_FILTER_ONLYSEL) { + if ((node) && (node->flag & NODE_SELECT)==0) + return 1; + } } } return 0; @@ -954,17 +966,19 @@ static FCurve *animfilter_fcurve_next (bDopeSheet *ads, FCurve *first, bActionGr */ for (fcu= first; ((fcu) && (fcu->grp==grp)); fcu= fcu->next) { /* special exception for Pose-Channel/Sequence-Strip/Node Based F-Curves: - * - the 'Only Selected' data filter should be applied to Pose-Channel data too, but those are - * represented as F-Curves. The way the filter for objects worked was to be the first check - * after 'normal' visibility, so this is done first here too... + * - the 'Only Selected' and 'Include Hidden' data filters should be applied to sub-ID data which + * can be independently selected/hidden, such as Pose-Channels, Sequence Strips, and Nodes. + * Since these checks were traditionally done as first check for objects, we do the same here * - we currently use an 'approximate' method for getting these F-Curves that doesn't require * carefully checking the entire path * - this will also affect things like Drivers, and also works for Bone Constraints */ - if ( ((ads) && (ads->filterflag & ADS_FILTER_ONLYSEL)) && (owner_id) ) { - if (skip_fcurve_selected_data(ads, fcu, owner_id, filter_mode)) - continue; - } + if (ads && owner_id) { + if ((ads->filterflag & ADS_FILTER_ONLYSEL) || (ads->filterflag & ADS_FILTER_INCL_HIDDEN)==0) { + if (skip_fcurve_selected_data(ads, fcu, owner_id, filter_mode)) + continue; + } + } /* only include if visible (Graph Editor check, not channels check) */ if (!(filter_mode & ANIMFILTER_CURVE_VISIBLE) || (fcu->flag & FCURVE_VISIBLE)) { @@ -2271,7 +2285,7 @@ static size_t animdata_filter_remove_duplis (ListBase *anim_data) * will be placed for use. * filter_mode: how should the data be filtered - bitmapping accessed flags */ -size_t ANIM_animdata_filter (bAnimContext *ac, ListBase *anim_data, int filter_mode, void *data, short datatype) +size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mode, void *data, short datatype) { size_t items = 0; diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c index 6f4d4c4a431..4be3f79060e 100644 --- a/source/blender/editors/animation/anim_ipo_utils.c +++ b/source/blender/editors/animation/anim_ipo_utils.c @@ -191,7 +191,7 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu) /* used to determine the color of F-Curves with FCURVE_COLOR_AUTO_RAINBOW set */ //void fcurve_rainbow (unsigned int cur, unsigned int tot, float *out) -void getcolor_fcurve_rainbow (int cur, int tot, float *out) +void getcolor_fcurve_rainbow(int cur, int tot, float *out) { float hue, val, sat, fac; int grouping; diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 94d9d426932..2527cb7eb40 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -121,7 +121,7 @@ ListBase *ED_animcontext_get_markers(const bAnimContext *ac) * < value: from the transform code, this is t->vec[0] (which is delta transform for grab/extend, and scale factor for scale) * < side: (B/L/R) for 'extend' functionality, which side of current frame to use */ -int ED_markers_post_apply_transform (ListBase *markers, Scene *scene, int mode, float value, char side) +int ED_markers_post_apply_transform(ListBase *markers, Scene *scene, int mode, float value, char side) { TimeMarker *marker; float cfra = (float)CFRA; @@ -187,14 +187,14 @@ TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x) } /* Return the time of the marker that occurs on a frame closest to the given time */ -int ED_markers_find_nearest_marker_time (ListBase *markers, float x) +int ED_markers_find_nearest_marker_time(ListBase *markers, float x) { TimeMarker *nearest= ED_markers_find_nearest_marker(markers, x); return (nearest) ? (nearest->frame) : (int)floor(x + 0.5f); } -void ED_markers_get_minmax (ListBase *markers, short sel, float *first, float *last) +void ED_markers_get_minmax(ListBase *markers, short sel, float *first, float *last) { TimeMarker *marker; float min, max; @@ -509,7 +509,7 @@ static int ed_markers_poll_markers_exist(bContext *C) * exec() callback will be called instead in the appropriate places. */ static int ed_markers_opwrap_invoke_custom(bContext *C, wmOperator *op, wmEvent *evt, - int (*invoke_func)(bContext*,wmOperator*,wmEvent*)) + int (*invoke_func)(bContext *, wmOperator *, wmEvent *)) { ScrArea *sa = CTX_wm_area(C); int retval = OPERATOR_PASS_THROUGH; diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 9c4f96ebe6d..a4bc0cc854c 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -66,7 +66,7 @@ #include "anim_intern.h" /* called by WM */ -void free_anim_drivers_copybuf (void); +void free_anim_drivers_copybuf(void); /* ************************************************** */ /* Animation Data Validation */ @@ -135,7 +135,7 @@ FCurve *verify_driver_fcurve (ID *id, const char rna_path[], const int array_ind /* Main Driver Management API calls: * Add a new driver for the specified property on the given ID block */ -short ANIM_add_driver (ReportList *reports, ID *id, const char rna_path[], int array_index, short flag, int type) +short ANIM_add_driver(ReportList *reports, ID *id, const char rna_path[], int array_index, short flag, int type) { PointerRNA id_ptr, ptr; PropertyRNA *prop; @@ -229,7 +229,7 @@ short ANIM_add_driver (ReportList *reports, ID *id, const char rna_path[], int a /* Main Driver Management API calls: * Remove the driver for the specified property on the given ID block (if available) */ -short ANIM_remove_driver (ReportList *UNUSED(reports), ID *id, const char rna_path[], int array_index, short UNUSED(flag)) +short ANIM_remove_driver(ReportList *UNUSED(reports), ID *id, const char rna_path[], int array_index, short UNUSED(flag)) { AnimData *adt; FCurve *fcu; @@ -281,7 +281,7 @@ static FCurve *channeldriver_copypaste_buf = NULL; /* This function frees any MEM_calloc'ed copy/paste buffer data */ // XXX find some header to put this in! -void free_anim_drivers_copybuf (void) +void free_anim_drivers_copybuf(void) { /* free the buffer F-Curve if it exists, as if it were just another F-Curve */ if (channeldriver_copypaste_buf) @@ -290,7 +290,7 @@ void free_anim_drivers_copybuf (void) } /* Checks if there is a driver in the copy/paste buffer */ -short ANIM_driver_can_paste (void) +short ANIM_driver_can_paste(void) { return (channeldriver_copypaste_buf != NULL); } @@ -300,7 +300,7 @@ short ANIM_driver_can_paste (void) /* Main Driver Management API calls: * Make a copy of the driver for the specified property on the given ID block */ -short ANIM_copy_driver (ReportList *reports, ID *id, const char rna_path[], int array_index, short UNUSED(flag)) +short ANIM_copy_driver(ReportList *reports, ID *id, const char rna_path[], int array_index, short UNUSED(flag)) { PointerRNA id_ptr, ptr; PropertyRNA *prop; @@ -347,7 +347,7 @@ short ANIM_copy_driver (ReportList *reports, ID *id, const char rna_path[], int * Add a new driver for the specified property on the given ID block or replace an existing one * with the driver + driver-curve data from the buffer */ -short ANIM_paste_driver (ReportList *reports, ID *id, const char rna_path[], int array_index, short UNUSED(flag)) +short ANIM_paste_driver(ReportList *reports, ID *id, const char rna_path[], int array_index, short UNUSED(flag)) { PointerRNA id_ptr, ptr; PropertyRNA *prop; @@ -512,7 +512,7 @@ static int add_driver_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_driver_button_add (wmOperatorType *ot) +void ANIM_OT_driver_button_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Driver"; @@ -564,7 +564,7 @@ static int remove_driver_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_driver_button_remove (wmOperatorType *ot) +void ANIM_OT_driver_button_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Driver"; @@ -611,7 +611,7 @@ static int copy_driver_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_copy_driver_button (wmOperatorType *ot) +void ANIM_OT_copy_driver_button(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy Driver"; @@ -655,7 +655,7 @@ static int paste_driver_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_paste_driver_button (wmOperatorType *ot) +void ANIM_OT_paste_driver_button(wmOperatorType *ot) { /* identifiers */ ot->name = "Paste Driver"; diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index d5ec98da588..9b46729b489 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -625,7 +625,7 @@ static void draw_modifier__stepped(uiLayout *layout, ID *id, FModifier *fcm, sho /* --------------- */ -void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ID *id, ListBase *modifiers, FModifier *fcm) +void ANIM_uiTemplate_fmodifier_draw(uiLayout *layout, ID *id, ListBase *modifiers, FModifier *fcm) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); uiLayout *box, *row, *sub, *col; @@ -769,7 +769,7 @@ static ListBase fmodifier_copypaste_buf = {NULL, NULL}; /* ---------- */ /* free the copy/paste buffer */ -void free_fmodifiers_copybuf (void) +void free_fmodifiers_copybuf(void) { /* just free the whole buffer */ free_fmodifiers(&fmodifier_copypaste_buf); @@ -779,7 +779,7 @@ void free_fmodifiers_copybuf (void) * assuming that the buffer has been cleared already with free_fmodifiers_copybuf() * - active: only copy the active modifier */ -short ANIM_fmodifiers_copy_to_buf (ListBase *modifiers, short active) +short ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, short active) { short ok = 1; @@ -808,7 +808,7 @@ short ANIM_fmodifiers_copy_to_buf (ListBase *modifiers, short active) /* 'Paste' the F-Modifier(s) from the buffer to the specified list * - replace: free all the existing modifiers to leave only the pasted ones */ -short ANIM_fmodifiers_paste_from_buf (ListBase *modifiers, short replace) +short ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, short replace) { FModifier *fcm; short ok = 0; diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 0e0ff0defbb..cc5cb42a783 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -80,7 +80,7 @@ /* Comparator callback used for ActKeyColumns and cframe float-value pointer */ /* NOTE: this is exported to other modules that use the ActKeyColumns for finding keyframes */ -short compare_ak_cfraPtr (void *node, void *data) +short compare_ak_cfraPtr(void *node, void *data) { ActKeyColumn *ak= (ActKeyColumn *)node; float *cframe= data; @@ -312,7 +312,7 @@ static BezTriple *abk_get_bezt_with_value (ActBeztColumn *abk, float value) /* Comparator callback used for ActKeyBlock and cframe float-value pointer */ /* NOTE: this is exported to other modules that use the ActKeyBlocks for finding long-keyframes */ -short compare_ab_cfraPtr (void *node, void *data) +short compare_ab_cfraPtr(void *node, void *data) { ActKeyBlock *ab= (ActKeyBlock *)node; float *cframe= data; @@ -459,7 +459,7 @@ static void set_touched_actkeyblock (ActKeyBlock *ab) /* --------- */ /* Checks if ActKeyBlock should exist... */ -short actkeyblock_is_valid (ActKeyBlock *ab, DLRBT_Tree *keys) +short actkeyblock_is_valid(ActKeyBlock *ab, DLRBT_Tree *keys) { ActKeyColumn *ak; short startCurves, endCurves, totCurves; @@ -494,7 +494,7 @@ static const float _unit_diamond_shape[4][2] = { }; /* draw a simple diamond shape with OpenGL */ -void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel, short key_type, short mode, float alpha) +void draw_keyframe_shape(float x, float y, float xscale, float hsize, short sel, short key_type, short mode, float alpha) { static GLuint displist1=0; static GLuint displist2=0; diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 831b8d21b01..c54f8c5bd25 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -282,7 +282,7 @@ typedef struct tSmooth_Bezt { /* Use a weighted moving-means method to reduce intensity of fluctuations */ // TODO: introduce scaling factor for weighting falloff -void smooth_fcurve (FCurve *fcu) +void smooth_fcurve(FCurve *fcu) { BezTriple *bezt; int i, x, totSel = 0; @@ -380,7 +380,7 @@ typedef struct tempFrameValCache { /* Evaluates the curves between each selected keyframe on each frame, and keys the value */ -void sample_fcurve (FCurve *fcu) +void sample_fcurve(FCurve *fcu) { BezTriple *bezt, *start=NULL, *end=NULL; tempFrameValCache *value_cache, *fp; @@ -477,7 +477,7 @@ typedef struct tAnimCopybufItem { /* This function frees any MEM_calloc'ed copy/paste buffer data */ // XXX find some header to put this in! -void free_anim_copybuf (void) +void free_anim_copybuf(void) { tAnimCopybufItem *aci, *acn; @@ -506,7 +506,7 @@ void free_anim_copybuf (void) /* ------------------- */ /* This function adds data to the keyframes copy/paste buffer, freeing existing data first */ -short copy_animedit_keys (bAnimContext *ac, ListBase *anim_data) +short copy_animedit_keys(bAnimContext *ac, ListBase *anim_data) { bAnimListElem *ale; Scene *scene= ac->scene; @@ -760,8 +760,8 @@ EnumPropertyItem keyframe_paste_merge_items[] = { /* This function pastes data from the keyframes copy/paste buffer * > return status code is whether the method FAILED to do anything */ -short paste_animedit_keys (bAnimContext *ac, ListBase *anim_data, - const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode) +short paste_animedit_keys(bAnimContext *ac, ListBase *anim_data, + const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode) { bAnimListElem *ale; diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index dcaa4073bae..9d51b42f1a2 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -86,7 +86,7 @@ /* Keyframing Setting Wrangling */ /* Get the active settings for keyframing settings from context (specifically the given scene) */ -short ANIM_get_keyframing_flags (Scene *scene, short incl_mode) +short ANIM_get_keyframing_flags(Scene *scene, short incl_mode) { short flag = 0; @@ -214,7 +214,7 @@ FCurve *verify_fcurve (bAction *act, const char group[], const char rna_path[], * NOTE: any recalculate of the F-Curve that needs to be done will need to * be done by the caller. */ -int insert_bezt_fcurve (FCurve *fcu, BezTriple *bezt, short flag) +int insert_bezt_fcurve(FCurve *fcu, BezTriple *bezt, short flag) { int i= 0; @@ -295,7 +295,7 @@ int insert_bezt_fcurve (FCurve *fcu, BezTriple *bezt, short flag) * adding a new keyframe to a curve, when the keyframe doesn't exist anywhere else yet. * It returns the index at which the keyframe was added. */ -int insert_vert_fcurve (FCurve *fcu, float x, float y, short flag) +int insert_vert_fcurve(FCurve *fcu, float x, float y, short flag) { BezTriple beztr= {{{0}}}; unsigned int oldTot = fcu->totvert; @@ -759,7 +759,7 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_ * the keyframe insertion. These include the 'visual' keyframing modes, quick refresh, * and extra keyframe filtering. */ -short insert_keyframe_direct (ReportList *reports, PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, float cfra, short flag) +short insert_keyframe_direct(ReportList *reports, PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, float cfra, short flag) { float curval= 0.0f; @@ -880,7 +880,7 @@ short insert_keyframe_direct (ReportList *reports, PointerRNA ptr, PropertyRNA * * * index of -1 keys all array indices */ -short insert_keyframe (ReportList *reports, ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) +short insert_keyframe(ReportList *reports, ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) { PointerRNA id_ptr, ptr; PropertyRNA *prop = NULL; @@ -971,7 +971,7 @@ short insert_keyframe (ReportList *reports, ID *id, bAction *act, const char gro * The flag argument is used for special settings that alter the behavior of * the keyframe deletion. These include the quick refresh options. */ -short delete_keyframe (ReportList *reports, ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short UNUSED(flag)) +short delete_keyframe(ReportList *reports, ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short UNUSED(flag)) { AnimData *adt= BKE_animdata_from_id(id); PointerRNA id_ptr, ptr; @@ -1153,7 +1153,7 @@ static int insert_key_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keyframe_insert (wmOperatorType *ot) +void ANIM_OT_keyframe_insert(wmOperatorType *ot) { PropertyRNA *prop; @@ -1214,7 +1214,7 @@ static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED( } } -void ANIM_OT_keyframe_insert_menu (wmOperatorType *ot) +void ANIM_OT_keyframe_insert_menu(wmOperatorType *ot) { PropertyRNA *prop; @@ -1309,7 +1309,7 @@ static int delete_key_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keyframe_delete (wmOperatorType *ot) +void ANIM_OT_keyframe_delete(wmOperatorType *ot) { PropertyRNA *prop; @@ -1353,7 +1353,8 @@ static int delete_key_v3d_exec (bContext *C, wmOperator *op) float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap // XXX more comprehensive tests will be needed - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) + { ID *id= (ID *)ob; FCurve *fcu, *fcn; short success= 0; @@ -1383,7 +1384,7 @@ static int delete_key_v3d_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keyframe_delete_v3d (wmOperatorType *ot) +void ANIM_OT_keyframe_delete_v3d(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Keyframe"; @@ -1473,11 +1474,12 @@ static int insert_key_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_keyframe_insert_button (wmOperatorType *ot) +void ANIM_OT_keyframe_insert_button(wmOperatorType *ot) { /* identifiers */ ot->name = "Insert Keyframe (Buttons)"; ot->idname = "ANIM_OT_keyframe_insert_button"; + ot->description = "Insert a keyframe keyframe for current UI-active property"; /* callbacks */ ot->exec = insert_key_button_exec; @@ -1545,11 +1547,12 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_keyframe_delete_button (wmOperatorType *ot) +void ANIM_OT_keyframe_delete_button(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Keyframe (Buttons)"; ot->idname = "ANIM_OT_keyframe_delete_button"; + ot->description = "Delete current keyframe of current UI-active property"; /* callbacks */ ot->exec = delete_key_button_exec; @@ -1591,7 +1594,7 @@ int autokeyframe_cfra_can_key(Scene *scene, ID *id) /* --------------- API/Per-Datablock Handling ------------------- */ /* Checks if some F-Curve has a keyframe for a given frame */ -short fcurve_frame_has_keyframe (FCurve *fcu, float frame, short filter) +short fcurve_frame_has_keyframe(FCurve *fcu, float frame, short filter) { /* quick sanity check */ if (ELEM(NULL, fcu, fcu->bezt)) @@ -1704,7 +1707,7 @@ static short object_frame_has_keyframe (Object *ob, float frame, short filter) /* --------------- API ------------------- */ /* Checks whether a keyframe exists for the given ID-block one the given frame */ -short id_frame_has_keyframe (ID *id, float frame, short filter) +short id_frame_has_keyframe(ID *id, float frame, short filter) { /* sanity checks */ if (id == NULL) diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index f66aa31f3f4..925cffca288 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -137,7 +137,7 @@ static int add_default_keyingset_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ANIM_OT_keying_set_add (wmOperatorType *ot) +void ANIM_OT_keying_set_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Empty Keying Set"; @@ -184,7 +184,7 @@ static int remove_active_keyingset_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keying_set_remove (wmOperatorType *ot) +void ANIM_OT_keying_set_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Active Keying Set"; @@ -227,7 +227,7 @@ static int add_empty_ks_path_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keying_set_path_add (wmOperatorType *ot) +void ANIM_OT_keying_set_path_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Empty Keying Set Path"; @@ -270,7 +270,7 @@ static int remove_active_ks_path_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keying_set_path_remove (wmOperatorType *ot) +void ANIM_OT_keying_set_path_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Active Keying Set Path"; @@ -368,11 +368,12 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_keyingset_button_add (wmOperatorType *ot) +void ANIM_OT_keyingset_button_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add to Keying Set"; ot->idname = "ANIM_OT_keyingset_button_add"; + ot->description = "Add current UI-active property to current keying set"; /* callbacks */ ot->exec = add_keyingset_button_exec; @@ -447,11 +448,12 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op) return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; } -void ANIM_OT_keyingset_button_remove (wmOperatorType *ot) +void ANIM_OT_keyingset_button_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove from Keying Set"; ot->idname = "ANIM_OT_keyingset_button_remove"; + ot->description = "Remove current UI-active property from current keying set"; /* callbacks */ ot->exec = remove_keyingset_button_exec; @@ -494,13 +496,14 @@ static int keyingset_active_menu_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_keying_set_active_set (wmOperatorType *ot) +void ANIM_OT_keying_set_active_set(wmOperatorType *ot) { PropertyRNA *prop; /* identifiers */ ot->name = "Set Active Keying Set"; ot->idname = "ANIM_OT_keying_set_active_set"; + ot->description = "Select a new keying set as the active one"; /* callbacks */ ot->invoke = keyingset_active_menu_invoke; @@ -571,7 +574,7 @@ KeyingSet *ANIM_builtin_keyingset_get_named (KeyingSet *prevKS, const char name[ /* --------------- */ /* Add the given KeyingSetInfo to the list of type infos, and create an appropriate builtin set too */ -void ANIM_keyingset_info_register (KeyingSetInfo *ksi) +void ANIM_keyingset_info_register(KeyingSetInfo *ksi) { KeyingSet *ks; @@ -591,7 +594,7 @@ void ANIM_keyingset_info_register (KeyingSetInfo *ksi) } /* Remove the given KeyingSetInfo from the list of type infos, and also remove the builtin set if appropriate */ -void ANIM_keyingset_info_unregister (Main *bmain, KeyingSetInfo *ksi) +void ANIM_keyingset_info_unregister(Main *bmain, KeyingSetInfo *ksi) { KeyingSet *ks, *ksn; @@ -620,7 +623,7 @@ void ANIM_keyingset_info_unregister (Main *bmain, KeyingSetInfo *ksi) /* --------------- */ -void ANIM_keyingset_infos_exit (void) +void ANIM_keyingset_infos_exit(void) { KeyingSetInfo *ksi, *next; @@ -662,7 +665,7 @@ KeyingSet *ANIM_scene_get_active_keyingset (Scene *scene) } /* Get the index of the Keying Set provided, for the given Scene */ -int ANIM_scene_get_keyingset_index (Scene *scene, KeyingSet *ks) +int ANIM_scene_get_keyingset_index(Scene *scene, KeyingSet *ks) { int index; @@ -780,7 +783,7 @@ EnumPropertyItem *ANIM_keying_sets_enum_itemf (bContext *C, PointerRNA *UNUSED(p /* Polling API ----------------------------------------------- */ /* Check if KeyingSet can be used in the current context */ -short ANIM_keyingset_context_ok_poll (bContext *C, KeyingSet *ks) +short ANIM_keyingset_context_ok_poll(bContext *C, KeyingSet *ks) { if ((ks->flag & KEYINGSET_ABSOLUTE) == 0) { KeyingSetInfo *ksi = ANIM_keyingset_info_find_named(ks->typeinfo); @@ -824,7 +827,7 @@ static void RKS_ITER_overrides_list (KeyingSetInfo *ksi, bContext *C, KeyingSet } /* Add new data source for relative Keying Sets */ -void ANIM_relative_keyingset_add_source (ListBase *dsources, ID *id, StructRNA *srna, void *data) +void ANIM_relative_keyingset_add_source(ListBase *dsources, ID *id, StructRNA *srna, void *data) { tRKS_DSource *ds; @@ -857,7 +860,7 @@ void ANIM_relative_keyingset_add_source (ListBase *dsources, ID *id, StructRNA * * * Returns 0 if succeeded, otherwise an error code: eModifyKey_Returns */ -short ANIM_validate_keyingset (bContext *C, ListBase *dsources, KeyingSet *ks) +short ANIM_validate_keyingset(bContext *C, ListBase *dsources, KeyingSet *ks) { /* sanity check */ if (ks == NULL) @@ -905,7 +908,7 @@ short ANIM_validate_keyingset (bContext *C, ListBase *dsources, KeyingSet *ks) * by the KeyingSet. This takes into account many of the different combinations of using KeyingSets. * Returns the number of channels that keyframes were added to */ -int ANIM_apply_keyingset (bContext *C, ListBase *dsources, bAction *act, KeyingSet *ks, short mode, float cfra) +int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSet *ks, short mode, float cfra) { Scene *scene= CTX_data_scene(C); ReportList *reports = CTX_wm_reports(C); diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 13239f87e65..72d261ec187 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -63,6 +63,7 @@ void ARMATURE_OT_select_all(struct wmOperatorType *ot); void ARMATURE_OT_select_inverse(struct wmOperatorType *ot); void ARMATURE_OT_select_hierarchy(struct wmOperatorType *ot); void ARMATURE_OT_select_linked(struct wmOperatorType *ot); +void ARMATURE_OT_select_similar(struct wmOperatorType *ot); void ARMATURE_OT_delete(struct wmOperatorType *ot); void ARMATURE_OT_duplicate(struct wmOperatorType *ot); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 21b97188522..aeecbc1fd28 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -69,6 +69,7 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_select_inverse); WM_operatortype_append(ARMATURE_OT_select_hierarchy); WM_operatortype_append(ARMATURE_OT_select_linked); + WM_operatortype_append(ARMATURE_OT_select_similar); WM_operatortype_append(ARMATURE_OT_delete); WM_operatortype_append(ARMATURE_OT_duplicate); @@ -261,6 +262,8 @@ void ED_keymap_armature(wmKeyConfig *keyconf) RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD); RNA_boolean_set(kmi->ptr, "extend", TRUE); + WM_keymap_add_item(keymap, "ARMATURE_OT_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_select_linked", LKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index cd698bbf09f..a2e95622bcf 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -42,6 +42,7 @@ #include "DNA_armature_types.h" #include "DNA_constraint_types.h" #include "DNA_meshdata_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" #include "MEM_guardedalloc.h" @@ -534,7 +535,7 @@ void ED_armature_apply_transform(Object *ob, float mat[4][4]) /* exported for use in editors/object/ */ /* 0 == do center, 1 == center new, 2 == center cursor */ -void docenter_armature (Scene *scene, Object *ob, float cursor[3], int centermode, int around) +void docenter_armature(Scene *scene, Object *ob, float cursor[3], int centermode, int around) { Object *obedit= scene->obedit; // XXX get from context EditBone *ebone; @@ -610,7 +611,7 @@ static int editbone_unique_check(void *arg, const char *name) return dupli && dupli != data->bone; } -void unique_editbone_name (ListBase *edbo, char *name, EditBone *bone) +void unique_editbone_name(ListBase *edbo, char *name, EditBone *bone) { struct {ListBase *lb; void *bone;} data; data.lb= edbo; @@ -680,7 +681,7 @@ static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op) * 2. remove this from the 'visual' y-rotation */ { - float premat[3][3], imat[3][3],pmat[3][3], tmat[3][3]; + float premat[3][3], imat[3][3], pmat[3][3], tmat[3][3]; float delta[3], eul[3]; /* obtain new auto y-rotation */ @@ -693,7 +694,7 @@ static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op) /* remove auto from visual and get euler rotation */ mul_m3_m3m3(tmat, imat, pmat); - mat3_to_eul( eul,tmat); + mat3_to_eul(eul, tmat); /* just use this euler-y as new roll value */ curbone->roll= eul[1]; @@ -726,7 +727,7 @@ static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_armature_apply (wmOperatorType *ot) +void POSE_OT_armature_apply(wmOperatorType *ot) { /* identifiers */ ot->name = "Apply Pose as Rest Pose"; @@ -755,7 +756,8 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op) * * TODO, loop over children before parents if multiple bones * at once are to be predictable*/ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { float delta_mat[4][4]; /* chan_mat already contains the delta transform from rest pose to pose-mode pose @@ -776,7 +778,7 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op) return OPERATOR_FINISHED; } -void POSE_OT_visual_transform_apply (wmOperatorType *ot) +void POSE_OT_visual_transform_apply(wmOperatorType *ot) { /* identifiers */ ot->name = "Apply Visual Transform to Pose"; @@ -921,7 +923,8 @@ int join_armature_exec(bContext *C, wmOperator *UNUSED(op)) pose= ob->pose; ob->mode &= ~OB_MODE_POSE; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) + { if ((base->object->type==OB_ARMATURE) && (base->object!=ob)) { bArmature *curarm= base->object->data; @@ -1192,7 +1195,8 @@ static int separate_armature_exec (bContext *C, wmOperator *UNUSED(op)) /* 1) only edit-base selected */ // TODO: use context iterators for this? - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (base->object==obedit) base->flag |= 1; else base->flag &= ~1; } @@ -1239,7 +1243,7 @@ static int separate_armature_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ARMATURE_OT_separate (wmOperatorType *ot) +void ARMATURE_OT_separate(wmOperatorType *ot) { /* identifiers */ ot->name = "Separate Bones"; @@ -2285,7 +2289,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d; bArmature *arm; EditBone *ebone, *newbone, *flipbone; - float *curs, mat[3][3],imat[3][3]; + float *curs, mat[3][3], imat[3][3]; int a, to_root= 0; Object *obedit; Scene *scene; @@ -2815,7 +2819,8 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* loop over all bones, and only consider if visible */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + { if (!(ebone->flag & BONE_CONNECTED) && (ebone->flag & BONE_ROOTSEL)) fill_add_joint(ebone, 0, &points); if (ebone->flag & BONE_TIPSEL) @@ -2944,7 +2949,7 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_fill (wmOperatorType *ot) +void ARMATURE_OT_fill(wmOperatorType *ot) { /* identifiers */ ot->name = "Fill Between Joints"; @@ -3123,7 +3128,7 @@ static int armature_merge_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_merge (wmOperatorType *ot) +void ARMATURE_OT_merge(wmOperatorType *ot) { static EnumPropertyItem merge_types[] = { {1, "WITHIN_CHAIN", 0, "Within Chains", ""}, @@ -3457,7 +3462,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "name", name); - copy_v3_v3(curs, give_cursor(CTX_data_scene(C),CTX_wm_view3d(C))); + copy_v3_v3(curs, give_cursor(CTX_data_scene(C), CTX_wm_view3d(C))); /* Get inverse point for head and orientation for tail */ invert_m4_m4(obedit->imat, obedit->obmat); @@ -3528,7 +3533,8 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op) /* loop over all editable bones */ // XXX the old code did this in reverse order though! - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { for (i=numcuts+1; i>1; i--) { /* compute cut ratio first */ float cutratio= 1.0f / (float)i; @@ -3816,7 +3822,8 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op) */ /* parent selected bones to the active one */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) bone_connect_to_new_parent(arm->edbo, ebone, actbone, val); @@ -3841,7 +3848,8 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *UNUSED(op), wmEve uiLayout *layout= uiPupMenuLayout(pup); int allchildbones = 0; - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { if (ebone != actbone) { if (ebone->parent != actbone) allchildbones= 1; } @@ -3900,7 +3908,8 @@ static int armature_parent_clear_exec(bContext *C, wmOperator *op) bArmature *arm= (bArmature *)ob->data; int val = RNA_enum_get(op->ptr, "type"); - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { editbone_clear_parent(ebone, val); } CTX_DATA_END; @@ -3936,7 +3945,8 @@ void ARMATURE_OT_parent_clear(wmOperatorType *ot) static int armature_select_inverse_exec(bContext *C, wmOperator *UNUSED(op)) { /* Set the flags */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { /* select bone */ @@ -3978,7 +3988,8 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { switch (action) { @@ -4027,6 +4038,191 @@ void ARMATURE_OT_select_all(wmOperatorType *ot) WM_operator_properties_select_all(ot); } +enum { + SIMEDBONE_LENGTH = 1, + SIMEDBONE_DIRECTION, + SIMEDBONE_PREFIX, + SIMEDBONE_SUFFIX, + SIMEDBONE_LAYER +}; + +static EnumPropertyItem prop_similar_types[] = { + {SIMEDBONE_LENGTH, "LENGTH", 0, "Length", ""}, + {SIMEDBONE_DIRECTION, "DIRECTION", 0, "Direction (Y axis)", ""}, + {SIMEDBONE_PREFIX, "PREFIX", 0, "Prefix", ""}, + {SIMEDBONE_SUFFIX, "SUFFIX", 0, "Suffix", ""}, + {SIMEDBONE_LAYER, "LAYER", 0, "Layer", ""}, + {0, NULL, 0, NULL, NULL} +}; + +/* could be used in more places */ +static void ED_armature_edit_bone_select(EditBone *ebone) +{ + BLI_assert((ebone->flag & BONE_UNSELECTABLE) == 0); + ebone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + + if ((ebone->flag & BONE_CONNECTED) && (ebone->parent != NULL)) { + ebone->parent->flag |= BONE_TIPSEL; + } +} + +static void select_similar_length(bArmature *arm, EditBone *ebone_act, const float thresh) +{ + EditBone *ebone; + + /* thresh is always relative to current length */ + const float len_min = ebone_act->length / (1.0f + thresh); + const float len_max = ebone_act->length * (1.0f + thresh); + + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE) == 0) { + if ((ebone->length >= len_min) && + (ebone->length <= len_max)) + { + ED_armature_edit_bone_select(ebone); + } + } + } +} + +static void select_similar_direction(bArmature *arm, EditBone *ebone_act, const float thresh) +{ + EditBone *ebone; + float dir_act[3]; + sub_v3_v3v3(dir_act, ebone_act->head, ebone_act->tail); + + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE) == 0) { + float dir[3]; + sub_v3_v3v3(dir, ebone->head, ebone->tail); + + if (angle_v3v3(dir_act, dir) / (float)M_PI < thresh) { + ED_armature_edit_bone_select(ebone); + } + } + } +} + +static void select_similar_layer(bArmature *arm, EditBone *ebone_act) +{ + EditBone *ebone; + + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE) == 0) { + if (ebone->layer & ebone_act->layer) { + ED_armature_edit_bone_select(ebone); + } + } + } +} + +static void select_similar_prefix(bArmature *arm, EditBone *ebone_act) +{ + EditBone *ebone; + + char body_tmp[MAX_VGROUP_NAME]; + char prefix_act[MAX_VGROUP_NAME]; + + BKE_deform_split_prefix(ebone_act->name, prefix_act, body_tmp); + + if (prefix_act[0] == '\0') + return; + + /* Find matches */ + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE) == 0) { + char prefix_other[MAX_VGROUP_NAME]; + BKE_deform_split_prefix(ebone->name, prefix_other, body_tmp); + if (!strcmp(prefix_act, prefix_other)) { + ED_armature_edit_bone_select(ebone); + } + } + } +} + +static void select_similar_suffix(bArmature *arm, EditBone *ebone_act) +{ + EditBone *ebone; + + char body_tmp[MAX_VGROUP_NAME]; + char suffix_act[MAX_VGROUP_NAME]; + + BKE_deform_split_suffix(ebone_act->name, body_tmp, suffix_act); + + if (suffix_act[0] == '\0') + return; + + /* Find matches */ + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE) == 0) { + char suffix_other[MAX_VGROUP_NAME]; + BKE_deform_split_suffix(ebone->name, body_tmp, suffix_other); + if (!strcmp(suffix_act, suffix_other)) { + ED_armature_edit_bone_select(ebone); + } + } + } +} + +static int armature_select_similar_exec(bContext *C, wmOperator *op) +{ + Object *obedit = CTX_data_edit_object(C); + bArmature *arm = obedit->data; + EditBone *ebone_act = CTX_data_active_bone(C); + + /* Get props */ + int type = RNA_enum_get(op->ptr, "type"); + float thresh = RNA_float_get(op->ptr, "threshold"); + + /* Check for active bone */ + if (ebone_act == NULL) { + BKE_report(op->reports, RPT_ERROR, "Operation requires an Active Bone"); + return OPERATOR_CANCELLED; + } + + switch (type) { + case SIMEDBONE_LENGTH: + select_similar_length(arm, ebone_act, thresh); + break; + case SIMEDBONE_DIRECTION: + select_similar_direction(arm, ebone_act, thresh); + break; + case SIMEDBONE_PREFIX: + select_similar_prefix(arm, ebone_act); + break; + case SIMEDBONE_SUFFIX: + select_similar_suffix(arm, ebone_act); + break; + case SIMEDBONE_LAYER: + select_similar_layer(arm, ebone_act); + break; + } + + WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + + return OPERATOR_FINISHED; +} + +void ARMATURE_OT_select_similar(wmOperatorType *ot) { + + /* identifiers */ + ot->name = "Select Similar"; + ot->idname = "ARMATURE_OT_select_similar"; + + /* callback functions */ + ot->invoke = WM_menu_invoke; + ot->exec = armature_select_similar_exec; + ot->poll = ED_operator_editarmature; + ot->description = "Select similar bones by property types"; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + ot->prop = RNA_def_enum(ot->srna, "type", prop_similar_types, 0, "Type", ""); + RNA_def_float(ot->srna, "threshold", 0.1f, 0.0f, 1.0f, "Threshold", "", 0.0f, 1.0f); +} + /* ********************* select hierarchy operator ************** */ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op) @@ -4212,7 +4408,8 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op) */ /* align selected bones to the active one */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) bone_align_to_bone(arm->edbo, ebone, actbone); @@ -4345,7 +4542,7 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor * test==2: only clear active tag * test==3: swap select (no test / inverse selection status of all independently) */ -void ED_pose_deselectall (Object *ob, int test) +void ED_pose_deselectall(Object *ob, int test) { bArmature *arm= ob->data; bPoseChannel *pchan; @@ -4440,7 +4637,7 @@ static int vgroup_add_unique_bone_cb(Object *ob, Bone *bone, void *UNUSED(ptr)) * If such a vertex group aleady exist the routine exits. */ if (!(bone->flag & BONE_NO_DEFORM)) { - if (!defgroup_find_name(ob,bone->name)) { + if (!defgroup_find_name(ob, bone->name)) { ED_vgroup_add_name(ob, bone->name); return 1; } @@ -4828,7 +5025,7 @@ static void pchan_clear_rot(bPoseChannel *pchan) quat_to_eul(oldeul, quat1); } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { - axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,pchan->rotAxis, pchan->rotAngle); + axis_angle_to_eulO(oldeul, EULER_ORDER_DEFAULT, pchan->rotAxis, pchan->rotAngle); } else { copy_v3_v3(oldeul, pchan->eul); @@ -4855,7 +5052,7 @@ static void pchan_clear_rot(bPoseChannel *pchan) } } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { - eulO_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,eul, EULER_ORDER_DEFAULT); + eulO_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, eul, EULER_ORDER_DEFAULT); } else { copy_v3_v3(pchan->eul, eul); @@ -4901,7 +5098,8 @@ static int pose_clear_transform_generic_exec(bContext *C, wmOperator *op, } /* only clear relevant transforms for selected bones */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { /* run provided clearing function */ clear_func(pchan); @@ -5042,7 +5240,8 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { /* select pchan only if selectable, but deselect works always */ switch (action) { case SEL_SELECT: @@ -5094,7 +5293,7 @@ void POSE_OT_select_all(wmOperatorType *ot) static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob= object_pose_armature_get(CTX_data_active_object(C)); - bPoseChannel *pchan,*parent; + bPoseChannel *pchan, *parent; /* Determine if there is an active bone */ pchan=CTX_data_active_pose_bone(C); @@ -5431,7 +5630,8 @@ static int armature_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { flip_side_name(newname, ebone->name, TRUE); // 1 = do strip off number extensions ED_armature_bone_rename(arm, ebone->name, newname); } @@ -5446,7 +5646,7 @@ static int armature_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ARMATURE_OT_flip_names (wmOperatorType *ot) +void ARMATURE_OT_flip_names(wmOperatorType *ot) { /* identifiers */ ot->name = "Flip Names"; @@ -5475,7 +5675,8 @@ static int armature_autoside_names_exec (bContext *C, wmOperator *op) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { BLI_strncpy(newname, ebone->name, sizeof(newname)); if (bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis])) ED_armature_bone_rename(arm, ebone->name, newname); @@ -5491,7 +5692,7 @@ static int armature_autoside_names_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_autoside_names (wmOperatorType *ot) +void ARMATURE_OT_autoside_names(wmOperatorType *ot) { static EnumPropertyItem axis_items[]= { {0, "XAXIS", 0, "X-Axis", "Left/Right"}, @@ -5679,7 +5880,7 @@ float arcLengthRatio(ReebArc *arc) if (arc->bcount > 0) { /* Add the embedding */ - for ( i = 1; i < arc->bcount; i++) { + for (i = 1; i < arc->bcount; i++) { embedLength += len_v3v3(arc->buckets[i - 1].p, arc->buckets[i].p); } /* Add head and tail -> embedding vectors */ @@ -5737,8 +5938,8 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg) /* Copy orientation from source */ copy_v3_v3(dst->loc, src->obmat[3]); - mat4_to_eul( dst->rot,src->obmat); - mat4_to_size( dst->size,src->obmat); + mat4_to_eul(dst->rot, src->obmat); + mat4_to_size(dst->size, src->obmat); where_is_object(scene, obedit); diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index 77b035024a9..a97823ebcc8 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -2555,7 +2555,8 @@ void BIF_retargetArmature(bContext *C) printf("Reeb Graph created\n"); - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) + { Object *ob = base->object; if (ob->type==OB_ARMATURE) { diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 4c7ab833e69..09b0226c58c 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -1569,12 +1569,12 @@ static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, S mval[1] = vi[1]; ED_view3d_win_to_segment_clip(ar, v3d, mval, ray_start, ray_end); - isect_line_line_v3( stk->points[s_i].p, - stk->points[s_i + 1].p, - ray_start, - ray_end, - isect->p, - vi); + isect_line_line_v3(stk->points[s_i].p, + stk->points[s_i + 1].p, + ray_start, + ray_end, + isect->p, + vi); BLI_addtail(list, isect); diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c index 59a7437e753..3828c025bcd 100644 --- a/source/blender/editors/armature/meshlaplacian.c +++ b/source/blender/editors/armature/meshlaplacian.c @@ -584,7 +584,7 @@ static void heat_calc_vnormals(LaplacianSystem *sys) v2= (*face)[1]; v3= (*face)[2]; - normal_tri_v3( fnor,sys->verts[v1], sys->verts[v2], sys->verts[v3]); + normal_tri_v3(fnor, sys->verts[v1], sys->verts[v2], sys->verts[v3]); add_v3_v3(sys->heat.vnors[v1], fnor); add_v3_v3(sys->heat.vnors[v2], fnor); @@ -945,7 +945,7 @@ void rigid_deform_iteration() } } - /* solve for positions, for X,Y and Z separately */ + /* solve for positions, for X, Y and Z separately */ for (i=0; i<3; i++) { laplacian_begin_solve(sys, i); @@ -1069,7 +1069,7 @@ void rigid_deform_end(int cancel) #define MESHDEFORM_MIN_INFLUENCE 0.0005f static int MESHDEFORM_OFFSET[7][3] = - {{0,0,0}, {1,0,0}, {-1,0,0}, {0,1,0}, {0,-1,0}, {0,0,1}, {0,0,-1}}; + {{0, 0, 0}, {1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}}; typedef struct MDefBoundIsect { float co[3], uvw[4]; @@ -1128,10 +1128,10 @@ typedef struct MeshDeformIsect { /* our own triangle intersection, so we can fully control the epsilons and * prevent corner case from going wrong*/ static int meshdeform_tri_intersect(float orig[3], float end[3], float vert0[3], - float vert1[3], float vert2[3], float *isectco, float *uvw) + float vert1[3], float vert2[3], float *isectco, float *uvw) { float edge1[3], edge2[3], tvec[3], pvec[3], qvec[3]; - float det,inv_det, u, v, dir[3], isectdir[3]; + float det, inv_det, u, v, dir[3], isectdir[3]; sub_v3_v3v3(dir, end, orig); @@ -1208,16 +1208,16 @@ static int meshdeform_intersect(MeshDeformBind *mdb, MeshDeformIsect *isec) hit = meshdeform_tri_intersect(isec->start, end, face[0], face[1], face[2], co, uvw); if (hit) { - normal_tri_v3( nor,face[0], face[1], face[2]); + normal_tri_v3(nor, face[0], face[1], face[2]); } else { hit= meshdeform_tri_intersect(isec->start, end, face[0], face[2], face[3], co, uvw); - normal_tri_v3( nor,face[0], face[2], face[3]); + normal_tri_v3(nor, face[0], face[2], face[3]); } } else { hit= meshdeform_tri_intersect(isec->start, end, face[0], face[1], face[2], co, uvw); - normal_tri_v3( nor,face[0], face[1], face[2]); + normal_tri_v3(nor, face[0], face[1], face[2]); } if (hit) { @@ -1281,7 +1281,7 @@ static MDefBoundIsect *meshdeform_ray_tree_intersect(MeshDeformBind *mdb, float copy_v3_v3(vert[1], cagecos[mface->v2]); copy_v3_v3(vert[2], cagecos[mface->v3]); if (mface->v4) copy_v3_v3(vert[3], cagecos[mface->v4]); - interp_weights_poly_v3( isect->uvw,vert, isect->nvert, isect->co); + interp_weights_poly_v3(isect->uvw, vert, isect->nvert, isect->co); return isect; } diff --git a/source/blender/editors/armature/poseSlide.c b/source/blender/editors/armature/poseSlide.c index be520d1e8a0..40dc0a7cd36 100644 --- a/source/blender/editors/armature/poseSlide.c +++ b/source/blender/editors/armature/poseSlide.c @@ -433,7 +433,7 @@ static void pose_slide_apply_quat (tPoseSlideOp *pso, tPChanFCurveLink *pfl) /* perform this blending several times until a satisfactory result is reached */ while (iters-- > 0) { /* calculate the interpolation between the endpoints */ - interp_qt_qtqt(quat_interp, quat_prev, quat_next, (cframe-pso->prevFrame) / (pso->nextFrame-pso->prevFrame) ); + interp_qt_qtqt(quat_interp, quat_prev, quat_next, (cframe-pso->prevFrame) / (pso->nextFrame-pso->prevFrame)); /* make a copy of the original rotation */ copy_qt_qt(quat_orig, pchan->quat); @@ -759,7 +759,7 @@ static int pose_slide_push_exec (bContext *C, wmOperator *op) return pose_slide_exec_common(C, op, pso); } -void POSE_OT_push (wmOperatorType *ot) +void POSE_OT_push(wmOperatorType *ot) { /* identifiers */ ot->name = "Push Pose"; @@ -816,7 +816,7 @@ static int pose_slide_relax_exec (bContext *C, wmOperator *op) return pose_slide_exec_common(C, op, pso); } -void POSE_OT_relax (wmOperatorType *ot) +void POSE_OT_relax(wmOperatorType *ot) { /* identifiers */ ot->name = "Relax Pose"; @@ -873,7 +873,7 @@ static int pose_slide_breakdown_exec (bContext *C, wmOperator *op) return pose_slide_exec_common(C, op, pso); } -void POSE_OT_breakdown (wmOperatorType *ot) +void POSE_OT_breakdown(wmOperatorType *ot) { /* identifiers */ ot->name = "Pose Breakdowner"; @@ -1228,7 +1228,7 @@ static int pose_propagate_exec (bContext *C, wmOperator *op) /* --------------------------------- */ -void POSE_OT_propagate (wmOperatorType *ot) +void POSE_OT_propagate(wmOperatorType *ot) { static EnumPropertyItem terminate_items[]= { {POSE_PROPAGATE_SMART_HOLDS, "WHILE_HELD", 0, "While Held", "Propagate pose to all keyframes after current frame that don't change (Default behavior)"}, diff --git a/source/blender/editors/armature/poseUtils.c b/source/blender/editors/armature/poseUtils.c index 88d219137f7..3c855ff96e6 100644 --- a/source/blender/editors/armature/poseUtils.c +++ b/source/blender/editors/armature/poseUtils.c @@ -126,12 +126,13 @@ static void fcurves_to_pchan_links_get (ListBase *pfLinks, Object *ob, bAction * /* get sets of F-Curves providing transforms for the bones in the Pose */ -void poseAnim_mapping_get (bContext *C, ListBase *pfLinks, Object *ob, bAction *act) +void poseAnim_mapping_get(bContext *C, ListBase *pfLinks, Object *ob, bAction *act) { /* for each Pose-Channel which gets affected, get the F-Curves for that channel * and set the relevant transform flags... */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { fcurves_to_pchan_links_get(pfLinks, ob, act, pchan); } CTX_DATA_END; @@ -140,7 +141,8 @@ void poseAnim_mapping_get (bContext *C, ListBase *pfLinks, Object *ob, bAction * * i.e. if nothing selected, do whole pose */ if (pfLinks->first == NULL) { - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) + { fcurves_to_pchan_links_get(pfLinks, ob, act, pchan); } CTX_DATA_END; @@ -148,7 +150,7 @@ void poseAnim_mapping_get (bContext *C, ListBase *pfLinks, Object *ob, bAction * } /* free F-Curve <-> PoseChannel links */ -void poseAnim_mapping_free (ListBase *pfLinks) +void poseAnim_mapping_free(ListBase *pfLinks) { tPChanFCurveLink *pfl, *pfln=NULL; @@ -176,7 +178,7 @@ void poseAnim_mapping_free (ListBase *pfLinks) /* ------------------------- */ /* helper for apply() / reset() - refresh the data */ -void poseAnim_mapping_refresh (bContext *C, Scene *scene, Object *ob) +void poseAnim_mapping_refresh(bContext *C, Scene *scene, Object *ob) { bArmature *arm= (bArmature *)ob->data; @@ -194,7 +196,7 @@ void poseAnim_mapping_refresh (bContext *C, Scene *scene, Object *ob) } /* reset changes made to current pose */ -void poseAnim_mapping_reset (ListBase *pfLinks) +void poseAnim_mapping_reset(ListBase *pfLinks) { tPChanFCurveLink *pfl; @@ -217,7 +219,7 @@ void poseAnim_mapping_reset (ListBase *pfLinks) } /* perform autokeyframing after changes were made + confirmed */ -void poseAnim_mapping_autoKeyframe (bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float cframe) +void poseAnim_mapping_autoKeyframe(bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float cframe) { /* insert keyframes as necessary if autokeyframing */ if (autokeyframe_cfra_can_key(scene, &ob->id)) { diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index ea2b28380e0..8791a345489 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -232,7 +232,7 @@ static int poselib_new_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSELIB_OT_new (wmOperatorType *ot) +void POSELIB_OT_new(wmOperatorType *ot) { /* identifiers */ ot->name = "New Pose Library"; @@ -267,7 +267,7 @@ static int poselib_unlink_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSELIB_OT_unlink (wmOperatorType *ot) +void POSELIB_OT_unlink(wmOperatorType *ot) { /* identifiers */ ot->name = "Unlink Pose Library"; @@ -353,7 +353,7 @@ static int poselib_sanitise_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSELIB_OT_action_sanitise (wmOperatorType *ot) +void POSELIB_OT_action_sanitise(wmOperatorType *ot) { /* identifiers */ ot->name = "Sanitise Pose Library Action"; @@ -483,7 +483,7 @@ static int poselib_add_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSELIB_OT_pose_add (wmOperatorType *ot) +void POSELIB_OT_pose_add(wmOperatorType *ot) { /* identifiers */ ot->name = "PoseLib Add Pose"; @@ -597,7 +597,7 @@ static int poselib_remove_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSELIB_OT_pose_remove (wmOperatorType *ot) +void POSELIB_OT_pose_remove(wmOperatorType *ot) { PropertyRNA *prop; @@ -684,7 +684,7 @@ static int poselib_rename_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSELIB_OT_pose_rename (wmOperatorType *ot) +void POSELIB_OT_pose_rename(wmOperatorType *ot) { PropertyRNA *prop; static EnumPropertyItem prop_poses_dummy_types[] = { @@ -1622,7 +1622,7 @@ static int poselib_preview_exec (bContext *C, wmOperator *op) return poselib_preview_exit(C, op); } -void POSELIB_OT_browse_interactive (wmOperatorType *ot) +void POSELIB_OT_browse_interactive(wmOperatorType *ot) { /* identifiers */ ot->name = "PoseLib Browse Poses"; @@ -1648,7 +1648,7 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot) /* RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f); */ } -void POSELIB_OT_apply_pose (wmOperatorType *ot) +void POSELIB_OT_apply_pose(wmOperatorType *ot) { /* identifiers */ ot->name = "Apply Pose Library Pose"; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index f54cdb330e3..8a2af14e6f3 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -197,26 +197,57 @@ void ED_pose_recalculate_paths(Scene *scene, Object *ob) BLI_freelistN(&targets); } +/* show popup to determine settings */ +static int pose_calculate_paths_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) +{ + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); + + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + + /* set default settings from existing/stored settings */ + { + bAnimVizSettings *avs = &ob->pose->avs; + PointerRNA avs_ptr; + + RNA_int_set(op->ptr, "start_frame", avs->path_sf); + RNA_int_set(op->ptr, "end_frame", avs->path_ef); + + RNA_pointer_create(NULL, &RNA_AnimVizMotionPaths, avs, &avs_ptr); + RNA_enum_set(op->ptr, "bake_location", RNA_enum_get(&avs_ptr, "bake_location")); + } + + /* show popup dialog to allow editing of range... */ + // FIXME: hardcoded dimensions here are just arbitrary + return WM_operator_props_dialog_popup(C, op, 200, 200); +} + /* For the object with pose/action: create path curves for selected bones * This recalculates the WHOLE path within the pchan->pathsf and pchan->pathef range */ -static int pose_calculate_paths_exec (bContext *C, wmOperator *op) +static int pose_calculate_paths_exec(bContext *C, wmOperator *op) { - ScrArea *sa= CTX_wm_area(C); + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); Scene *scene= CTX_data_scene(C); - Object *ob; - /* since this call may also be used from the buttons window, we need to check for where to get the object */ - if (sa->spacetype == SPACE_BUTS) - ob= ED_object_context(C); - else - ob= object_pose_armature_get(CTX_data_active_object(C)); - if (ELEM(NULL, ob, ob->pose)) return OPERATOR_CANCELLED; + /* grab baking settings from operator settings */ + { + bAnimVizSettings *avs = &ob->pose->avs; + PointerRNA avs_ptr; + + avs->path_sf = RNA_int_get(op->ptr, "start_frame"); + avs->path_ef = RNA_int_get(op->ptr, "end_frame"); + + RNA_pointer_create(NULL, &RNA_AnimVizMotionPaths, avs, &avs_ptr); + RNA_enum_set(&avs_ptr, "bake_location", RNA_enum_get(op->ptr, "bake_location")); + } + /* set up path data for bones being calculated */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { /* verify makes sure that the selected bone has a bone with the appropriate settings */ animviz_verify_motionpaths(op->reports, scene, ob, pchan); } @@ -227,12 +258,12 @@ static int pose_calculate_paths_exec (bContext *C, wmOperator *op) ED_pose_recalculate_paths(scene, ob); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); return OPERATOR_FINISHED; } -void POSE_OT_paths_calculate (wmOperatorType *ot) +void POSE_OT_paths_calculate(wmOperatorType *ot) { /* identifiers */ ot->name = "Calculate Bone Paths"; @@ -240,11 +271,22 @@ void POSE_OT_paths_calculate (wmOperatorType *ot) ot->description = "Calculate paths for the selected bones"; /* api callbacks */ + ot->invoke = pose_calculate_paths_invoke; ot->exec = pose_calculate_paths_exec; ot->poll = ED_operator_posemode; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_int(ot->srna, "start_frame", 1, MINAFRAME, MAXFRAME, "Start", + "First frame to calculate bone paths on", MINFRAME, MAXFRAME/2.0); + RNA_def_int(ot->srna, "end_frame", 250, MINAFRAME, MAXFRAME, "End", + "Last frame to calculate bone paths on", MINFRAME, MAXFRAME/2.0); + + RNA_def_enum(ot->srna, "bake_location", motionpath_bake_location_items, 0, + "Bake Location", + "Which point on the bones is used when calculating paths"); } /* --------- */ @@ -278,14 +320,7 @@ static void ED_pose_clear_paths(Object *ob) /* operator callback for this */ static int pose_clear_paths_exec (bContext *C, wmOperator *UNUSED(op)) { - ScrArea *sa= CTX_wm_area(C); - Object *ob; - - /* since this call may also be used from the buttons window, we need to check for where to get the object */ - if (sa->spacetype == SPACE_BUTS) - ob= ED_object_context(C); - else - ob= object_pose_armature_get(CTX_data_active_object(C)); + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); /* only continue if there's an object */ if (ELEM(NULL, ob, ob->pose)) @@ -295,12 +330,12 @@ static int pose_clear_paths_exec (bContext *C, wmOperator *UNUSED(op)) ED_pose_clear_paths(ob); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); return OPERATOR_FINISHED; } -void POSE_OT_paths_clear (wmOperatorType *ot) +void POSE_OT_paths_clear(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Bone Paths"; @@ -323,7 +358,8 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op bConstraint *con; int found= 0; - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { if (pchan->bone->flag & BONE_SELECTED) { for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); @@ -385,7 +421,8 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) int add_to_sel = RNA_boolean_get(op->ptr, "extend"); int found= 0; - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { curbone= pchan->bone; if ((curbone->flag & BONE_UNSELECTABLE)==0) { @@ -502,7 +539,8 @@ static short pose_select_same_group (bContext *C, Object *ob, short extend) */ group_flags= MEM_callocN(numGroups+1, "pose_select_same_group"); - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { /* keep track of group as group to use later? */ if (pchan->bone->flag & BONE_SELECTED) { group_flags[pchan->agrp_index] = 1; @@ -518,7 +556,8 @@ static short pose_select_same_group (bContext *C, Object *ob, short extend) /* small optimization: only loop through bones a second time if there are any groups tagged */ if (tagged) { /* only if group matches (and is not selected or current bone) */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { /* check if the group used by this bone is counted */ if (group_flags[pchan->agrp_index]) { @@ -547,7 +586,8 @@ static short pose_select_same_layer (bContext *C, Object *ob, short extend) return 0; /* figure out what bones are selected */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { /* keep track of layers to use later? */ if (pchan->bone->flag & BONE_SELECTED) layers |= pchan->bone->layer; @@ -561,7 +601,8 @@ static short pose_select_same_layer (bContext *C, Object *ob, short extend) return 0; /* select bones that are on same layers as layers flag */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { /* if bone is on a suitable layer, and the bone can have its selection changed, select it */ if ((layers & pchan->bone->layer) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) { pchan->bone->flag |= BONE_SELECTED; @@ -591,7 +632,8 @@ static int pose_select_same_keyingset(bContext *C, Object *ob, short extend) /* if not extending selection, deselect all selected first */ if (extend == 0) { - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) pchan->bone->flag &= ~BONE_SELECTED; } @@ -665,7 +707,7 @@ static int pose_select_grouped_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -void POSE_OT_select_grouped (wmOperatorType *ot) +void POSE_OT_select_grouped(wmOperatorType *ot) { static EnumPropertyItem prop_select_grouped_types[] = { {0, "LAYER", 0, "Layer", "Shared layers"}, @@ -792,7 +834,7 @@ static void pose_copy_menu(Scene *scene) if (nr != 5) { for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ( (arm->layer & pchan->bone->layer) && + if ((arm->layer & pchan->bone->layer) && (pchan->bone->flag & BONE_SELECTED) && (pchan != pchanact) ) { @@ -861,13 +903,13 @@ static void pose_copy_menu(Scene *scene) float tmp_quat[4]; /* need to convert to quat first (in temp var)... */ - mat4_to_quat( tmp_quat,delta_mat); - quat_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,tmp_quat); + mat4_to_quat(tmp_quat, delta_mat); + quat_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, tmp_quat); } else if (pchan->rotmode == ROT_MODE_QUAT) - mat4_to_quat( pchan->quat,delta_mat); + mat4_to_quat(pchan->quat, delta_mat); else - mat4_to_eulO( pchan->eul, pchan->rotmode,delta_mat); + mat4_to_eulO(pchan->eul, pchan->rotmode, delta_mat); } break; case 11: /* Visual Size */ @@ -875,7 +917,7 @@ static void pose_copy_menu(Scene *scene) float delta_mat[4][4], size[4]; armature_mat_pose_to_bone(pchan, pchanact->pose_mat, delta_mat); - mat4_to_size( size,delta_mat); + mat4_to_size(size, delta_mat); copy_v3_v3(pchan->size, size); } } @@ -914,7 +956,7 @@ static void pose_copy_menu(Scene *scene) /* Copy the temo listbase to the selected posebones */ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ( (arm->layer & pchan->bone->layer) && + if ((arm->layer & pchan->bone->layer) && (pchan->bone->flag & BONE_SELECTED) && (pchan!=pchanact) ) { @@ -1050,9 +1092,9 @@ static bPoseChannel *pose_bone_do_paste (Object *ob, bPoseChannel *chan, short s else if (pchan->rotmode > 0) { /* quat/axis-angle to euler */ if (chan->rotmode == ROT_MODE_AXISANGLE) - axis_angle_to_eulO( pchan->eul, pchan->rotmode,chan->rotAxis, chan->rotAngle); + axis_angle_to_eulO(pchan->eul, pchan->rotmode, chan->rotAxis, chan->rotAngle); else - quat_to_eulO( pchan->eul, pchan->rotmode,chan->quat); + quat_to_eulO(pchan->eul, pchan->rotmode, chan->quat); } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { /* quat/euler to axis angle */ @@ -1140,7 +1182,7 @@ static int pose_copy_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_copy (wmOperatorType *ot) +void POSE_OT_copy(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy Pose"; @@ -1207,7 +1249,7 @@ static int pose_paste_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_paste (wmOperatorType *ot) +void POSE_OT_paste(wmOperatorType *ot) { PropertyRNA *prop; @@ -1257,7 +1299,7 @@ static int pose_group_add_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_group_add (wmOperatorType *ot) +void POSE_OT_group_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Bone Group"; @@ -1297,7 +1339,7 @@ static int pose_group_remove_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_group_remove (wmOperatorType *ot) +void POSE_OT_group_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Bone Group"; @@ -1395,7 +1437,8 @@ static int pose_group_assign_exec (bContext *C, wmOperator *op) pose_add_group(ob); /* add selected bones to group then */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { pchan->agrp_index= pose->active_group; done= 1; } @@ -1411,7 +1454,7 @@ static int pose_group_assign_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -void POSE_OT_group_assign (wmOperatorType *ot) +void POSE_OT_group_assign(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Selected to Bone Group"; @@ -1448,7 +1491,8 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_CANCELLED; /* find selected bones to remove from all bone groups */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { if (pchan->agrp_index) { pchan->agrp_index= 0; done= 1; @@ -1466,7 +1510,7 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_CANCELLED; } -void POSE_OT_group_unassign (wmOperatorType *ot) +void POSE_OT_group_unassign(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Selected from Bone Groups"; @@ -1650,7 +1694,8 @@ static void pose_group_select(bContext *C, Object *ob, int select) { bPose *pose= ob->pose; - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) + { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { if (select) { if (pchan->agrp_index == pose->active_group) @@ -1688,7 +1733,7 @@ static int pose_group_select_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_group_select (wmOperatorType *ot) +void POSE_OT_group_select(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Bones of Bone Group"; @@ -1726,7 +1771,7 @@ static int pose_group_deselect_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_group_deselect (wmOperatorType *ot) +void POSE_OT_group_deselect(wmOperatorType *ot) { /* identifiers */ ot->name = "Deselect Bone Group"; @@ -1754,7 +1799,8 @@ static int pose_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { char newname[MAXBONENAME]; flip_side_name(newname, pchan->name, TRUE); ED_armature_bone_rename(arm, pchan->name, newname); @@ -1770,7 +1816,7 @@ static int pose_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_flip_names (wmOperatorType *ot) +void POSE_OT_flip_names(wmOperatorType *ot) { /* identifiers */ ot->name = "Flip Names"; @@ -1800,7 +1846,8 @@ static int pose_autoside_names_exec (bContext *C, wmOperator *op) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { BLI_strncpy(newname, pchan->name, sizeof(newname)); if (bone_autoside_name(newname, 1, axis, pchan->bone->head[axis], pchan->bone->tail[axis])) ED_armature_bone_rename(arm, pchan->name, newname); @@ -1816,7 +1863,7 @@ static int pose_autoside_names_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_autoside_names (wmOperatorType *ot) +void POSE_OT_autoside_names(wmOperatorType *ot) { static EnumPropertyItem axis_items[]= { {0, "XAXIS", 0, "X-Axis", "Left/Right"}, @@ -1849,7 +1896,8 @@ static int pose_bone_rotmode_exec (bContext *C, wmOperator *op) int mode = RNA_enum_get(op->ptr, "type"); /* set rotation mode of selected bones */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { pchan->rotmode = mode; } CTX_DATA_END; @@ -1861,7 +1909,7 @@ static int pose_bone_rotmode_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_rotation_mode_set (wmOperatorType *ot) +void POSE_OT_rotation_mode_set(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Rotation Mode"; @@ -1920,7 +1968,7 @@ static int pose_armature_layers_showall_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_layers_show_all (wmOperatorType *ot) +void ARMATURE_OT_layers_show_all(wmOperatorType *ot) { /* identifiers */ ot->name = "Show All Layers"; @@ -1986,7 +2034,7 @@ static int pose_armature_layers_exec (bContext *C, wmOperator *op) } -void POSE_OT_armature_layers (wmOperatorType *ot) +void POSE_OT_armature_layers(wmOperatorType *ot) { /* identifiers */ ot->name = "Change Armature Layers"; @@ -2005,7 +2053,7 @@ void POSE_OT_armature_layers (wmOperatorType *ot) RNA_def_boolean_layer_member(ot->srna, "layers", 32, NULL, "Layer", "Armature layers to make visible"); } -void ARMATURE_OT_armature_layers (wmOperatorType *ot) +void ARMATURE_OT_armature_layers(wmOperatorType *ot) { /* identifiers */ ot->name = "Change Armature Layers"; @@ -2032,7 +2080,8 @@ static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { short bit; /* loop over the bits for this pchan's layers, adding layers where they're needed */ @@ -2065,7 +2114,8 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op) RNA_boolean_get_array(op->ptr, "layers", layers); /* set layers of pchans based on the values set in the operator props */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { /* get pointer for pchan, and write flags this way */ RNA_pointer_create((ID *)ob->data, &RNA_Bone, pchan->bone, &ptr); RNA_boolean_set_array(&ptr, "layers", layers); @@ -2078,7 +2128,7 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void POSE_OT_bone_layers (wmOperatorType *ot) +void POSE_OT_bone_layers(wmOperatorType *ot) { /* identifiers */ ot->name = "Change Bone Layers"; @@ -2105,7 +2155,8 @@ static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *ev int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { short bit; /* loop over the bits for this pchan's layers, adding layers where they're needed */ @@ -2135,7 +2186,8 @@ static int armature_bone_layers_exec (bContext *C, wmOperator *op) RNA_boolean_get_array(op->ptr, "layers", layers); /* set layers of pchans based on the values set in the operator props */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + { /* get pointer for pchan, and write flags this way */ RNA_pointer_create((ID *)arm, &RNA_EditBone, ebone, &ptr); RNA_boolean_set_array(&ptr, "layers", layers); @@ -2148,7 +2200,7 @@ static int armature_bone_layers_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_bone_layers (wmOperatorType *ot) +void ARMATURE_OT_bone_layers(wmOperatorType *ot) { /* identifiers */ ot->name = "Change Bone Layers"; @@ -2177,7 +2229,8 @@ static int pose_flip_quats_exec (bContext *C, wmOperator *UNUSED(op)) KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); /* loop through all selected pchans, flipping and keying (as needed) */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) + { /* only if bone is using quaternion rotation */ if (pchan->rotmode == ROT_MODE_QUAT) { /* quaternions have 720 degree range */ @@ -2195,7 +2248,7 @@ static int pose_flip_quats_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_quaternions_flip (wmOperatorType *ot) +void POSE_OT_quaternions_flip(wmOperatorType *ot) { /* identifiers */ ot->name = "Flip Quats"; @@ -2271,7 +2324,7 @@ static int pose_clear_user_transforms_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void POSE_OT_user_transforms_clear (wmOperatorType *ot) +void POSE_OT_user_transforms_clear(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear User Transforms"; diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index eebdeafcea9..efcbab78884 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -197,7 +197,7 @@ void REEB_freeGraph(ReebGraph *rg) // free arcs arc = rg->arcs.first; - while ( arc ) { + while (arc) { ReebArc *next = arc->next; REEB_freeArc((BArc*)arc); arc = next; @@ -1683,7 +1683,7 @@ int filterSmartReebGraph(ReebGraph *UNUSED(rg), float UNUSED(threshold)) int merging = 0; int total = BLI_ghash_size(arc->faces); float avg_angle = 0; - float avg_vec[3] = {0,0,0}; + float avg_vec[3] = {0, 0, 0}; for (BLI_ghashIterator_init(&ghi, arc->faces); !BLI_ghashIterator_isDone(&ghi); @@ -1873,7 +1873,7 @@ static void finalizeGraph(ReebGraph *rg, char passes, char method) /************************************** WEIGHT SPREADING ***********************************************/ -static int compareVerts( const void* a, const void* b ) +static int compareVerts(const void* a, const void* b) { EditVert *va = *(EditVert**)a; EditVert *vb = *(EditVert**)b; @@ -2090,7 +2090,7 @@ void mergeArcEdges(ReebGraph *rg, ReebArc *aDst, ReebArc *aSrc, MergeDirection d e->arc = aDst; // Edge is stolen by new arc } - BLI_movelisttolist(&aDst->edges , &aSrc->edges); + BLI_movelisttolist(&aDst->edges, &aSrc->edges); } else { for (e = aSrc->edges.first; e; e = e->next) { @@ -3470,18 +3470,18 @@ void REEB_draw() glColor3f(0, 1, 0); glRasterPos3fv(vec); - BMF_DrawString( G.fonts, text); + BMF_DrawString(G.fonts, text); } if (G.scene->toolsettings->skgen_options & SKGEN_DISP_INDEX) { sprintf(text, " %i", arc->head->index); glRasterPos3fv(arc->head->p); - BMF_DrawString( G.fonts, text); + BMF_DrawString(G.fonts, text); sprintf(text, " %i", arc->tail->index); glRasterPos3fv(arc->tail->p); - BMF_DrawString( G.fonts, text); + BMF_DrawString(G.fonts, text); } } glEnable(GL_DEPTH_TEST); diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index e65b4280dc9..09c01c2bf8c 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -108,7 +108,7 @@ void selectend_nurb(Object *obedit, short selfirst, short doswap, short selstatu static void select_adjacent_cp(ListBase *editnurb, short next, short cont, short selstatus); /* still need to eradicate a few :( */ -#define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name) +#define callocstructN(x, y, name) (x*)MEM_callocN((y)* sizeof(x), name) static float nurbcircle[8][2]= { {0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0, 1.0}, @@ -1416,6 +1416,7 @@ void CURVE_OT_separate(wmOperatorType *ot) /* identifiers */ ot->name = "Separate"; ot->idname = "CURVE_OT_separate"; + ot->description = "Separate (partly) selected curves or surfaces into a new object"; /* api callbacks */ ot->exec = separate_exec; @@ -1974,7 +1975,7 @@ static void adduplicateflagNurb(Object *obedit, short flag) } if (BKE_nurb_check_valid_u(newnu)) { if (nu->pntsu==newnu->pntsu && nu->knotsu) { - newnu->knotsu= MEM_dupallocN( nu->knotsu ); + newnu->knotsu= MEM_dupallocN(nu->knotsu); } else { BKE_nurb_knot_calc_u(newnu); @@ -1982,7 +1983,7 @@ static void adduplicateflagNurb(Object *obedit, short flag) } if (BKE_nurb_check_valid_v(newnu)) { if (nu->pntsv==newnu->pntsv && nu->knotsv) { - newnu->knotsv= MEM_dupallocN( nu->knotsv ); + newnu->knotsv= MEM_dupallocN(nu->knotsv); } else { BKE_nurb_knot_calc_v(newnu); @@ -2157,7 +2158,7 @@ static int smooth_exec(bContext *C, wmOperator *UNUSED(op)) for (nu= editnurb->first; nu; nu= nu->next) { if (nu->bezt) { change = 0; - beztOrig = MEM_dupallocN( nu->bezt ); + beztOrig = MEM_dupallocN(nu->bezt); for (bezt=nu->bezt+1, a=1; a<nu->pntsu-1; a++, bezt++) { if (bezt->f2 & SELECT) { for (i=0; i<3; i++) { @@ -2177,7 +2178,7 @@ static int smooth_exec(bContext *C, wmOperator *UNUSED(op)) BKE_nurb_handles_calc(nu); } else if (nu->bp) { - bpOrig = MEM_dupallocN( nu->bp ); + bpOrig = MEM_dupallocN(nu->bp); /* Same as above, keep these the same! */ for (bp=nu->bp+1, a=1; a<nu->pntsu-1; a++, bp++) { if (bp->f1 & SELECT) { @@ -2532,6 +2533,7 @@ void CURVE_OT_de_select_first(wmOperatorType *ot) /* identifiers */ ot->name = "(De)select First"; ot->idname = "CURVE_OT_de_select_first"; + ot->description = "(De)select first of visible part of each Nurb"; /* api cfirstbacks */ ot->exec = de_select_first_exec; @@ -2556,6 +2558,7 @@ void CURVE_OT_de_select_last(wmOperatorType *ot) /* identifiers */ ot->name = "(De)select Last"; ot->idname = "CURVE_OT_de_select_last"; + ot->description = "(De)select last of visible part of each Nurb"; /* api clastbacks */ ot->exec = de_select_last_exec; @@ -2637,6 +2640,7 @@ void CURVE_OT_select_all(wmOperatorType *ot) /* identifiers */ ot->name = "(De)select All"; ot->idname = "CURVE_OT_select_all"; + ot->description = "(De)select all control points"; /* api callbacks */ ot->exec = de_select_all_exec; @@ -2711,6 +2715,7 @@ void CURVE_OT_hide(wmOperatorType *ot) /* identifiers */ ot->name = "Hide Selected"; ot->idname = "CURVE_OT_hide"; + ot->description = "Hide (un)selected control points"; /* api callbacks */ ot->exec = hide_exec; @@ -2771,6 +2776,7 @@ void CURVE_OT_reveal(wmOperatorType *ot) /* identifiers */ ot->name = "Reveal Hidden"; ot->idname = "CURVE_OT_reveal"; + ot->description = "Show again hidden control points"; /* api callbacks */ ot->exec = reveal_exec; @@ -3039,7 +3045,7 @@ static void subdividenurb(Object *obedit, int number_cuts) /* total count of nodes after subdivision */ int tot= ((number_cuts+1)*nu->pntsu-number_cuts)*((number_cuts+1)*nu->pntsv-number_cuts); - bpn=bpnew= MEM_mallocN( tot*sizeof(BPoint), "subdivideNurb4"); + bpn=bpnew= MEM_mallocN(tot*sizeof(BPoint), "subdivideNurb4"); bp= nu->bp; /* first subdivide rows */ for (a=0; a<nu->pntsv; a++) { @@ -3097,7 +3103,7 @@ static void subdividenurb(Object *obedit, int number_cuts) } if (sel) { /* V ! */ - bpn=bpnew= MEM_mallocN( (sel+nu->pntsv)*nu->pntsu*sizeof(BPoint), "subdivideNurb4"); + bpn=bpnew= MEM_mallocN((sel+nu->pntsv)*nu->pntsu*sizeof(BPoint), "subdivideNurb4"); bp= nu->bp; for (a=0; a<nu->pntsv; a++) { for (b=0; b<nu->pntsu; b++) { @@ -3144,7 +3150,7 @@ static void subdividenurb(Object *obedit, int number_cuts) if (sel) { /* U ! */ /* Inserting U points is sort of 'default' Flat curves only get */ /* U points inserted in them. */ - bpn=bpnew= MEM_mallocN( (sel+nu->pntsu)*nu->pntsv*sizeof(BPoint), "subdivideNurb4"); + bpn=bpnew= MEM_mallocN((sel+nu->pntsu)*nu->pntsv*sizeof(BPoint), "subdivideNurb4"); bp= nu->bp; for (a=0; a<nu->pntsv; a++) { for (b=0; b<nu->pntsu; b++) { @@ -3651,7 +3657,7 @@ static void rotate_direction_nurb(Nurb *nu) SWAP(short, nu->flagu, nu->flagv); SWAP(float *, nu->knotsu, nu->knotsv); - switchdirection_knots(nu->knotsv, KNOTSV(nu) ); + switchdirection_knots(nu->knotsv, KNOTSV(nu)); temp= MEM_dupallocN(nu->bp); bp1= nu->bp; @@ -3719,7 +3725,7 @@ static void make_selection_list_nurb(ListBase *editnurb) /* just add the first one */ nus= nbase.first; BLI_remlink(&nbase, nus); - BLI_addtail( &nsortbase, nus); + BLI_addtail(&nsortbase, nus); /* now add, either at head or tail, the closest one */ while (nbase.first) { @@ -4118,6 +4124,7 @@ void CURVE_OT_make_segment(wmOperatorType *ot) /* identifiers */ ot->name = "Make Segment"; ot->idname = "CURVE_OT_make_segment"; + ot->description = "Join two curves by their selected ends"; /* api callbacks */ ot->exec = make_segment_exec; @@ -4224,10 +4231,10 @@ static int spin_nurb(float viewmat[][4], Object *obedit, float *axis, float *cen Curve *cu= (Curve*)obedit->data; ListBase *editnurb= object_editcurve_get(obedit); Nurb *nu; - float si,phi,n[3],q[4],cmat[3][3],tmat[3][3],imat[3][3]; + float si, phi, n[3], q[4], cmat[3][3], tmat[3][3], imat[3][3]; float bmat[3][3], rotmat[3][3], scalemat1[3][3], scalemat2[3][3]; float persmat[3][3], persinv[3][3]; - short a,ok, changed= 0; + short a, ok, changed= 0; copy_m3_m4(persmat, viewmat); invert_m3_m3(persinv, persmat); @@ -4244,7 +4251,7 @@ static int spin_nurb(float viewmat[][4], Object *obedit, float *axis, float *cen q[1]= n[0]*si; q[2]= n[1]*si; q[3]= n[2]*si; - quat_to_mat3( cmat,q); + quat_to_mat3(cmat, q); mul_m3_m3m3(tmat, cmat, bmat); mul_m3_m3m3(rotmat, imat, tmat); @@ -4252,19 +4259,19 @@ static int spin_nurb(float viewmat[][4], Object *obedit, float *axis, float *cen scalemat1[0][0]= M_SQRT2; scalemat1[1][1]= M_SQRT2; - mul_m3_m3m3(tmat,persmat,bmat); - mul_m3_m3m3(cmat,scalemat1,tmat); - mul_m3_m3m3(tmat,persinv,cmat); - mul_m3_m3m3(scalemat1,imat,tmat); + mul_m3_m3m3(tmat, persmat, bmat); + mul_m3_m3m3(cmat, scalemat1, tmat); + mul_m3_m3m3(tmat, persinv, cmat); + mul_m3_m3m3(scalemat1, imat, tmat); unit_m3(scalemat2); - scalemat2[0][0]/= (float)M_SQRT2; - scalemat2[1][1]/= (float)M_SQRT2; + scalemat2[0][0] /= (float)M_SQRT2; + scalemat2[1][1] /= (float)M_SQRT2; - mul_m3_m3m3(tmat,persmat,bmat); - mul_m3_m3m3(cmat,scalemat2,tmat); - mul_m3_m3m3(tmat,persinv,cmat); - mul_m3_m3m3(scalemat2,imat,tmat); + mul_m3_m3m3(tmat, persmat, bmat); + mul_m3_m3m3(cmat, scalemat2, tmat); + mul_m3_m3m3(tmat, persinv, cmat); + mul_m3_m3m3(scalemat2, imat, tmat); ok= 1; @@ -4353,6 +4360,7 @@ void CURVE_OT_spin(wmOperatorType *ot) /* identifiers */ ot->name = "Spin"; ot->idname = "CURVE_OT_spin"; + ot->description = "Extrude selected boundary row around pivot point and current view axis"; /* api callbacks */ ot->exec = spin_exec; @@ -4533,7 +4541,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) } else { mul_v3_m4v3(newbezt->vec[1], imat, location); - sub_v3_v3v3(temp, newbezt->vec[1],temp); + sub_v3_v3v3(temp, newbezt->vec[1], temp); if (bezt_recalc[1]) { const char h1 = bezt_recalc[1]->h1, h2 = bezt_recalc[1]->h2; @@ -4543,8 +4551,8 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) bezt_recalc[1]->h2 = h2; } else { - add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp); - add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp); + add_v3_v3v3(newbezt->vec[0], bezt->vec[0], temp); + add_v3_v3v3(newbezt->vec[2], bezt->vec[2], temp); } @@ -4687,6 +4695,7 @@ void CURVE_OT_vertex_add(wmOperatorType *ot) /* identifiers */ ot->name = "Add Vertex"; ot->idname = "CURVE_OT_vertex_add"; + ot->description = "Add a new control point (linked to only selected end-curve one, if any)"; /* api callbacks */ ot->exec = add_vertex_exec; @@ -4940,6 +4949,7 @@ void CURVE_OT_select_linked(wmOperatorType *ot) /* identifiers */ ot->name = "Select Linked All"; ot->idname = "CURVE_OT_select_linked"; + ot->description = "Select all control points linked to active one"; /* api callbacks */ ot->exec = select_linked_exec; @@ -5000,6 +5010,7 @@ void CURVE_OT_select_linked_pick(wmOperatorType *ot) /* identifiers */ ot->name = "Select Linked"; ot->idname = "CURVE_OT_select_linked_pick"; + ot->description = "Select all control points linked to already selected ones"; /* api callbacks */ ot->invoke = select_linked_pick_invoke; @@ -5078,6 +5089,7 @@ void CURVE_OT_select_row(wmOperatorType *ot) /* identifiers */ ot->name = "Select Control Point Row"; ot->idname = "CURVE_OT_select_row"; + ot->description = "Select a row of control points including active one"; /* api callbacks */ ot->exec = select_row_exec; @@ -5105,6 +5117,7 @@ void CURVE_OT_select_next(wmOperatorType *ot) /* identifiers */ ot->name = "Select Next"; ot->idname = "CURVE_OT_select_next"; + ot->description = "Select control points following already selected ones along the curves"; /* api callbacks */ ot->exec = select_next_exec; @@ -5132,6 +5145,7 @@ void CURVE_OT_select_previous(wmOperatorType *ot) /* identifiers */ ot->name = "Select Previous"; ot->idname = "CURVE_OT_select_previous"; + ot->description = "Select control points preceding already selected ones along the curves"; /* api callbacks */ ot->exec = select_previous_exec; @@ -5219,6 +5233,7 @@ void CURVE_OT_select_more(wmOperatorType *ot) /* identifiers */ ot->name = "Select More"; ot->idname = "CURVE_OT_select_more"; + ot->description = "Select control points linked to already selected ones"; /* api callbacks */ ot->exec = select_more_exec; @@ -5380,6 +5395,7 @@ void CURVE_OT_select_less(wmOperatorType *ot) /* identifiers */ ot->name = "Select Less"; ot->idname = "CURVE_OT_select_less"; + ot->description = "Reduce current selection by deselecting boundary elements"; /* api callbacks */ ot->exec = select_less_exec; @@ -5398,7 +5414,7 @@ static void selectrandom_curve(ListBase *editnurb, float randfac) BPoint *bp; int a; - BLI_srand( BLI_rand() ); /* random seed */ + BLI_srand(BLI_rand()); /* random seed */ for (nu= editnurb->first; nu; nu= nu->next) { if (nu->type == CU_BEZIER) { @@ -5443,6 +5459,7 @@ void CURVE_OT_select_random(wmOperatorType *ot) /* identifiers */ ot->name = "Select Random"; ot->idname = "CURVE_OT_select_random"; + ot->description = "Randomly select some control points"; /* api callbacks */ ot->exec = select_random_exec; @@ -5730,7 +5747,7 @@ static int delete_exec(bContext *C, wmOperator *op) if (type) { bezt1 = (BezTriple*)MEM_mallocN((nu->pntsu) * sizeof(BezTriple), "delNurb"); - memcpy(bezt1, nu->bezt, (nu->pntsu)*sizeof(BezTriple) ); + memcpy(bezt1, nu->bezt, (nu->pntsu)*sizeof(BezTriple)); keyIndex_updateBezt(editnurb, nu->bezt, bezt1, nu->pntsu); MEM_freeN(nu->bezt); nu->bezt= bezt1; @@ -5757,7 +5774,7 @@ static int delete_exec(bContext *C, wmOperator *op) } if (type) { bp1 = (BPoint*)MEM_mallocN(nu->pntsu * sizeof(BPoint), "delNurb2"); - memcpy(bp1, nu->bp, (nu->pntsu)*sizeof(BPoint) ); + memcpy(bp1, nu->bp, (nu->pntsu)*sizeof(BPoint)); keyIndex_updateBP(editnurb, nu->bp, bp1, nu->pntsu); MEM_freeN(nu->bp); nu->bp= bp1; @@ -6028,6 +6045,7 @@ void CURVE_OT_shade_smooth(wmOperatorType *ot) /* identifiers */ ot->name = "Shade Smooth"; ot->idname = "CURVE_OT_shade_smooth"; + ot->description = "Set shading to smooth"; /* api callbacks */ ot->exec = shade_smooth_exec; @@ -6042,6 +6060,7 @@ void CURVE_OT_shade_flat(wmOperatorType *ot) /* identifiers */ ot->name = "Shade Flat"; ot->idname = "CURVE_OT_shade_flat"; + ot->description = "Set shading to flat"; /* api callbacks */ ot->exec = shade_smooth_exec; @@ -6071,7 +6090,8 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op)) /* trasnform all selected curves inverse in obact */ invert_m4_m4(imat, ob->obmat); - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) + { if (base->object->type==ob->type) { if (base->object != ob) { @@ -6268,7 +6288,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bp->vec[0]+= 1.5f*grid; bp= nu->bp; - for (a=0;a<4;a++, bp++) mul_m4_v3(mat,bp->vec); + for (a=0;a<4;a++, bp++) mul_m4_v3(mat, bp->vec); if (cutype==CU_NURBS) { nu->knotsu= NULL; /* nurbs_knot_calc_u allocates */ @@ -6302,7 +6322,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bp->vec[0]+= 2.0f*grid; bp= nu->bp; - for (a=0;a<5;a++, bp++) mul_m4_v3(mat,bp->vec); + for (a=0;a<5;a++, bp++) mul_m4_v3(mat, bp->vec); if (cutype==CU_NURBS) { nu->knotsu= NULL; /* nurbs_knot_calc_u allocates */ @@ -6323,28 +6343,28 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][0]+= -grid; - for (a=0;a<3;a++) mul_m4_v3(mat,bezt->vec[a]); + for (a=0;a<3;a++) mul_m4_v3(mat, bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][1]+= grid; - for (a=0;a<3;a++) mul_m4_v3(mat,bezt->vec[a]); + for (a=0;a<3;a++) mul_m4_v3(mat, bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][0]+= grid; - for (a=0;a<3;a++) mul_m4_v3(mat,bezt->vec[a]); + for (a=0;a<3;a++) mul_m4_v3(mat, bezt->vec[a]); bezt->radius = bezt->weight = 1.0; bezt++; bezt->h1= bezt->h2= HD_AUTO; bezt->f1= bezt->f2= bezt->f3= SELECT; bezt->vec[1][1]+= -grid; - for (a=0;a<3;a++) mul_m4_v3(mat,bezt->vec[a]); + for (a=0;a<3;a++) mul_m4_v3(mat, bezt->vec[a]); bezt->radius = bezt->weight = 1.0; BKE_nurb_handles_calc(nu); @@ -6369,7 +6389,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) } if (a & 1) bp->vec[3]= 0.25*M_SQRT2; else bp->vec[3]= 1.0; - mul_m4_v3(mat,bp->vec); + mul_m4_v3(mat, bp->vec); bp->radius = bp->weight = 1.0; bp++; @@ -6401,7 +6421,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) if (a==1 || a==2) if (b==1 || b==2) { bp->vec[2]+= grid; } - mul_m4_v3(mat,bp->vec); + mul_m4_v3(mat, bp->vec); bp->vec[3]= 1.0; bp++; } @@ -6465,7 +6485,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bp->vec[2]+= nurbcircle[a][1]*grid; if (a & 1) bp->vec[3]= 0.5*M_SQRT2; else bp->vec[3]= 1.0; - mul_m4_v3(mat,bp->vec); + mul_m4_v3(mat, bp->vec); bp++; } nu->flagu= CU_NURB_BEZIER; @@ -6913,6 +6933,7 @@ void CURVE_OT_tilt_clear(wmOperatorType *ot) /* identifiers */ ot->name = "Clear Tilt"; ot->idname = "CURVE_OT_tilt_clear"; + ot->description = "Clear the tilt of selected control points"; /* api callbacks */ ot->exec = clear_tilt_exec; diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index cca5dd7a37b..0a976e6ed6b 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -1696,6 +1696,7 @@ void FONT_OT_open(wmOperatorType *ot) /* identifiers */ ot->name = "Open Font"; ot->idname = "FONT_OT_open"; + ot->description = "Load a new font from a file"; /* api callbacks */ ot->exec = font_open_exec; diff --git a/source/blender/editors/datafiles/Bfont.c b/source/blender/editors/datafiles/Bfont.c index 7f40f579ff9..969bc5a844d 100644 --- a/source/blender/editors/datafiles/Bfont.c +++ b/source/blender/editors/datafiles/Bfont.c @@ -1,6 +1,4 @@ -/* DataToC output of file <Bfont> */ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -29,10 +27,9 @@ /** \file blender/editors/datafiles/Bfont.c * \ingroup eddatafiles + * \brief DataToC output of file <Bfont> */ - - int datatoc_Bfont_size= 25181; char datatoc_Bfont[25181]= { 128, 1, 228, 1, 0, 0, 37, 33, 80, 83, 45, 65, 100, 111, 98, 101, diff --git a/source/blender/editors/datafiles/startup.blend.c b/source/blender/editors/datafiles/startup.blend.c index 681c8cd8948..133e92409d3 100644 --- a/source/blender/editors/datafiles/startup.blend.c +++ b/source/blender/editors/datafiles/startup.blend.c @@ -1,1005 +1,354 @@ /* DataToC output of file <startup_blend> */ -int datatoc_startup_blend_size = 358256; +int datatoc_startup_blend_size = 373072; char datatoc_startup_blend[] = { - 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 54, 50, 82, 69, 78, 68, - 32, 0, 0, 0,240,135,236,191,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 48, 4, 0, 0,224,131,236,191, -255,127, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 52, 4, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,152, 62, 19, 6, - 0, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0,131,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 0, 0, - 88, 1, 0, 0, 56,107, 18, 6, 0, 0, 0, 0,146, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,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, 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,216,108, 18, 6, 0, 0, 0, 0,216,108, 18, 6, 0, 0, 0, 0,216,108, 18, 6, - 0, 0, 0, 0,216,108, 18, 6, 0, 0, 0, 0, 3, 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, 72, 26,135,109,161,127, 0, 0, 72, 26,135,109, -161,127, 0, 0, 16, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 1, 3,108,161,127, 0, 0,152, 3, 3,108,161,127, 0, 0,184, 1, 3,108, -161,127, 0, 0,168, 2, 3,108,161,127, 0, 0,152, 3, 3,108,161,127, 0, 0,136, 4, 3,108,161,127, 0, 0,136, 4, 3,108, -161,127, 0, 0,136, 4, 3,108,161,127, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,216,108, 18, 6, 0, 0, 0, 0,147, 1, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3,108,161,127, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 6, 1, 0,126, 7,146, 4, 0, 0, 0, 0, - 1, 0,238, 3, 0, 0, 0, 0, 1, 0, 0, 0, 88,205, 12,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,232,254, 12,108,161,127, 0, 0,232, 17, 69,109,161,127, 0, 0,232, 17, 69,109, -161,127, 0, 0,152,207, 12,108,161,127, 0, 0, 8,183, 12,108,161,127, 0, 0, 24,206, 12,108,161,127, 0, 0, 24,206, 12,108, -161,127, 0, 0,104,208, 12,108,161,127, 0, 0,184, 12, 13,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 40,110, 18, 6, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 24,210, 18, 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, 83, 82, 65,110, -105,109, 97,116,105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 88, 53, 18, 6, 0, 0, 0, 0, 8,118, 18, 6, - 0, 0, 0, 0,120,118, 18, 6, 0, 0, 0, 0,184,130, 18, 6, 0, 0, 0, 0, 40,131, 18, 6, 0, 0, 0, 0, 72,200, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 53, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200, 53, 18, 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, 68, 65, 84, 65, - 32, 0, 0, 0,200, 53, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,111, 18, 6, 0, 0, 0, 0, 88, 53, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,111, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,111, 18, 6, 0, 0, 0, 0,200, 53, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,111, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 88,112, 18, 6, 0, 0, 0, 0,120,111, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,112, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,112, 18, 6, - 0, 0, 0, 0,232,111, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 88,112, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,113, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 24,114, 18, 6, 0, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4,195, 2, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,114, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,114, 18, 6, - 0, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,114, 18, 6, 0, 0, 0, 0, 24,114, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,114, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0,248,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 88, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,116, 18, 6, - 0, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0,216,115, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,116, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,152,117, 18, 6, 0, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 4, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,117, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,118, 18, 6, - 0, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,117, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,118, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,118, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 53, 18, 6, - 0, 0, 0, 0,120,111, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,118, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,119, 18, 6, 0, 0, 0, 0,120,118, 18, 6, 0, 0, 0, 0,200, 53, 18, 6, - 0, 0, 0, 0, 88,112, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,119, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,119, 18, 6, 0, 0, 0, 0,232,118, 18, 6, 0, 0, 0, 0,120,111, 18, 6, - 0, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,119, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,120, 18, 6, 0, 0, 0, 0, 88,119, 18, 6, 0, 0, 0, 0, 88,112, 18, 6, - 0, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,120, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,120, 18, 6, 0, 0, 0, 0,200,119, 18, 6, 0, 0, 0, 0, 88, 53, 18, 6, - 0, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,120, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,121, 18, 6, 0, 0, 0, 0, 56,120, 18, 6, 0, 0, 0, 0,232,111, 18, 6, - 0, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,121, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,121, 18, 6, 0, 0, 0, 0,168,120, 18, 6, 0, 0, 0, 0,200,112, 18, 6, - 0, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,121, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,121, 18, 6, 0, 0, 0, 0, 24,121, 18, 6, 0, 0, 0, 0, 56,113, 18, 6, - 0, 0, 0, 0, 24,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,121, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,122, 18, 6, 0, 0, 0, 0,136,121, 18, 6, 0, 0, 0, 0,232,111, 18, 6, - 0, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,122, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,122, 18, 6, 0, 0, 0, 0,248,121, 18, 6, 0, 0, 0, 0, 24,114, 18, 6, - 0, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,122, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,123, 18, 6, 0, 0, 0, 0,104,122, 18, 6, 0, 0, 0, 0, 88, 53, 18, 6, - 0, 0, 0, 0,248,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,123, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,123, 18, 6, 0, 0, 0, 0,216,122, 18, 6, 0, 0, 0, 0,168,113, 18, 6, - 0, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,123, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,124, 18, 6, 0, 0, 0, 0, 72,123, 18, 6, 0, 0, 0, 0, 56,113, 18, 6, - 0, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,124, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,124, 18, 6, 0, 0, 0, 0,184,123, 18, 6, 0, 0, 0, 0,248,114, 18, 6, - 0, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,124, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,125, 18, 6, 0, 0, 0, 0, 40,124, 18, 6, 0, 0, 0, 0,248,114, 18, 6, - 0, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,125, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,125, 18, 6, 0, 0, 0, 0,152,124, 18, 6, 0, 0, 0, 0,104,115, 18, 6, - 0, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,125, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,125, 18, 6, 0, 0, 0, 0, 8,125, 18, 6, 0, 0, 0, 0, 88,112, 18, 6, - 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,125, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,126, 18, 6, 0, 0, 0, 0,120,125, 18, 6, 0, 0, 0, 0,168,113, 18, 6, - 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,126, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,126, 18, 6, 0, 0, 0, 0,232,125, 18, 6, 0, 0, 0, 0,216,115, 18, 6, - 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,126, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,127, 18, 6, 0, 0, 0, 0, 88,126, 18, 6, 0, 0, 0, 0,248,114, 18, 6, - 0, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,127, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,127, 18, 6, 0, 0, 0, 0,200,126, 18, 6, 0, 0, 0, 0,216,115, 18, 6, - 0, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,127, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,128, 18, 6, 0, 0, 0, 0, 56,127, 18, 6, 0, 0, 0, 0,184,116, 18, 6, - 0, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,128, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,128, 18, 6, 0, 0, 0, 0,168,127, 18, 6, 0, 0, 0, 0, 24,114, 18, 6, - 0, 0, 0, 0,152,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,128, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,128, 18, 6, 0, 0, 0, 0, 24,128, 18, 6, 0, 0, 0, 0,168,113, 18, 6, - 0, 0, 0, 0,152,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,128, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,129, 18, 6, 0, 0, 0, 0,136,128, 18, 6, 0, 0, 0, 0,200,112, 18, 6, - 0, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,129, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,129, 18, 6, 0, 0, 0, 0,248,128, 18, 6, 0, 0, 0, 0,136,114, 18, 6, - 0, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,129, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,130, 18, 6, 0, 0, 0, 0,104,129, 18, 6, 0, 0, 0, 0,152,117, 18, 6, - 0, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,130, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,130, 18, 6, 0, 0, 0, 0,216,129, 18, 6, 0, 0, 0, 0, 88,112, 18, 6, - 0, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,130, 18, 6, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,130, 18, 6, 0, 0, 0, 0, 72,116, 18, 6, - 0, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40,131, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,134, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,112, 18, 6, - 0, 0, 0, 0,200, 53, 18, 6, 0, 0, 0, 0,120,111, 18, 6, 0, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,209, 18, 6, 0, 0, 0, 0,136,209, 18, 6, 0, 0, 0, 0, 24,132, 18, 6, - 0, 0, 0, 0,136,133, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,132, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,136,133, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,133, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,132, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, - 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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,222, 2, 0, 0,222, 2, 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, 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, 68, 65, 84, 65,160, 0, 0, 0,248,134, 18, 6, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,136,159, 18, 6, 0, 0, 0, 0, 40,131, 18, 6, 0, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 24,114, 18, 6, - 0, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0,232,111, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,158, 18, 6, 0, 0, 0, 0, 72,158, 18, 6, 0, 0, 0, 0,232,135, 18, 6, 0, 0, 0, 0, 88,137, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,232,135, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,137, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, - 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, - 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 34, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,137, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232,135, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 71, 67, 1, 0,145,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, - 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0,216, 0, 34, 1,199, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 34, 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,200,138, 18, 6, 0, 0, 0, 0,168,156, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,200,138, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,140, 18, 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, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,111,110,116, -101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, -199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,140, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,142, 18, 6, 0, 0, 0, 0,200,138, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,199, 0, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,142, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,143, 18, 6, - 0, 0, 0, 0,104,140, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101, -114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, -199, 0, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 54, 51, 82, 69, 78, 68, + 72, 0, 0, 0, 64,178,119, 2,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110, +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, 0, 0, 0, 0, 0, 71, 76, 79, 66, + 48, 4, 0, 0, 80,174,119, 2,255,127, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 50, 2, 0, 0, 0,250, 0, 0, 0, + 1, 0, 0, 1,120,141, 16, 7, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 29,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,143, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,145, 18, 6, 0, 0, 0, 0, 8,142, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 68,105,109,101,110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,199, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,145, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,146, 18, 6, - 0, 0, 0, 0,168,143, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,110,116,105, - 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,254, -199, 0, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,146, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,148, 18, 6, 0, 0, 0, 0, 72,145, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,199, 0, 0, 0, 20, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,148, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,150, 18, 6, - 0, 0, 0, 0,232,146, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100, -105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,254, -199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,150, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,151, 18, 6, 0, 0, 0, 0,136,148, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -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, 80,101,114,102,111,114,109, 97,110, 99,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, 0,242,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,151, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,153, 18, 6, - 0, 0, 0, 0, 40,150, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, - 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, -199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,104,153, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,155, 18, 6, 0, 0, 0, 0,200,151, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 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, 68, 65, 84, 65, 88, 1, 0, 0, 8,155, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,156, 18, 6, - 0, 0, 0, 0,104,153, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,117,116,112, -117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,253, -199, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,156, 18, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,155, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 72,158, 18, 6, 0, 0, 0, 0,179, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,136,159, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,164, 18, 6, 0, 0, 0, 0,248,134, 18, 6, 0, 0, 0, 0, 88, 53, 18, 6, - 0, 0, 0, 0,248,114, 18, 6, 0, 0, 0, 0,104,115, 18, 6, 0, 0, 0, 0, 56,113, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4, 88, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,163, 18, 6, 0, 0, 0, 0, 88,163, 18, 6, 0, 0, 0, 0,120,160, 18, 6, - 0, 0, 0, 0,232,161, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,120,160, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,232,161, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, - 0, 0,208, 65, 39,182,158, 55, 0, 0,131, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,130, 68, 0, 0,200, 65, 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 4, 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 4, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,161, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,160, 18, 6, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, - 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 18, 0, 0, 0, - 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 24, 4, 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, 23, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 88,163, 18, 6, 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 77, 0, 0, 88, 1, 0, 0, 24,186, 15, 7, 0, 0, 0, 0,146, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105, +110, 77, 97,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, 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,184,187, 15, 7, 0, 0, 0, 0,184,187, 15, 7, + 0, 0, 0, 0,184,187, 15, 7, 0, 0, 0, 0,184,187, 15, 7, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 88,185,237, 6, + 0, 0, 0, 0, 88,185,237, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 74, 65, 8, + 0, 0, 0, 0,168, 15, 55, 8, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,216,199, 54, 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, 40,248, 21, 7, 0, 0, 0, 0, 8,250, 21, 7, + 0, 0, 0, 0, 40,248, 21, 7, 0, 0, 0, 0, 24,249, 21, 7, 0, 0, 0, 0, 8,250, 21, 7, 0, 0, 0, 0, 56,151, 21, 7, + 0, 0, 0, 0,216,199, 54, 8, 0, 0, 0, 0, 56,151, 21, 7, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,184,187, 15, 7, + 0, 0, 0, 0,147, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,250, 21, 7, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101, +101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 25, 0, + 62, 6, 98, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 0, 0, 1, 0, 0, 0, 24,181, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,248,228, 31, 7, 0, 0, 0, 0, 72,215, 65, 8, + 0, 0, 0, 0, 72,215, 65, 8, 0, 0, 0, 0, 88,183, 31, 7, 0, 0, 0, 0,200,158, 31, 7, 0, 0, 0, 0,216,181, 31, 7, + 0, 0, 0, 0,216,181, 31, 7, 0, 0, 0, 0,248, 76, 53, 8, 0, 0, 0, 0, 24,237, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 8,189, 15, 7, 0, 0, 0, 0,210, 0, 0, 0, + 1, 0, 0, 0,248, 32, 16, 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, 83, 82, 65,110,105,109, 97,116,105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 56,132, 15, 7, + 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 88,197, 15, 7, 0, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0, 8,210, 15, 7, + 0, 0, 0, 0, 40, 23, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,168,132, 15, 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, 68, 65, 84, 65, 32, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88,190, 15, 7, + 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0,168,132, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,190, 15, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,192, 15, 7, + 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,168,191, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,192, 15, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,193, 15, 7, + 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0,104,193, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,194, 15, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 4, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,195, 15, 7, + 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,196, 15, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,192, 1, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 88,197, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,197, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,200,197, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,198, 15, 7, 0, 0, 0, 0, 88,197, 15, 7, + 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 56,198, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,198, 15, 7, 0, 0, 0, 0,200,197, 15, 7, + 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,168,198, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,199, 15, 7, 0, 0, 0, 0, 56,198, 15, 7, + 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 24,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,199, 15, 7, 0, 0, 0, 0,168,198, 15, 7, + 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,136,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,199, 15, 7, 0, 0, 0, 0, 24,199, 15, 7, + 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,248,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,200, 15, 7, 0, 0, 0, 0,136,199, 15, 7, + 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,104,200, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,200, 15, 7, 0, 0, 0, 0,248,199, 15, 7, + 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,216,200, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,201, 15, 7, 0, 0, 0, 0,104,200, 15, 7, + 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 72,201, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,201, 15, 7, 0, 0, 0, 0,216,200, 15, 7, + 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,184,201, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,202, 15, 7, 0, 0, 0, 0, 72,201, 15, 7, + 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 40,202, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,202, 15, 7, 0, 0, 0, 0,184,201, 15, 7, + 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,152,202, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,203, 15, 7, 0, 0, 0, 0, 40,202, 15, 7, + 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 8,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,203, 15, 7, 0, 0, 0, 0,152,202, 15, 7, + 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,120,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,203, 15, 7, 0, 0, 0, 0, 8,203, 15, 7, + 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,232,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,204, 15, 7, 0, 0, 0, 0,120,203, 15, 7, + 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 88,204, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,204, 15, 7, 0, 0, 0, 0,232,203, 15, 7, + 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,200,204, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,205, 15, 7, 0, 0, 0, 0, 88,204, 15, 7, + 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 56,205, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,205, 15, 7, 0, 0, 0, 0,200,204, 15, 7, + 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,168,205, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,206, 15, 7, 0, 0, 0, 0, 56,205, 15, 7, + 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 24,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,206, 15, 7, 0, 0, 0, 0,168,205, 15, 7, + 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,136,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,206, 15, 7, 0, 0, 0, 0, 24,206, 15, 7, + 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,248,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,207, 15, 7, 0, 0, 0, 0,136,206, 15, 7, + 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,104,207, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,207, 15, 7, 0, 0, 0, 0,248,206, 15, 7, + 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,216,207, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,208, 15, 7, 0, 0, 0, 0,104,207, 15, 7, + 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 72,208, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,208, 15, 7, 0, 0, 0, 0,216,207, 15, 7, + 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,184,208, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,209, 15, 7, 0, 0, 0, 0, 72,208, 15, 7, + 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 40,209, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0,184,208, 15, 7, + 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,209, 15, 7, + 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 8,210, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,213, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,168,191, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, + 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 32, 16, 7, 0, 0, 0, 0,104, 32, 16, 7, + 0, 0, 0, 0,248,210, 15, 7, 0, 0, 0, 0,104,212, 15, 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, 68, 65, 84, 65, 40, 1, 0, 0,248,210, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,212, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,212, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,210, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0, +129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +111, 7, 0, 0, 18, 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,128, 63, + 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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,222, 2, 0, 0,222, 2, 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, 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, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,164, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,171, 18, 6, 0, 0, 0, 0,136,159, 18, 6, 0, 0, 0, 0, 24,114, 18, 6, - 0, 0, 0, 0,152,117, 18, 6, 0, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0,136,114, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0,255, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,168, 18, 6, 0, 0, 0, 0, 72,168, 18, 6, 0, 0, 0, 0,104,165, 18, 6, - 0, 0, 0, 0,216,166, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,104,165, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,216,166, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,213, 15, 7, + 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,238, 15, 7, 0, 0, 0, 0, 8,210, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, + 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0,200,214, 15, 7, + 0, 0, 0, 0, 56,216, 15, 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, 68, 65, 84, 65, 40, 1, 0, 0,200,214, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 56,216, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,166, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,165, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 67, 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 18, 0, 0, 0, -228, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 18, 0, 0, 0, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, - 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,216, 0,229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 72,168, 18, 6, 0, 0, 0, 0,183, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,169, 18, 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, 1, 0, 0, 0, 68, 65, 84, 65, - 16, 0, 0, 0,168,169, 18, 6, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 8,170, 18, 6, - 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, 8,170, 18, 6, 0, 0, 0, 0,236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 20, 0, 0, 0, - 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,152,136, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,146, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,168,200, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,159, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,248,181, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,153, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,216,131, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,139, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,200,130, 21, 6, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 56,171, 18, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,184, 18, 6, 0, 0, 0, 0,120,164, 18, 6, - 0, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0,104,115, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,194, 2, 0, 0, 1, 1, 87, 2, -106, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,183, 18, 6, 0, 0, 0, 0, 24,183, 18, 6, - 0, 0, 0, 0, 40,172, 18, 6, 0, 0, 0, 0,232,177, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 40,172, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,173, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 26, 0, 0, 0, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,173, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,175, 18, 6, 0, 0, 0, 0, 40,172, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 80, 2, 0, 0, 5, 0, 3, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,175, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,176, 18, 6, 0, 0, 0, 0,152,173, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,115, 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, 6, 0, 34, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,176, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,177, 18, 6, 0, 0, 0, 0, 8,175, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0,163, 0, 0, 0, -180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,130, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,177, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,176, 18, 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, 0,193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 80, 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, 88,179, 18, 6, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 88,179, 18, 6, - 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200,167,141, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, - 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, -143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190, -142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65, -111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, - 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, - 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 99,240,191, 62,110,116, 85, 63, 64,185, 70,188, 0, 0, 82,180, 48,221,185,190, - 44, 45, 51, 62, 28, 11, 79, 63, 0, 0, 56,179, 67,108,117,194,183,204,216, 65,105,156, 5,194,212,247,159,192,235, 62,114, 66, - 59,254,213,193,158,225, 3, 66, 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, -143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, - 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, - 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65, -214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 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,128, 63, - 32, 33, 12, 66, 86,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 96, 1, 0, 0, 24,183, 18, 6, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, -205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, -205,204,204, 61, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,184, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,193, 18, 6, 0, 0, 0, 0, 56,171, 18, 6, 0, 0, 0, 0,248,114, 18, 6, - 0, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0, 40,117, 18, 6, 0, 0, 0, 0,216,115, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1,171, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,191, 18, 6, 0, 0, 0, 0,120,191, 18, 6, 0, 0, 0, 0,184,185, 18, 6, - 0, 0, 0, 0, 8,190, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,184,185, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 40,187, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,187, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,152,188, 18, 6, 0, 0, 0, 0,184,185, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, -144, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, -144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, - 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,217, 0,145, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,188, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 8,190, 18, 6, 0, 0, 0, 0, 40,187, 18, 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, 0,191, 1, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,190, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,188, 18, 6, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, - 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, -144, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0, -144, 0, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,217, 0, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,231, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,120,191, 18, 6, 0, 0, 0, 0,178, 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, 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,184,192, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,184,192, 18, 6, - 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0, 8,110, 21, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,120,193, 18, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,200, 18, 6, 0, 0, 0, 0,200,184, 18, 6, - 0, 0, 0, 0,184,116, 18, 6, 0, 0, 0, 0, 88,112, 18, 6, 0, 0, 0, 0, 72,116, 18, 6, 0, 0, 0, 0, 40,117, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,194, 2, 0, 0, 12, 12,192, 1, -190, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,198, 18, 6, 0, 0, 0, 0,184,198, 18, 6, - 0, 0, 0, 0,104,194, 18, 6, 0, 0, 0, 0, 72,197, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,104,194, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,195, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,192, 94, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,195, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,197, 18, 6, 0, 0, 0, 0,104,194, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0,146, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,164, 1, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,197, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,195, 18, 6, 0, 0, 0, 0, 0, 0, 32,193, - 0, 0,104, 68, 0, 0, 72,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195, 0, 0, 0, 0,231, 0, 0, 0, -248, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -230, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, - 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,164, 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, 68, 65, 84, 65, 72, 1, 0, 0,184,198, 18, 6, - 0, 0, 0, 0, 38, 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, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,110, 21, 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, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,200, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,193, 18, 6, 0, 0, 0, 0,152,117, 18, 6, - 0, 0, 0, 0,168,113, 18, 6, 0, 0, 0, 0,200,112, 18, 6, 0, 0, 0, 0, 8,118, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0,134, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,207, 18, 6, 0, 0, 0, 0,216,207, 18, 6, 0, 0, 0, 0, 56,201, 18, 6, - 0, 0, 0, 0,168,202, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,201, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,168,202, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0,128,164, 67, 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,202, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,201, 18, 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, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 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,204, 18, 6, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 24,204, 18, 6, 0, 0, 0, 0,173, 0, 0, 0, - 1, 0, 0, 0, 56,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,100, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, - 0, 0, 0, 0,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, - 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, - 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190,229,251,159, 62, 55, 53,101, 63, - 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 78,255,170, 64, - 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63, -149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65, -152, 9, 52, 65,149, 70,158, 62, 24,234,167, 62,192,214,159,187, 0, 0, 6,181,196,188,181,189, 71,238,178, 61,127, 45,128, 62, - 0, 0,226, 51,168,120, 21,194,107, 5, 2, 66,203,135,213,193,147,214,159,192,177, 38, 19, 66,124,173,255,193, 96,101,210, 65, -128, 40,160, 64,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, - 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, - 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63, -149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65, -152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,253,191,136, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 1, 2, 0, 0,255,255, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,190,133, 65, 66, 99,212, 90, 66, - 27,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,216,207, 18, 6, - 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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, 1, 0, 0, 0, - 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0, 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, - 0, 0, 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, 0, 10, 0, 7, 1, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 24,210, 18, 6, 0, 0, 0, 0,210, 0, 0, 0, - 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,104,211, 18, 6, - 0, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0,136,217, 18, 6, 0, 0, 0, 0,184,226, 18, 6, 0, 0, 0, 0, 40,227, 18, 6, - 0, 0, 0, 0, 88, 23, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,211, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,216,211, 18, 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, 68, 65, 84, 65, 32, 0, 0, 0,216,211, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,212, 18, 6, - 0, 0, 0, 0,104,211, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 72,212, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,212, 18, 6, 0, 0, 0, 0,216,211, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,212, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0, 72,212, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0,184,212, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,214, 18, 6, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0,152,213, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,214, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,234, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,215, 18, 6, - 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0, 88,215, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,216, 18, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 3,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136,217, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,217, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216,211, 18, 6, 0, 0, 0, 0, 72,212, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248,217, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,218, 18, 6, 0, 0, 0, 0,136,217, 18, 6, - 0, 0, 0, 0,216,211, 18, 6, 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104,218, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,218, 18, 6, 0, 0, 0, 0,248,217, 18, 6, - 0, 0, 0, 0, 72,212, 18, 6, 0, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,218, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,219, 18, 6, 0, 0, 0, 0,104,218, 18, 6, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,219, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,219, 18, 6, 0, 0, 0, 0,216,218, 18, 6, - 0, 0, 0, 0,184,212, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184,219, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,220, 18, 6, 0, 0, 0, 0, 72,219, 18, 6, - 0, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40,220, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,220, 18, 6, 0, 0, 0, 0,184,219, 18, 6, - 0, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152,220, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,221, 18, 6, 0, 0, 0, 0, 40,220, 18, 6, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8,221, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,221, 18, 6, 0, 0, 0, 0,152,220, 18, 6, - 0, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120,221, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,221, 18, 6, 0, 0, 0, 0, 8,221, 18, 6, - 0, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232,221, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,222, 18, 6, 0, 0, 0, 0,120,221, 18, 6, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 88,222, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,222, 18, 6, 0, 0, 0, 0,232,221, 18, 6, - 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,200,222, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,223, 18, 6, 0, 0, 0, 0, 88,222, 18, 6, - 0, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 56,223, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,223, 18, 6, 0, 0, 0, 0,200,222, 18, 6, - 0, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,168,223, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,224, 18, 6, 0, 0, 0, 0, 56,223, 18, 6, - 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 24,224, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,224, 18, 6, 0, 0, 0, 0,168,223, 18, 6, - 0, 0, 0, 0,104,211, 18, 6, 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136,224, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,224, 18, 6, 0, 0, 0, 0, 24,224, 18, 6, - 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248,224, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,225, 18, 6, 0, 0, 0, 0,136,224, 18, 6, - 0, 0, 0, 0,184,212, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104,225, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,225, 18, 6, 0, 0, 0, 0,248,224, 18, 6, - 0, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,225, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,226, 18, 6, 0, 0, 0, 0,104,225, 18, 6, - 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,226, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,226, 18, 6, 0, 0, 0, 0,216,225, 18, 6, - 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184,226, 18, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,226, 18, 6, - 0, 0, 0, 0,104,211, 18, 6, 0, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 40,227, 18, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,230, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0,216,211, 18, 6, 0, 0, 0, 0, 72,212, 18, 6, 0, 0, 0, 0,152,213, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, - 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 62, 19, 6, 0, 0, 0, 0, 8, 62, 19, 6, - 0, 0, 0, 0, 24,228, 18, 6, 0, 0, 0, 0,136,229, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,228, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,229, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,229, 18, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,228, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0, -129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -111, 7, 0, 0, 18, 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,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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, 5, 4, 0, 0, 5, 4, 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, 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, 68, 65, 84, 65,160, 0, 0, 0,248,230, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232,235, 18, 6, 0, 0, 0, 0, 40,227, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, - 0, 0, 0, 0, 8,214, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0,184,212, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1, 92, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,234, 18, 6, 0, 0, 0, 0,200,234, 18, 6, 0, 0, 0, 0,232,231, 18, 6, - 0, 0, 0, 0, 88,233, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,232,231, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 88,233, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,115, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,233, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,231, 18, 6, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, - 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 18, 0, 0, 0, - 65, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,200,234, 18, 6, 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,235, 18, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 4, 19, 6, 0, 0, 0, 0,248,230, 18, 6, 0, 0, 0, 0, 8,214, 18, 6, - 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0,152,213, 18, 6, 0, 0, 0, 0,120,214, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1,141, 3, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 3, 19, 6, 0, 0, 0, 0, 56, 3, 19, 6, 0, 0, 0, 0,216,236, 18, 6, - 0, 0, 0, 0, 72,238, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,216,236, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 72,238, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,238, 18, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,236, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0,128, 92,196, - 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0, -114, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0, -114, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1,115, 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,184,239, 18, 6, - 0, 0, 0, 0,152, 1, 19, 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, 68, 65, 84, 65, 88, 1, 0, 0,184,239, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 88,241, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,216, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,214, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 71, 67, 1, 0,145,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, + 33, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, + 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,216, 0, 34, 1,199, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,216, 0, 34, 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,168,217, 15, 7, + 0, 0, 0, 0,136,235, 15, 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, 68, 65, 84, 65, 88, 1, 0, 0,168,217, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 72,219, 15, 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, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,220,255,199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 88,241, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,242, 18, 6, 0, 0, 0, 0,184,239, 18, 6, + 88, 1, 0, 0, 72,219, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,220, 15, 7, 0, 0, 0, 0,168,217, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, 110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, 110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 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,135,255,199, 0, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,242, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,152,244, 18, 6, 0, 0, 0, 0, 88,241, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,220, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,136,222, 15, 7, 0, 0, 0, 0, 72,219, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,111,255,199, 0, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152,244, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,246, 18, 6, 0, 0, 0, 0,248,242, 18, 6, + 88, 1, 0, 0,136,222, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,224, 15, 7, 0, 0, 0, 0,232,220, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, 109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, 109,101,110,115,105,111,110,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, 68,105,109,101,110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 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,254,199, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,246, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,216,247, 18, 6, 0, 0, 0, 0,152,244, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0, 40,224, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,200,225, 15, 7, 0, 0, 0, 0,136,222, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 58,254,199, 0, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, - 88, 1, 0, 0,216,247, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,249, 18, 6, 0, 0, 0, 0, 56,246, 18, 6, + 88, 1, 0, 0,200,225, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,227, 15, 7, 0, 0, 0, 0, 40,224, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, 116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, 116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105, 111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 0, 0, 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, 34,254,199, 0, 0, 0, 20, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,249, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 24,251, 18, 6, 0, 0, 0, 0,216,247, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,104,227, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 8,229, 15, 7, 0, 0, 0, 0,200,225, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10,254,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 24,251, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,252, 18, 6, 0, 0, 0, 0,120,249, 18, 6, + 88, 1, 0, 0, 8,229, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,230, 15, 7, 0, 0, 0, 0,104,227, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, 114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, 114,102,111,114,109, 97,110, 99,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, 80,101,114,102,111,114,109, 97,110, 99,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, 0,242,253, 76, 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,242,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,252, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 88,254, 18, 6, 0, 0, 0, 0, 24,251, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,168,230, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 72,232, 15, 7, 0, 0, 0, 0, 8,229, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,218,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, - 88, 1, 0, 0, 88,254, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,255, 18, 6, 0, 0, 0, 0,184,252, 18, 6, + 88, 1, 0, 0, 72,232, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,233, 15, 7, 0, 0, 0, 0,168,230, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 76, 1, 0, 0, 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,194,253,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,248,255, 18, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,152, 1, 19, 6, 0, 0, 0, 0, 88,254, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,233, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,136,235, 15, 7, 0, 0, 0, 0, 72,232, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40,253,199, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 1, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,255, 18, 6, + 88, 1, 0, 0,136,235, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,233, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, 107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, 107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 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, 16,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 56, 3, 19, 6, 0, 0, 0, 0,179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0,179, 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, 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, @@ -1008,223 +357,325 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,120, 4, 19, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 18, 19, 6, 0, 0, 0, 0,232,235, 18, 6, - 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 24,217, 18, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 1, 1, 27, 3, -140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 16, 19, 6, 0, 0, 0, 0, 88, 16, 19, 6, - 0, 0, 0, 0,104, 5, 19, 6, 0, 0, 0, 0, 40, 11, 19, 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, 68, 65, 84, 65, 40, 1, 0, 0,104, 5, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 6, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 6, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 8, 19, 6, 0, 0, 0, 0,104, 5, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,114, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 0, 0, 0,104,238, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,216,213, 15, 7, + 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4, + 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,242, 15, 7, 0, 0, 0, 0, 56,242, 15, 7, + 0, 0, 0, 0, 88,239, 15, 7, 0, 0, 0, 0,200,240, 15, 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, 68, 65, 84, 65, 40, 1, 0, 0, 88,239, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,240, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 39,182,158, 55, 0, 0,131, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,130, 68, 0, 0,200, 65, 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 4, 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 26, 0, 0, 0, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,240, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,239, 15, 7, 0, 0, 0, 0, 0, 0, 64,192, + 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 23, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, + 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 24, 4, 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, 23, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 56,242, 15, 7, + 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 8, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 9, 19, 6, 0, 0, 0, 0,216, 6, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, 26, 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, 6, 0, 34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 9, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 11, 19, 6, 0, 0, 0, 0, 72, 8, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0, -180, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,250, 15, 7, 0, 0, 0, 0,104,238, 15, 7, + 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0,104,193, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0, +255, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,247, 15, 7, 0, 0, 0, 0, 40,247, 15, 7, + 0, 0, 0, 0, 72,244, 15, 7, 0, 0, 0, 0,184,245, 15, 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, 68, 65, 84, 65, 40, 1, 0, 0, 72,244, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,245, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 11, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 9, 19, 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, 68, 65, 84, 65, 40, 1, 0, 0,184,245, 15, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,244, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 67, 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0, +216, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +198, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,216, 0,229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 40,247, 15, 7, + 0, 0, 0, 0,183, 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, 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, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,114, 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,152, 12, 19, 6, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,152, 12, 19, 6, - 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30,133,119, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63, -225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, -254,221,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190, -228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64, -151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, - 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191, -122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 25, 25,195, 62,176,249,206, 62,128,238,196,187, 0, 0,192,179, 55, 15,168,189, -201,118,165, 61,152, 15,109, 62, 0, 0,152, 51,211,120, 21,194,144, 5, 2, 66, 6,136,213,193,193,214,159,192,219, 38, 19, 66, -196,173,255,193,154,101,210, 65,173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63, -225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, -254,221,192,190,152, 9, 52,193, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, - 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191, -122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,248, 15, 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, + 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,136,248, 15, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, + 14, 0, 0, 0,232,248, 15, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,232,248, 15, 7, 0, 0, 0, 0,236, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, + 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,225, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,239, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,233, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,219, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24,250, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 7, 16, 7, + 0, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0,136,192, 15, 7, + 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0, +194, 2, 0, 0, 1, 1, 87, 2,106, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 5, 16, 7, + 0, 0, 0, 0,248, 5, 16, 7, 0, 0, 0, 0, 8,251, 15, 7, 0, 0, 0, 0,200, 0, 16, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 8,251, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,252, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0, +114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,120,252, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,253, 15, 7, 0, 0, 0, 0, 8,251, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, + 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0, +194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 80, 2, 0, 0, 5, 0, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190,214,211,111, 65, -214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, - 1, 2, 0, 0,255,255, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, -190,133, 65, 66,100,212, 90, 66, 31,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 96, 1, 0, 0, 88, 16, 19, 6, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, -205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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, 68, 65, 84, 65, + 40, 1, 0, 0,232,253, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,255, 15, 7, 0, 0, 0, 0,120,252, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0, +102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0, +115, 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, 6, 0, 34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 88,255, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200, 0, 16, 7, 0, 0, 0, 0,232,253, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, + 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0, +130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0, +194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, -205,204,204, 61, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 18, 19, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 23, 19, 6, 0, 0, 0, 0,120, 4, 19, 6, 0, 0, 0, 0, 88,215, 18, 6, - 0, 0, 0, 0, 40,213, 18, 6, 0, 0, 0, 0,232,214, 18, 6, 0, 0, 0, 0,200,215, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6, 93, 2, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 21, 19, 6, 0, 0, 0, 0,216, 21, 19, 6, 0, 0, 0, 0,248, 18, 19, 6, - 0, 0, 0, 0,104, 20, 19, 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, 68, 65, 84, 65, 40, 1, 0, 0,248, 18, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,104, 20, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 66, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 20, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 18, 19, 6, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, - 0, 0, 0, 68,128,195,217,195,192,225,108, 68, 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0, 32, 6, 0, 0, 18, 0, 0, 0, - 66, 2, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 18, 0, 0, 0, - 66, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64, 10, 0, 0, 0, - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 32, 6, 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6, 67, 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, 68, 65, 84, 65, 48, 1, 0, 0,216, 21, 19, 6, 0, 0, 0, 0,191, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,200, 0, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,255, 15, 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, 0, 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,215, 19, 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, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10,206, 97, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 23, 19, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 19, 6, 0, 0, 0, 0,104,211, 18, 6, - 0, 0, 0, 0, 88,215, 18, 6, 0, 0, 0, 0, 56,216, 18, 6, 0, 0, 0, 0,168,216, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3,140, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 28, 19, 6, 0, 0, 0, 0,152, 28, 19, 6, 0, 0, 0, 0, 72, 24, 19, 6, - 0, 0, 0, 0, 40, 27, 19, 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, 68, 65, 84, 65, 40, 1, 0, 0, 72, 24, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,184, 25, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 65, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 3, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,192, 64, 68, 0, 0,200, 65, 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 4, 3, 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0, +194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 80, 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, 68, 65, 84, 65, 40, 1, 0, 0,184, 25, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 40, 27, 19, 6, 0, 0, 0, 0, 72, 24, 19, 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, 56, 2, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65, +112, 3, 0, 0, 56, 2, 16, 7, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,200,167,141, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, + 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, + 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, + 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191, +184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, + 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 99,240,191, 62,110,116, 85, 63, 64,185, 70,188, + 0, 0, 82,180, 48,221,185,190, 44, 45, 51, 62, 28, 11, 79, 63, 0, 0, 56,179, 67,108,117,194,183,204,216, 65,105,156, 5,194, +212,247,159,192,235, 62,114, 66, 59,254,213,193,158,225, 3, 66, 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, + 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191, +184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, + 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 27, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 25, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 67, 0, 0,129,191, 0,128, 0, 64, 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 3, 0, 0, 0, 0, 0, 0, -114, 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, 3, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 3,114, 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, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, + 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 32, 33, 12, 66, 86,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,248, 5, 16, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, + 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 68, 65, 84, 65, 40, 33, 0, 0,152, 28, 19, 6, 0, 0, 0, 0,184, 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, 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, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0, -100, 0, 0, 0,154,153,153, 62,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, + 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,168, 7, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 16, 16, 7, 0, 0, 0, 0, 24,250, 15, 7, + 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0,184,194, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1, +171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 14, 16, 7, 0, 0, 0, 0, 88, 14, 16, 7, + 0, 0, 0, 0,152, 8, 16, 7, 0, 0, 0, 0,232, 12, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0,152, 8, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8, 10, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 10, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 11, 16, 7, 0, 0, 0, 0,152, 8, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0, +217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,145, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 11, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232, 12, 16, 7, 0, 0, 0, 0, 8, 10, 16, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 12, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 11, 16, 7, 0, 0, 0, 0, 0, 0, 16,193, + 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, + 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 88, 14, 16, 7, + 0, 0, 0, 0,178, 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, 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,152, 15, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +112, 0, 0, 0,152, 15, 16, 7, 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0,200,189, 18, 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, 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, 68, 65, 84, 65,160, 0, 0, 0, 88, 16, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 23, 16, 7, + 0, 0, 0, 0,168, 7, 16, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, + 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, +194, 2, 0, 0, 12, 12,192, 1,190, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 21, 16, 7, + 0, 0, 0, 0,152, 21, 16, 7, 0, 0, 0, 0, 72, 17, 16, 7, 0, 0, 0, 0, 40, 20, 16, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 72, 17, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 18, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 94, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, + 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,184, 18, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 20, 16, 7, 0, 0, 0, 0, 72, 17, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0, +146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0, +194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,164, 1, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 40, 20, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 18, 16, 7, + 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 72,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195, + 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, + 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0, +194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,164, 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, 68, 65, 84, 65, + 72, 1, 0, 0,152, 21, 16, 7, 0, 0, 0, 0, 38, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,189, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 40, 23, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 16, 16, 7, + 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,232,196, 15, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0, +134, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 30, 16, 7, 0, 0, 0, 0,184, 30, 16, 7, + 0, 0, 0, 0, 24, 24, 16, 7, 0, 0, 0, 0,136, 25, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24, 24, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136, 25, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,164, 67, 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 25, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 16, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 26, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,248, 26, 16, 7, + 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 56,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,228,100, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63, +225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, + 0,222,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190, +229,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64, +151, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63, +209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191, +126,113,172,191,216, 49, 49, 65,152, 9, 52, 65,149, 70,158, 62, 24,234,167, 62,192,214,159,187, 0, 0, 6,181,196,188,181,189, + 71,238,178, 61,127, 45,128, 62, 0, 0,226, 51,168,120, 21,194,107, 5, 2, 66,203,135,213,193,147,214,159,192,177, 38, 19, 66, +124,173,255,193, 96,101,210, 65,128, 40,160, 64,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63, +225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, + 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63, +209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191, +126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1232,114 +683,505 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,191,136, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, + 1, 2, 0, 0,255,255, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63, +190,133, 65, 66, 99,212, 90, 66, 27,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0,184, 30, 16, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, +205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0, 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63, + 10,215, 35, 60, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,248, 32, 16, 7, + 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 34, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,152, 49, 16, 7, + 0, 0, 0, 0, 8, 50, 16, 7, 0, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 34, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 34, 16, 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, 68, 65, 84, 65, 32, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152, 35, 16, 7, + 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 36, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88, 37, 16, 7, + 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 37, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 6,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24, 39, 16, 7, + 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 39, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 40, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 40, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 41, 16, 7, + 0, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 41, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 41, 16, 7, + 0, 0, 0, 0,216, 40, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 41, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 42, 16, 7, + 0, 0, 0, 0, 72, 41, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 42, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 42, 16, 7, + 0, 0, 0, 0,184, 41, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 42, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 43, 16, 7, + 0, 0, 0, 0, 40, 42, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 43, 16, 7, + 0, 0, 0, 0,152, 42, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 43, 16, 7, + 0, 0, 0, 0, 8, 43, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 44, 16, 7, + 0, 0, 0, 0,120, 43, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 44, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 44, 16, 7, + 0, 0, 0, 0,232, 43, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 44, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 45, 16, 7, + 0, 0, 0, 0, 88, 44, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 45, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 45, 16, 7, + 0, 0, 0, 0,200, 44, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 45, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 46, 16, 7, + 0, 0, 0, 0, 56, 45, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 46, 16, 7, + 0, 0, 0, 0,168, 45, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 46, 16, 7, + 0, 0, 0, 0, 24, 46, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 47, 16, 7, + 0, 0, 0, 0,136, 46, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 47, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 47, 16, 7, + 0, 0, 0, 0,248, 46, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 47, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 48, 16, 7, + 0, 0, 0, 0,104, 47, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 48, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 48, 16, 7, + 0, 0, 0, 0,216, 47, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 48, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 49, 16, 7, + 0, 0, 0, 0, 72, 48, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 49, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 49, 16, 7, + 0, 0, 0, 0,184, 48, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 49, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 49, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 50, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 53, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, + 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,140, 16, 7, + 0, 0, 0, 0,232,140, 16, 7, 0, 0, 0, 0,248, 50, 16, 7, 0, 0, 0, 0,104, 52, 16, 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, 68, 65, 84, 65, + 40, 1, 0, 0,248, 50, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 52, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,104, 52, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 50, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, + 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, + 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, 5, 4, 0, 0, + 5, 4, 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, 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, 68, 65, 84, 65, +160, 0, 0, 0,216, 53, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0, 8, 50, 16, 7, + 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1, + 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 57, 16, 7, 0, 0, 0, 0,168, 57, 16, 7, + 0, 0, 0, 0,200, 54, 16, 7, 0, 0, 0, 0, 56, 56, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0,200, 54, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56, 56, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,115, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 56, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 54, 16, 7, 0, 0, 0, 0, 0, 0, 64,192, + 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 93, 1, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, + 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168, 57, 16, 7, + 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 83, 16, 7, 0, 0, 0, 0,216, 53, 16, 7, + 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1, +141, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 82, 16, 7, 0, 0, 0, 0, 24, 82, 16, 7, + 0, 0, 0, 0,184, 59, 16, 7, 0, 0, 0, 0, 40, 61, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0,184, 59, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 61, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 61, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 59, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,174, 67, 0,128, 92,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0, + 94, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,115, 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,152, 62, 16, 7, 0, 0, 0, 0,120, 80, 16, 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, 68, 65, 84, 65, 88, 1, 0, 0,152, 62, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 64, 16, 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, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 64, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 65, 16, 7, + 0, 0, 0, 0,152, 62, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,101,110,100, +101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, + 76, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 65, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 67, 16, 7, 0, 0, 0, 0, 56, 64, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101,114,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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 67, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 69, 16, 7, + 0, 0, 0, 0,216, 65, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 68,105,109,101, +110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, + 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 69, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 70, 16, 7, 0, 0, 0, 0,120, 67, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 68, 65, 84, 65, 88, 1, 0, 0,184, 70, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 72, 16, 7, + 0, 0, 0, 0, 24, 69, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112, +108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, + 76, 1, 0, 0, 20, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 72, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 73, 16, 7, 0, 0, 0, 0,184, 70, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 73, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 75, 16, 7, + 0, 0, 0, 0, 88, 72, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 80,101,114,102, +111,114,109, 97,110, 99,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, 0,242,253, + 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 75, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0,248, 73, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, +115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, +115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 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, 68, 65, 84, 65, 88, 1, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 78, 16, 7, + 0, 0, 0, 0,152, 75, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109, +112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,253, + 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,216, 78, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 80, 16, 7, 0, 0, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 80, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,216, 78, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 98, 97,107,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 98, 97,107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, + 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24, 82, 16, 7, + 0, 0, 0, 0,179, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 83, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 96, 16, 7, + 0, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, + 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, +139, 1, 0, 0, 1, 1, 27, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 95, 16, 7, + 0, 0, 0, 0, 56, 95, 16, 7, 0, 0, 0, 0, 72, 84, 16, 7, 0, 0, 0, 0, 8, 90, 16, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 72, 84, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 85, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,184, 85, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 87, 16, 7, 0, 0, 0, 0, 72, 84, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, + 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0, +139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,114, 1, 0, 0, 5, 0, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 40, 87, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152, 88, 16, 7, 0, 0, 0, 0,184, 85, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0, +102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, + 26, 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, 6, 0, 34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,152, 88, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8, 90, 16, 7, 0, 0, 0, 0, 40, 87, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, + 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0, +112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, +139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 8, 90, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 88, 16, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, +139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,114, 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,120, 91, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65, +112, 3, 0, 0,120, 91, 16, 7, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30,133,119, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, + 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, + 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, + 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, + 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, + 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, + 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 25, 25,195, 62,176,249,206, 62,128,238,196,187, + 0, 0,192,179, 55, 15,168,189,201,118,165, 61,152, 15,109, 62, 0, 0,152, 51,211,120, 21,194,144, 5, 2, 66, 6,136,213,193, +193,214,159,192,219, 38, 19, 66,196,173,255,193,154,101,210, 65,173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, + 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, + 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, + 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, + 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, + 3, 35,171,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,160, 65, 1, 2, 0, 0,255,255, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, + 1, 0, 0, 0, 0, 0,128, 63,190,133, 65, 66,100,212, 90, 66, 31,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 56, 95, 16, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, + 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, + 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,232, 96, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0, 88, 83, 16, 7, + 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6, + 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,100, 16, 7, 0, 0, 0, 0,184,100, 16, 7, + 0, 0, 0, 0,216, 97, 16, 7, 0, 0, 0, 0, 72, 99, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0,216, 97, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 99, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128, 66, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 99, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 97, 16, 7, 0, 0, 0, 0, 0, 0, 32,193, + 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,128,195,217,195,192,225,108, 68, 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0, + 32, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 14, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, + 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 32, 6, 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 67, 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, 68, 65, 84, 65, 48, 1, 0, 0,184,100, 16, 7, + 0, 0, 0, 0,191, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,215, 19, 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,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10,206, 97, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 96, 16, 7, + 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3, +140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,107, 16, 7, 0, 0, 0, 0,120,107, 16, 7, + 0, 0, 0, 0, 40,103, 16, 7, 0, 0, 0, 0, 8,106, 16, 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, 68, 65, 84, 65, 40, 1, 0, 0, 40,103, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,104, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 65, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 64, 68, 0, 0,200, 65, 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 4, 3, 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,104, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,106, 16, 7, 0, 0, 0, 0, 40,103, 16, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,106, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,104, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,129,191, 0,128, 0, 64, 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0,114, 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, 3, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,114, 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, 68, 65, 84, 65, 40, 33, 0, 0,120,107, 16, 7, + 0, 0, 0, 0,184, 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, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,240, 65, 0, 0, 0, 0, +154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1439,2088 +1281,139 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 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, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,152, 62, 19, 6, 0, 0, 0, 0,210, 0, 0, 0, - 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,232, 63, 19, 6, - 0, 0, 0, 0, 8,244, 12,108,161,127, 0, 0, 40, 69, 19, 6, 0, 0, 0, 0, 40, 37, 34,109,161,127, 0, 0, 8, 77, 19, 6, - 0, 0, 0, 0, 24, 55, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 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, 1, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,162,117, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 63, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 88, 64, 19, 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, 68, 65, 84, 65, 32, 0, 0, 0, 88, 64, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200, 64, 19, 6, - 0, 0, 0, 0,232, 63, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,200, 64, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56, 65, 19, 6, 0, 0, 0, 0, 88, 64, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,146, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 65, 19, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0,200, 64, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0, 56, 65, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 4, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136, 66, 19, 6, - 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,104, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0, 24, 66, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 66, 19, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 6,104, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6,196, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72, 68, 19, 6, - 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,196, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 68, 19, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 8, 38,109,161,127, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 6,144, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 8, 38,109,161,127, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 8,244, 12,108,161,127, 0, 0,184, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,244, 12,108,161,127, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,184, 8, 38,109,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6,224, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40, 69, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 69, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 64, 19, 6, 0, 0, 0, 0,200, 64, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152, 69, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 70, 19, 6, 0, 0, 0, 0, 40, 69, 19, 6, - 0, 0, 0, 0, 88, 64, 19, 6, 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8, 70, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 70, 19, 6, 0, 0, 0, 0,152, 69, 19, 6, - 0, 0, 0, 0,200, 64, 19, 6, 0, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120, 70, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 70, 19, 6, 0, 0, 0, 0, 8, 70, 19, 6, - 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232, 70, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 71, 19, 6, 0, 0, 0, 0,120, 70, 19, 6, - 0, 0, 0, 0,232, 63, 19, 6, 0, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 88, 71, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 71, 19, 6, 0, 0, 0, 0,232, 70, 19, 6, - 0, 0, 0, 0, 56, 65, 19, 6, 0, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,200, 71, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 72, 19, 6, 0, 0, 0, 0, 88, 71, 19, 6, - 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 56, 72, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 72, 19, 6, 0, 0, 0, 0,200, 71, 19, 6, - 0, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,168, 72, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 73, 19, 6, 0, 0, 0, 0, 56, 72, 19, 6, - 0, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 24, 73, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 73, 19, 6, 0, 0, 0, 0,168, 72, 19, 6, - 0, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136, 73, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 73, 19, 6, 0, 0, 0, 0, 24, 73, 19, 6, - 0, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248, 73, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 74, 19, 6, 0, 0, 0, 0,136, 73, 19, 6, - 0, 0, 0, 0, 56, 65, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104, 74, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 74, 19, 6, 0, 0, 0, 0,248, 73, 19, 6, - 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216, 74, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 76, 19, 6, 0, 0, 0, 0,104, 74, 19, 6, - 0, 0, 0, 0,232, 63, 19, 6, 0, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40, 76, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 76, 19, 6, 0, 0, 0, 0,216, 74, 19, 6, - 0, 0, 0, 0,136, 66, 19, 6, 0, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152, 76, 19, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,111,135,109,161,127, 0, 0, 40, 76, 19, 6, - 0, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,111,135,109,161,127, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 37, 34,109,161,127, 0, 0,152, 76, 19, 6, - 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40, 37, 34,109,161,127, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,111,135,109, -161,127, 0, 0,248, 66, 19, 6, 0, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 8, 77, 19, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 80, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0, 88, 64, 19, 6, 0, 0, 0, 0,200, 64, 19, 6, 0, 0, 0, 0, 24, 66, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,105, 4, 0, 0,146, 4, 0, 0, 7, 7,127, 7, - 42, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0, 24,172,243, 5, 0, 0, 0, 0,136, 86, 20, 6, 0, 0, 0, 0,136, 86, 20, 6, - 0, 0, 0, 0,248, 77, 19, 6, 0, 0, 0, 0,104, 79, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 54, 48,109,161,127, 0, 0,104,215, 34,109,161,127, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 77, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 79, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,105, 4, 0, 0,130, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,174,243, 5, 0, 0, 0, 0,104,247, 48,109,161,127, 0, 0,104,247, 48,109, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,208, 40,109,161,127, 0, 0, 72,215, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 79, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 77, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 1,192,237, 68, 0, 0, 0, 0, 0, 0,128, 65,110, 7, 0, 0, -127, 7, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -109, 7, 0, 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,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 16, 0,110, 7, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,131, 4, 0, 0,146, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 16, 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, 56,173,243, 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,104, 52,135,109,161,127, 0, 0,248,218, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216, 80, 19, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168,121, 19, 6, 0, 0, 0, 0, 8, 77, 19, 6, 0, 0, 0, 0,136, 66, 19, 6, - 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, 0, 0, 0, 0, 56, 65, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 4, 4, 46, 1,196, 3, 1, 0, 0, 0, 0, 0, - 0, 0, 8, 0,184,167,243, 5, 0, 0, 0, 0,104,120, 19, 6, 0, 0, 0, 0,104,120, 19, 6, 0, 0, 0, 0,200, 81, 19, 6, - 0, 0, 0, 0, 56, 83, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,116, 13,108, -161,127, 0, 0,216,163, 48,109,161,127, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 81, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 56, 83, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,151, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,151, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,150, 67, 0, 0,200, 65, 0,128,150, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 46, 1, 26, 0, 46, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0,170, 3, 0, 0,195, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 46, 1, 26, 0, 4, 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, 40,171,243, 5, 0, 0, 0, 0,232, 10, 36,109,161,127, 0, 0,232, 10, 36,109,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 32,109,161,127, 0, 0, 88,224, 12,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 83, 19, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 81, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0,128,106,196, - 0, 0, 0, 0, 0, 0, 0, 0, 1,128,142, 67, 2,128,106,196, 0, 0, 0, 0, 29, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, -169, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, -169, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 46, 1,170, 3, 29, 1,170, 3, 0, 0,200,105, 35,109,161,127, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,169, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 46, 1,170, 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,216,168,243, 5, 0, 0, 0, 0,136,239, 48,109,161,127, 0, 0,216,232, 48,109,161,127, 0, 0,168, 84, 19, 6, - 0, 0, 0, 0,200,118, 19, 6, 0, 0, 0, 0,200, 5, 13,108,161,127, 0, 0,168,229, 12,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 84, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 72, 86, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,169,243, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,220,255, 29, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 72, 86, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 87, 19, 6, 0, 0, 0, 0,168, 84, 19, 6, - 0, 0, 0, 0,216,150,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 29, 1, 61, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232, 87, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,136, 89, 19, 6, 0, 0, 0, 0, 72, 86, 19, 6, 0, 0, 0, 0, 72,153,122,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,111,255, 29, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,136, 89, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 91, 19, 6, 0, 0, 0, 0,232, 87, 19, 6, - 0, 0, 0, 0,184,155,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,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, 68,105,109,101,110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 29, 1,203, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40, 91, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,200, 92, 19, 6, 0, 0, 0, 0,136, 89, 19, 6, 0, 0, 0, 0, 40,158,122,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 29, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,200, 92, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104, 94, 19, 6, 0, 0, 0, 0, 40, 91, 19, 6, - 0, 0, 0, 0,152,160,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105, -111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 29, 1, 0, 0, 20, 0, 0, 0, - 4, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104, 94, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 8, 96, 19, 6, 0, 0, 0, 0,200, 92, 19, 6, 0, 0, 0, 0, 24,184, 80,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 29, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 8, 96, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 97, 19, 6, 0, 0, 0, 0,104, 94, 19, 6, - 0, 0, 0, 0, 40,170,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,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, 80,101,114,102,111,114,109, 97,110, 99,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, 1, 0, 0, 0, +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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 29, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 97, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 72, 99, 19, 6, 0, 0, 0, 0, 8, 96, 19, 6, 0, 0, 0, 0,152,172,122,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,218,253, 29, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 72, 99, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,100, 19, 6, 0, 0, 0, 0,168, 97, 19, 6, - 0, 0, 0, 0, 8,175,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 29, 1, 0, 0, 20, 0, 0, 0, - 4, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,100, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,136,102, 19, 6, 0, 0, 0, 0, 72, 99, 19, 6, 0, 0, 0, 0,120,177,122,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 29, 1,134, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,136,102, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,104, 19, 6, 0, 0, 0, 0,232,100, 19, 6, - 0, 0, 0, 0, 88,182,122,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 29, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 7, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,104, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,200,105, 19, 6, 0, 0, 0, 0,136,102, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,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, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,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, 83, 99,101,110,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, 0, - 0, 0, 0, 0, 0, 0,135,255, 41, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,200,105, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,107, 19, 6, 0, 0, 0, 0, 40,104, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255, 41, 1, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,107, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 8,109, 19, 6, 0, 0, 0, 0,200,105, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,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, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,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, 75,101,121,105,110,103, 32, 83,101,116,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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,191,254, 41, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 8,109, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,110, 19, 6, 0, 0, 0, 0,104,107, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121, -115,105, 99,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, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121, -115,105, 99,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, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 41, 1, 36, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,168,110, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 72,112, 19, 6, 0, 0, 0, 0, 8,109, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 41, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, - 88, 1, 0, 0, 72,112, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,113, 19, 6, 0, 0, 0, 0,168,110, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115, -116,111,109, 95,112,114,111,112,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, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115, -116,111,109, 95,112,114,111,112,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, 67,117,115,116,111,109, 32, 80,114,111,112,101, -114,116,105,101,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, 0, 0, 0, 0,223,253, 41, 1, 36, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,113, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,136,115, 19, 6, 0, 0, 0, 0, 72,112, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,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, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,187, 0,204, 0, 0, 0, 0, 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, 5, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,136,115, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,117, 19, 6, 0, 0, 0, 0,232,113, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, - 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, - 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254,187, 0,171, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,117, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,200,118, 19, 6, 0, 0, 0, 0,136,115, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,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, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,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, 73,110,102,108,117,101,110, 99,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, 0, 0, 0,223,252,187, 0, 86, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,200,118, 19, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,117, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111, -110,115,116,114, 97,105,110,116,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, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111, -110,115,116,114, 97,105,110,116,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, 79, 98,106,101, 99,116, 32, 67,111,110,115,116, -114, 97,105,110,116,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, 0, 0, 0,160,255,187, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,120, 19, 6, 0, 0, 0, 0,179, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,184,229, 34,109, -161,127, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,168,121, 19, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,126, 19, 6, 0, 0, 0, 0,216, 80, 19, 6, - 0, 0, 0, 0,232, 63, 19, 6, 0, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0,136, 66, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 6, 0, 0, 0, 0, 0, 0,143, 0, 0, 0, 15, 15, 80, 6, -144, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,123,243, 5, 0, 0, 0, 0,120,125, 19, 6, 0, 0, 0, 0,120,125, 19, 6, - 0, 0, 0, 0,152,122, 19, 6, 0, 0, 0, 0, 8,124, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 87, 41,109,161,127, 0, 0,152,144, 47,109,161,127, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,122, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,124, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,202, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0,128, 56, 0, 0,202, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,201, 68, 0, 0,200, 65, 0,224,201, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 80, 6, 26, 0, 80, 6, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6, 26, 0, 6, 0, 1, 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,152,125,243, 5, 0, 0, 0, 0,136,234,135,109,161,127, 0, 0,136,234,135,109, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,147, 36,109,161,127, 0, 0, 8,235, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,124, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,122, 19, 6, 0, 0, 0, 0, 0, 0, 64,192, - 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 79, 6, 0, 0, 18, 0, 0, 0,117, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, - 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 80, 6,118, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6,118, 0, 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,168,124,243, 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, 72,236, 12,108,161,127, 0, 0,248,241, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,120,125, 19, 6, - 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,152,126, 19, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 55, 20, 6, 0, 0, 0, 0,168,121, 19, 6, - 0, 0, 0, 0,104, 67, 19, 6, 0, 0, 0, 0,248, 66, 19, 6, 0, 0, 0, 0, 24, 66, 19, 6, 0, 0, 0, 0,216, 67, 19, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0,197, 3, 0, 0,103, 4, 0, 0, 3, 3, 46, 1, -163, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0,136,120,243, 5, 0, 0, 0, 0,104,130, 19, 6, 0, 0, 0, 0,104,130, 19, 6, - 0, 0, 0, 0,136,127, 19, 6, 0, 0, 0, 0,248,128, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 29, 82,109,161,127, 0, 0,120, 31, 49,109,161,127, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,127, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,128, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,151, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,151, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,150, 67, 0, 0,200, 65, 0,128,150, 67, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 46, 1, 26, 0, 46, 1, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0, 78, 4, 0, 0,103, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 1, 26, 0, 8, 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,152,122,243, 5, 0, 0, 0, 0, 88, 78, 38,109,161,127, 0, 0, 88, 78, 38,109, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,186, 32,109,161,127, 0, 0, 88,247, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,128, 19, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,127, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,142, 67, 0, 0,242,194, 0, 0, 0,192, 29, 1, 0, 0, - 46, 1, 0, 0, 18, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 28, 1, 0, 0, 18, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 18, 4, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 46, 1,137, 0, 29, 1,119, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 6, 0, 0,126, 7, 0, 0,197, 3, 0, 0, 77, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 1,137, 0, 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,168,121,243, 5, 0, 0, 0, 0, 88, 90, 36,109,161,127, 0, 0, 88, 90, 36,109, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 42, 41,109,161,127, 0, 0, 8,251, 12,108, -161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,104,130, 19, 6, - 0, 0, 0, 0,183, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 17, 49,109,161,127, 0, 0,248, 17, 49,109, -161,127, 0, 0,200,131, 19, 6, 0, 0, 0, 0, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 16, 0, 0, 0,200,131, 19, 6, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 42, 11, 0, 0, - 42, 11, 0, 0, 40,132, 19, 6, 0, 0, 0, 0, 68, 65, 84, 65,160,178, 0, 0, 40,132, 19, 6, 0, 0, 0, 0,236, 0, 0, 0, - 42, 11, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, - 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,152,136, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,146, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,200, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,159, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,181, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,153, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,131, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,139, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,130, 21, 6, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,221, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 3, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 8,232, 21, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248,227, 22, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,200,130, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,131, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,216,131, 21, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,232,159, 21, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,168,200, 21, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,104,139, 21, 6, - 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0, 8,146, 21, 6, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 8,146, 21, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0, 72,153, 21, 6, - 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 72,153, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,110, 18, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,110, 18, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24,210, 18, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24,210, 18, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24,210, 18, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24,210, 18, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24,210, 18, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24,210, 18, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152, 62, 19, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24, 87, 20, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24, 87, 20, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24, 87, 20, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24, 87, 20, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24, 87, 20, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,246, 20, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,246, 20, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,246, 20, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,246, 20, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,246, 20, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184, 61, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184, 61, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184, 61, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184, 61, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 61, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184, 61, 21, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,181, 21, 6, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,107, 18, 6, - 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,107, 18, 6, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152,136, 21, 6, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,152,136, 21, 6, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24, 55, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,152,126, 19, 6, 0, 0, 0, 0, 72, 68, 19, 6, 0, 0, 0, 0,168, 65, 19, 6, 0, 0, 0, 0,248, 66, 19, 6, - 0, 0, 0, 0,184, 68, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 6, 0, 0,145, 0, 0, 0, -103, 4, 0, 0, 1, 1, 80, 6,215, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0,136,126,243, 5, 0, 0, 0, 0,216, 84, 20, 6, - 0, 0, 0, 0,216, 84, 20, 6, 0, 0, 0, 0, 8, 56, 20, 6, 0, 0, 0, 0,168, 79, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32, 82,109,161,127, 0, 0,216,185, 34,109,161,127, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 8, 56, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 57, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,192,108, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,202, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,201, 68, 0, 0,200, 65, 0,224,201, 68, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 80, 6, 26, 0, 80, 6, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 6, 0, 0,145, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 6, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,136,243, 5, 0, 0, 0, 0,248,212, 33,109, -161,127, 0, 0,248,212, 33,109,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 50, 48,109, -161,127, 0, 0,136, 4, 13,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,120, 57, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 75, 20, 6, 0, 0, 0, 0, 8, 56, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 57,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 57,196, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,228, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,229, 2,143, 0, -229, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,131, 1, 0, 0, -103, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,229, 2, 11, 0, 5, 0, 3, 0, 0, 0, - 0, 0, 0, 0,160, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,133,243, 5, 0, 0, 0, 0,216,230, 34,109, -161,127, 0, 0,216,230, 34,109,161,127, 0, 0,232, 58, 20, 6, 0, 0, 0, 0,136, 73, 20, 6, 0, 0, 0, 0,152,232, 12,108, -161,127, 0, 0, 56, 8, 13,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,232, 58, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 60, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,218,125,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 79, 98,106,101, 99,116, 32, 84,111,111,108,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,136, 60, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 40, 62, 20, 6, 0, 0, 0, 0,232, 58, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,117,254,143, 0,115, 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, 68, 65, 84, 65, - 88, 1, 0, 0, 40, 62, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 63, 20, 6, 0, 0, 0, 0,136, 60, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95, 98,114,117,115,104, 95,116,111,111,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95, 98,114,117,115,104, 95,116,111,111,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, 84,111,111,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,143, 0, 61, 0, 0, 0, 0, 0, - 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200, 63, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,104, 65, 20, 6, 0, 0, 0, 0, 40, 62, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,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, 83,116,114,111,107,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, - 0, 0, 0, 0, 0, 0, 69,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,104, 65, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 67, 20, 6, 0, 0, 0, 0,200, 63, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,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, 67,117,114,118,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, 0, 0, 0, 0, 0, 0, 0, 45,254,143, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 8, 67, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,168, 68, 20, 6, 0, 0, 0, 0,104, 65, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, - 97,110, 99,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, - 97,110, 99,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, 65,112,112,101, 97,114, 97,110, 99,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, 0, 0,229,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,168, 68, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 70, 20, 6, 0, 0, 0, 0, 8, 67, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, -111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,116,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253,143, 0,146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 72, 70, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,232, 71, 20, 6, 0, 0, 0, 0,168, 68, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114, -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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114, -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, 84,101,120,116,117,114,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, 0, 0, 0, 0, 0, 93,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,232, 71, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 73, 20, 6, 0, 0, 0, 0, 72, 70, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99, -117,108,112,116, 95,111,112,116,105,111,110,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99, -117,108,112,116, 95,111,112,116,105,111,110,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, 79,112,116,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254,143, 0, 0, 0, 0, 0, 0, 0, - 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136, 73, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 71, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,253,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 40, 75, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56, 78, 20, 6, 0, 0, 0, 0,120, 57, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0,227,102, 16, 67, 24, 30, 90,195, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,216, 0,143, 0, -216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,171, 0, 0, 0, -130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0, 12, 0, 6, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,134,243, 5, 0, 0, 0, 0,136,136, 41,109, -161,127, 0, 0,136,136, 41,109,161,127, 0, 0,152, 76, 20, 6, 0, 0, 0, 0,152, 76, 20, 6, 0, 0, 0, 0,248,179, 41,109, -161,127, 0, 0,232, 11, 13,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 76, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,136,135,243, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97, -115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97, -115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,101,114, 97,116,111,114, 0,100,101, 0, - 32, 77,111,100,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,216,255,144, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 78, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,168, 79, 20, 6, 0, 0, 0, 0, 40, 75, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 96,158,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 96,158,196, 0,128,142,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, -213, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, -213, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 6, 0, 0, 79, 6, 0, 0,171, 0, 0, 0,103, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,152,128,243, 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, 68, 65, 84, 65, 40, 1, 0, 0,168, 79, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 78, 20, 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, 0,160, 0, 0, 0, 79, 6, 0, 0,171, 0, 0, 0,103, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,176, 5,189, 3, 13, 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,168,127,243, 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,168, 45, 13,108,161,127, 0, 0,216, 44, 13,108,161,127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 81, 20, 6, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 24, 81, 20, 6, 0, 0, 0, 0,173, 0, 0, 0, - 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,255,212, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 11,210, 76,190, - 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, - 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, - 0, 0,128, 63, 68,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, - 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65, 51,120,173,192,115,208,213, 64, - 0, 0,128, 63,180,157,229, 62, 57, 36, 43,191,116,169, 81,191,184,158, 81,191,118, 90,127, 63,212,251,164, 62,158, 53,185, 62, - 35, 44,185, 62,147,180,109,188,194,164,190, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, - 33,210,111, 65,100,240,191, 62,110,116, 85, 63, 32,185, 70,188, 0, 0, 80,180,122, 55,119,190, 96, 82,238, 61,227,177, 9, 63, - 0, 0,248, 51,197,112,117,194,179,208,216, 65,220,158, 5,194,231,251,159,192,221, 54,114, 66, 30,247,213,193, 58,221, 3, 66, - 25, 4,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, - 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, - 0, 0,128, 63,180,157,229, 62, 57, 36, 43,191,116,169, 81,191,184,158, 81,191,118, 90,127, 63,212,251,164, 62,158, 53,185, 62, - 35, 44,185, 62,147,180,109,188,194,164,190, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, - 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3528,802 +1421,2397 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,182,180, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,182,180, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,182,180, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 33,210,111, 65, 33,210,111, 65, 0, 0, 0, 0, - 0, 0, 0, 0,146,156,164, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 32, 33, 12, 66, 85,152,137, 66, -113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,216, 84, 20, 6, - 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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, 1, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 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, 16, 0, 10, 0, 7, 1, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0,210, 0, 0, 0, - 1, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0,152, 62, 19, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,104, 88, 20, 6, - 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0,136, 94, 20, 6, 0, 0, 0, 0, 72,103, 20, 6, 0, 0, 0, 0,184,103, 20, 6, - 0, 0, 0, 0,216,159, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 88, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,216, 88, 20, 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, 68, 65, 84, 65, 32, 0, 0, 0,216, 88, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72, 89, 20, 6, - 0, 0, 0, 0,104, 88, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 72, 89, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 89, 20, 6, 0, 0, 0, 0,216, 88, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 89, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0, 72, 89, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0,184, 89, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8, 91, 20, 6, - 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0,152, 90, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 91, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200, 92, 20, 6, - 0, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0, 88, 92, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 93, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 5,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,140, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136, 94, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 94, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216, 88, 20, 6, 0, 0, 0, 0, 72, 89, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248, 94, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 95, 20, 6, 0, 0, 0, 0,136, 94, 20, 6, - 0, 0, 0, 0,216, 88, 20, 6, 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104, 95, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 95, 20, 6, 0, 0, 0, 0,248, 94, 20, 6, - 0, 0, 0, 0, 72, 89, 20, 6, 0, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216, 95, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 96, 20, 6, 0, 0, 0, 0,104, 95, 20, 6, - 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72, 96, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 96, 20, 6, 0, 0, 0, 0,216, 95, 20, 6, - 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184, 96, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 97, 20, 6, 0, 0, 0, 0, 72, 96, 20, 6, - 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40, 97, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 97, 20, 6, 0, 0, 0, 0,184, 96, 20, 6, - 0, 0, 0, 0,184, 89, 20, 6, 0, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152, 97, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 98, 20, 6, 0, 0, 0, 0, 40, 97, 20, 6, - 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8, 98, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 98, 20, 6, 0, 0, 0, 0,152, 97, 20, 6, - 0, 0, 0, 0,104, 88, 20, 6, 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120, 98, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 98, 20, 6, 0, 0, 0, 0, 8, 98, 20, 6, - 0, 0, 0, 0,104, 88, 20, 6, 0, 0, 0, 0,232, 91, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232, 98, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 99, 20, 6, 0, 0, 0, 0,120, 98, 20, 6, - 0, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 88, 99, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 99, 20, 6, 0, 0, 0, 0,232, 98, 20, 6, - 0, 0, 0, 0,184, 89, 20, 6, 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,200, 99, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,100, 20, 6, 0, 0, 0, 0, 88, 99, 20, 6, - 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 56,100, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,100, 20, 6, 0, 0, 0, 0,200, 99, 20, 6, - 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,168,100, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,101, 20, 6, 0, 0, 0, 0, 56,100, 20, 6, - 0, 0, 0, 0,152, 90, 20, 6, 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 24,101, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,101, 20, 6, 0, 0, 0, 0,168,100, 20, 6, - 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136,101, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,101, 20, 6, 0, 0, 0, 0, 24,101, 20, 6, - 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248,101, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,102, 20, 6, 0, 0, 0, 0,136,101, 20, 6, - 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104,102, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,102, 20, 6, 0, 0, 0, 0,248,101, 20, 6, - 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,102, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,103, 20, 6, 0, 0, 0, 0,104,102, 20, 6, - 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,103, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,102, 20, 6, - 0, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,184,103, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,107, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 90, 20, 6, 0, 0, 0, 0,216, 88, 20, 6, 0, 0, 0, 0, 72, 89, 20, 6, 0, 0, 0, 0,152, 90, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, - 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,166, 20, 6, 0, 0, 0, 0,152,166, 20, 6, - 0, 0, 0, 0,168,104, 20, 6, 0, 0, 0, 0, 24,106, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,168,104, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,106, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,106, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,104, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0, 0, 0, 0, 64,112, 7, 0, 0, -129, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -111, 7, 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,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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, 5, 4, 0, 0, 5, 4, 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, 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, 68, 65, 84, 65,160, 0, 0, 0,136,107, 20, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,132, 20, 6, 0, 0, 0, 0,184,103, 20, 6, 0, 0, 0, 0,232, 91, 20, 6, - 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0,184, 89, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1,140, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,130, 20, 6, 0, 0, 0, 0,216,130, 20, 6, 0, 0, 0, 0,120,108, 20, 6, - 0, 0, 0, 0,232,109, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,120,108, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,232,109, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,109, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,108, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0, 0, 61,196, - 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0, -113, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0, -113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 1,114, 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, 88,111, 20, 6, - 0, 0, 0, 0, 56,129, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0, 88,111, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,248,112, 20, 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, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,248,112, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,114, 20, 6, 0, 0, 0, 0, 88,111, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,114, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 56,116, 20, 6, 0, 0, 0, 0,248,112, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 56,116, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,117, 20, 6, 0, 0, 0, 0,152,114, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,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, 68,105,109,101,110,115,105,111,110,115, 0, 0, +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,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,120,141, 16, 7, + 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1,203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0, 88,156, 16, 7, + 0, 0, 0, 0,200,156, 16, 7, 0, 0, 0, 0,216,134, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 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, 1, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,104,118, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,142, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,143, 16, 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, 68, 65, 84, 65, 32, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,144, 16, 7, + 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,168,143, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,144, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 64, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,145, 16, 7, + 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,104,145, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,146, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 5,160, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,160, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,147, 16, 7, + 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,148, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,140, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,148, 16, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,188, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,148, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,188, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,149, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,149, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,149, 16, 7, + 0, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,149, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,150, 16, 7, + 0, 0, 0, 0, 88,149, 16, 7, 0, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,150, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,150, 16, 7, + 0, 0, 0, 0,200,149, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,150, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,151, 16, 7, + 0, 0, 0, 0, 56,150, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,151, 16, 7, + 0, 0, 0, 0,168,150, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,151, 16, 7, + 0, 0, 0, 0, 24,151, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,152, 16, 7, + 0, 0, 0, 0,136,151, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,152, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,152, 16, 7, + 0, 0, 0, 0,248,151, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,152, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,153, 16, 7, + 0, 0, 0, 0,104,152, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,153, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,153, 16, 7, + 0, 0, 0, 0,216,152, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,153, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,154, 16, 7, + 0, 0, 0, 0, 72,153, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,154, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,154, 16, 7, + 0, 0, 0, 0,184,153, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,154, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,155, 16, 7, + 0, 0, 0, 0, 40,154, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,155, 16, 7, + 0, 0, 0, 0,152,154, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,155, 16, 7, + 0, 0, 0, 0, 8,155, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,156, 16, 7, + 0, 0, 0, 0,120,155, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,156, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,232,155, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,156, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,160, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,168,143, 16, 7, + 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, + 98, 4, 0, 0, 7, 7, 63, 6, 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,184,206,240, 6, 0, 0, 0, 0, 72,166, 17, 7, + 0, 0, 0, 0, 72,166, 17, 7, 0, 0, 0, 0,184,157, 16, 7, 0, 0, 0, 0, 40,159, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 79, 55, 8, 0, 0, 0, 0,232,143,100, 7, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,184,157, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,159, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,188, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, + 90, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,208,240, 6, 0, 0, 0, 0,168, 67, 66, 8, + 0, 0, 0, 0,168, 67, 66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,252, 31, 7, + 0, 0, 0, 0, 8,191, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 40,159, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,157, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 0,192,197, 68, 0, 0,128, 64, + 0, 0, 64, 65, 46, 6, 0, 0, 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0, 63, 6, 8, 0, 46, 6, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 91, 4, 0, 0, + 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 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,216,207,240, 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,184,194, 31, 7, + 0, 0, 0, 0,104,205, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,152,160, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0,200,156, 16, 7, + 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 4, 4,250, 0, +160, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,202,240, 6, 0, 0, 0, 0, 40,200, 16, 7, 0, 0, 0, 0, 40,200, 16, 7, + 0, 0, 0, 0,136,161, 16, 7, 0, 0, 0, 0,248,162, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,104,160, 31, 7, 0, 0, 0, 0,216,106, 56, 8, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,161, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,162, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +249, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,121, 67, 0, 0,200, 65, 0, 0,121, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,250, 0, 26, 0,250, 0, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,134, 3, 0, 0,159, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0, 26, 0, 4, 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,200,205,240, 6, 0, 0, 0, 0,232, 93, 53, 8, 0, 0, 0, 0,232, 93, 53, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,159, 56, 8, 0, 0, 0, 0, 24, 1, 32, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,162, 16, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,161, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,178, 67, 0,128, 97,196, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,105, 67, 3,128, 97,196, 0, 0, 0, 0,233, 0, 0, 0, +250, 0, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +232, 0, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,250, 0,134, 3,233, 0,134, 3, 0, 0,168,160, 50, 8, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,134, 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,120,203,240, 6, 0, 0, 0, 0, 40,136, 55, 8, 0, 0, 0, 0,200, 28, 49, 8, + 0, 0, 0, 0,104,164, 16, 7, 0, 0, 0, 0,136,198, 16, 7, 0, 0, 0, 0,184, 2, 32, 7, 0, 0, 0, 0,152, 7, 32, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,164, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,166, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,204,240, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,117, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,120,119, 20, 6, 0, 0, 0, 0, 56,116, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,233, 0, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 8,166, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,167, 16, 7, + 0, 0, 0, 0,104,164, 16, 7, 0, 0, 0, 0,200,233,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,101,110,100, +101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, +233, 0, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, - 88, 1, 0, 0,120,119, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,121, 20, 6, 0, 0, 0, 0,216,117, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105, -111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 76, 1, 0, 0, 20, 0, 0, 0, - 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,167, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,169, 16, 7, 0, 0, 0, 0, 8,166, 16, 7, 0, 0, 0, 0, 56,236,137, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,121, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,184,122, 20, 6, 0, 0, 0, 0,120,119, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,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, 0, - 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 0, 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,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 72,169, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,170, 16, 7, + 0, 0, 0, 0,168,167, 16, 7, 0, 0, 0, 0,168,238,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 68,105,109,101, +110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, +233, 0,203, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,184,122, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,124, 20, 6, 0, 0, 0, 0, 24,121, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,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, 80,101,114,102,111,114,109, 97,110, 99,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, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,170, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,172, 16, 7, 0, 0, 0, 0, 72,169, 16, 7, 0, 0, 0, 0, 24,241,137, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,233, 0, 58, 0, 20, 0, 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,124, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,248,125, 20, 6, 0, 0, 0, 0,184,122, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,172, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,174, 16, 7, + 0, 0, 0, 0,232,170, 16, 7, 0, 0, 0, 0,136,243,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112, +108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, +233, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 40,174, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,175, 16, 7, 0, 0, 0, 0,136,172, 16, 7, 0, 0, 0, 0,184,143, 97, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,248,125, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,127, 20, 6, 0, 0, 0, 0, 88,124, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 76, 1, 0, 0, 20, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 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, 10,254,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,127, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 56,129, 20, 6, 0, 0, 0, 0,248,125, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,175, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,177, 16, 7, + 0, 0, 0, 0, 40,174, 16, 7, 0, 0, 0, 0, 24,253,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 80,101,114,102, +111,114,109, 97,110, 99,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, 0,242,253, +233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,177, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,200,175, 16, 7, 0, 0, 0, 0,136,255,137, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, +115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, +115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 56,129, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,127, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,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, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,180, 16, 7, + 0, 0, 0, 0,104,177, 16, 7, 0, 0, 0, 0,248, 1,138, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109, +112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,253, +233, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,168,180, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,182, 16, 7, 0, 0, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,104, 4,138, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,216,130, 20, 6, 0, 0, 0, 0,179, 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, 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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,233, 0,134, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 24,132, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,139, 20, 6, 0, 0, 0, 0,136,107, 20, 6, - 0, 0, 0, 0,104, 88, 20, 6, 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0,120, 91, 20, 6, 0, 0, 0, 0,232, 91, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 17, 17, 32, 6, -140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,138, 20, 6, 0, 0, 0, 0,248,138, 20, 6, - 0, 0, 0, 0, 8,133, 20, 6, 0, 0, 0, 0,136,137, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 8,133, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,134, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,182, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,183, 16, 7, + 0, 0, 0, 0,168,180, 16, 7, 0, 0, 0, 0, 72, 9,138, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 98, 97,107,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, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 98, 97,107,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, 66, 97,107,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, - 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 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, 12,253, +233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,134, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,137, 20, 6, 0, 0, 0, 0, 8,133, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 67, 0, 0,185,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195, 0, 0, 0, 0,203, 0, 0, 0, -220, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0,114, 1, 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, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,114, 1, 0, 0, 4, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,183, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,185, 16, 7, 0, 0, 0, 0, 72,182, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,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,232,135, 20, 6, 0, 0, 0, 0,232,135, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,135, 20, 6, - 0, 0, 0, 0,213, 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, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,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, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110,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, 0, 0, 0, 0, 0, 80,114,111,112,101,114,116,105,101,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,135,255, 41, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,185, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,187, 16, 7, + 0, 0, 0, 0,232,183, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, + 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, + 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116, +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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255, + 41, 1, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,137, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,134, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67, 0, 80, 31,195, - 0,234,179, 68,224,198,182,194,184,177,165, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, - 50, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, - 0, 0, 68, 5,114, 1, 51, 5, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, - 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,187, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,188, 16, 7, 0, 0, 0, 0,136,185, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,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, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,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, 75,101,121,105,110,103, 32, 83,101,116,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, 68, 65, 84, 65, 72, 0, 0, 0,248,138, 20, 6, 0, 0, 0, 0,192, 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, 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,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,136,139, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,146, 20, 6, - 0, 0, 0, 0, 24,132, 20, 6, 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0,152, 90, 20, 6, - 0, 0, 0, 0, 88, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0, -233, 3, 0, 0, 9, 9, 62, 2, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,143, 20, 6, - 0, 0, 0, 0, 88,143, 20, 6, 0, 0, 0, 0,120,140, 20, 6, 0, 0, 0, 0,232,141, 20, 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, 68, 65, 84, 65, - 40, 1, 0, 0,120,140, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,141, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 15, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68, 0, 0,200, 65, 0, 64, 15, 68, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 62, 2, 26, 0, 62, 2, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0, -166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,254, 41, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,232,141, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,140, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0, - 86, 26, 3, 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, 61, 2, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 62, 2, 67, 2, 62, 2, - 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,167, 1, 0, 0, -233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,188, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,190, 16, 7, + 0, 0, 0, 0, 40,187, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, + 69, 95, 80, 84, 95,112,104,121,115,105, 99,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, 0, 0, 0, 83, 67, 69, 78, + 69, 95, 80, 84, 95,112,104,121,115,105, 99,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, 0, 0, 0, 71,114, 97,118, +105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, + 41, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, -160, 2, 0, 0, 88,143, 20, 6, 0, 0, 0, 0,186, 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, 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, 68, 65, 84, 65, 88, 1, 0, 0,104,190, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,192, 16, 7, 0, 0, 0, 0,200,188, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 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, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 41, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 68, 65, 84, 65, 88, 1, 0, 0, 8,192, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,193, 16, 7, + 0, 0, 0, 0,104,190, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, + 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,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, 83, 67, 69, 78, + 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,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, 67,117,115,116, +111,109, 32, 80,114,111,112,101,114,116,105,101,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, 0, 0, 0, 0,223,253, + 41, 1, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,193, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,195, 16, 7, 0, 0, 0, 0, 8,192, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116, +101,120,116,117,114,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, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116, +101,120,116,117,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,187, 0,204, 0, 0, 0, 0, 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, 5, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,195, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,196, 16, 7, + 0, 0, 0, 0,168,193, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, + 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 88, 84, + 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112, +105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254, +187, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,196, 16, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,198, 16, 7, 0, 0, 0, 0, 72,195, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,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, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,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, 73,110,102,108,117,101,110, 99,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, 0, 0, 0,223,252,187, 0, 86, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,146, 20, 6, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,159, 20, 6, 0, 0, 0, 0,136,139, 20, 6, 0, 0, 0, 0,168, 93, 20, 6, - 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0, 56, 93, 20, 6, 0, 0, 0, 0,200, 92, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3, 93, 2, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,158, 20, 6, 0, 0, 0, 0, 40,158, 20, 6, 0, 0, 0, 0, 56,147, 20, 6, - 0, 0, 0, 0,248,152, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,147, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,168,148, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 3, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,126, 68, 0, 0,200, 65, 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,251, 3, 26, 0, 0, 0, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0,136,198, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,232,196, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, + 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,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, 79, 66, 74, 69, + 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,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, 79, 98,106,101, + 99,116, 32, 67,111,110,115,116,114, 97,105,110,116,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, 0, 0, 0,160,255, +187, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,148, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 24,150, 20, 6, 0, 0, 0, 0, 56,147, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 67, 2, 0, 0, 5, 0, 3, 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, 68, 65, 84, 65,248, 0, 0, 0, 40,200, 16, 7, + 0, 0, 0, 0,179, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,150, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,136,151, 20, 6, 0, 0, 0, 0,168,148, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, - 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,151, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,248,152, 20, 6, 0, 0, 0, 0, 24,150, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 0,109,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,109,196, 0,128,145,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, -144, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, -144, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 5, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, + 0, 0, 0, 0,232,246, 49, 8, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,206, 16, 7, + 0, 0, 0, 0,152,160, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,152,147, 16, 7, + 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0, +139, 0, 0, 0, 15, 15, 68, 5,140, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,158,240, 6, 0, 0, 0, 0, 56,205, 16, 7, + 0, 0, 0, 0, 56,205, 16, 7, 0, 0, 0, 0, 88,202, 16, 7, 0, 0, 0, 0,200,203, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,195, 31, 7, 0, 0, 0, 0,232,201, 31, 7, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 88,202, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,203, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,146, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,168, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,168, 68, 0, 0,200, 65, 0, 96,168, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 5, 26, 0, 68, 5, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 26, 0, 6, 0, 1, 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, 56,160,240, 6, 0, 0, 0, 0,136,188, 50, 8, + 0, 0, 0, 0,136,188, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 9, 32, 7, + 0, 0, 0, 0,152,250, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,200,203, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,202, 16, 7, + 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, + 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 18, 0, 0, 0,113, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, + 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 68, 5,114, 0, 0, 0, + 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, 5, 0, 0, 26, 0, 0, 0, +139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 0, 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, 72,159,240, 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, 72,236, 31, 7, + 0, 0, 0, 0, 88,247, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +208, 0, 0, 0, 56,205, 16, 7, 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, + 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,206, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,134, 17, 7, + 0, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,248,144, 16, 7, + 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,161, 3, 0, 0, + 63, 4, 0, 0, 3, 3,250, 0,159, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 40,155,240, 6, 0, 0, 0, 0, 40,210, 16, 7, + 0, 0, 0, 0, 40,210, 16, 7, 0, 0, 0, 0, 72,207, 16, 7, 0, 0, 0, 0,184,208, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,206, 31, 7, 0, 0, 0, 0, 56,216, 31, 7, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 72,207, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,208, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,121, 67, 0, 0,200, 65, 0, 0,121, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,250, 0, 26, 0,250, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 38, 4, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0, 26, 0, 8, 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, 56,157,240, 6, 0, 0, 0, 0, 88, 17, 32, 7, + 0, 0, 0, 0, 88, 17, 32, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,248, 31, 7, + 0, 0, 0, 0,168,213, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,184,208, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,207, 16, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,106, 67, 0, 0,230,194, + 0, 0, 0, 0,233, 0, 0, 0,250, 0, 0, 0, 18, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,232, 0, 0, 0, 18, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,250, 0,133, 0,233, 0, +115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,161, 3, 0, 0, + 37, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,133, 0, 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, 72,156,240, 6, 0, 0, 0, 0,232,227, 50, 8, + 0, 0, 0, 0,232,227, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,209, 50, 8, + 0, 0, 0, 0,184, 15, 32, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 1, 0, 0, 40,210, 16, 7, 0, 0, 0, 0,183, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,205, 55, 8, + 0, 0, 0, 0,104,205, 55, 8, 0, 0, 0, 0,136,211, 16, 7, 0, 0, 0, 0, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 16, 0, 0, 0,136,211, 16, 7, 0, 0, 0, 0,237, 0, 0, 0, + 1, 0, 0, 0, 42, 11, 0, 0, 42, 11, 0, 0,232,211, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,160,178, 0, 0,232,211, 16, 7, + 0, 0, 0, 0,236, 0, 0, 0, 42, 11, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, + 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, + 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, + 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 3, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 30, 0,255,255, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, + 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0, + 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0, + 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0, + 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 1, 0, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 3, 0, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 5, 0, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 7, 0, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 9, 0, + 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 0, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, + 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,134, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,206, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,136,144, 16, 7, + 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 5, 0, 0,141, 0, 0, 0, 63, 4, 0, 0, 1, 1, 68, 5,179, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 40,161,240, 6, + 0, 0, 0, 0,152,164, 17, 7, 0, 0, 0, 0,152,164, 17, 7, 0, 0, 0, 0,200,135, 17, 7, 0, 0, 0, 0,104,159, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,142, 55, 8, 0, 0, 0, 0, 56,228, 31, 7, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,135, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,137, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,108, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0,128,168, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,168, 68, + 0, 0,200, 65, 0, 96,168, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0, 68, 5, 26, 0, 68, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 5, 0, 0,141, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 26, 0, + 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,171,240, 6, + 0, 0, 0, 0,232,208, 48, 8, 0, 0, 0, 0,232,208, 48, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,187, 31, 7, 0, 0, 0, 0,184, 19,238, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,137, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,154, 17, 7, + 0, 0, 0, 0,200,135, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 48,196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 67, 0, 64, 48,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 0, 0, 0, 0, +142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 0,160, 0,193, 2,143, 0,193, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +159, 0, 0, 0,127, 1, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,193, 2, + 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,160, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,168,240, 6, + 0, 0, 0, 0, 40,225, 54, 8, 0, 0, 0, 0, 40,225, 54, 8, 0, 0, 0, 0,168,138, 17, 7, 0, 0, 0, 0, 72,153, 17, 7, + 0, 0, 0, 0,152, 58, 51, 8, 0, 0, 0, 0, 40,244, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,138, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,140, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 35,141, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 79, 98,106,101, + 99,116, 32, 84,111,111,108,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253, +143, 0,255, 1, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 72,140, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,141, 17, 7, 0, 0, 0, 0,168,138, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,254,143, 0,115, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,141, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,143, 17, 7, + 0, 0, 0, 0, 72,140, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,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, 84,111,111,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254, +143, 0, 61, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,143, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,145, 17, 7, 0, 0, 0, 0,232,141, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95,115,116,114,111,107,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95,115,116,114,111,107,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, 83,116,114,111,107,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, 0, 0, 0, 0, 0, 0, 69,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,152, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,151, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,145, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,146, 17, 7, + 0, 0, 0, 0,136,143, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,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, 67,117,114,118, +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, 0, 0, 0, 0, 0, 0, 0, 45,254, +143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,200,146, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,148, 17, 7, 0, 0, 0, 0, 40,145, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95, 97,112,112,101, 97,114, 97,110, 99,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95, 97,112,112,101, 97,114, 97,110, 99,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, 65,112,112,101, 97,114, 97,110, 99,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, 0, 0,229,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 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, 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,251, 3, 67, 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, 68, 65, 84, 65, 88, 1, 0, 0,104,148, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,150, 17, 7, + 0, 0, 0, 0,200,146, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,112,116,105, +111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253, +143, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,104,154, 20, 6, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,104,154, 20, 6, 0, 0, 0, 0,173, 0, 0, 0, - 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63,149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,107, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,150, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,151, 17, 7, 0, 0, 0, 0,104,148, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95,116,101,120,116,117,114,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, +104, 95,116,101,120,116,117,114,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, 84,101,120,116,117,114,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, 0, 0, 0, 0, 0, 93,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,151, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,153, 17, 7, + 0, 0, 0, 0, 8,150, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,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, 79,112,116,105, +111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254, +143, 0, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,153, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,151, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109, +109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109, +109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, - 0, 0, 0, 0,221, 57, 80, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 0, 0, 5, 0,251,251, 0, 0, - 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,180, 66, 0, 0,180, 66, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 40,158, 20, 6, - 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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,253,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 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, 16, 0, 10, 0, 7, 1, - 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, 68, 65, 84, 65, 40, 1, 0, 0,232,154, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,157, 17, 7, + 0, 0, 0, 0, 56,137, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0, +227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, +142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +159, 0, 0, 0,167, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0, + 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,169,240, 6, + 0, 0, 0, 0,248, 23, 55, 8, 0, 0, 0, 0,248, 23, 55, 8, 0, 0, 0, 0, 88,156, 17, 7, 0, 0, 0, 0, 88,156, 17, 7, + 0, 0, 0, 0,168,178, 50, 8, 0, 0, 0, 0,120,106, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,156, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,170,240, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 73, 69, 87, + 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, + 83, 99,114,101,101,110, 0, 0, 32, 77,111,100,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,216,255, +144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,157, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,159, 17, 7, 0, 0, 0, 0,232,154, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 67, 0, 96,158,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 96,158,196, 0,128,142,195,163, 0, 0, 0, +180, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +162, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 67, 5, 0, 0,167, 0, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,163,240, 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, 68, 65, 84, 65,160, 0, 0, 0,216,159, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,146, 20, 6, 0, 0, 0, 0, 8, 91, 20, 6, 0, 0, 0, 0, 40, 90, 20, 6, - 0, 0, 0, 0, 24, 94, 20, 6, 0, 0, 0, 0,168, 93, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 1, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168,163, 20, 6, 0, 0, 0, 0,168,163, 20, 6, 0, 0, 0, 0,200,160, 20, 6, 0, 0, 0, 0, 56,162, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,200,160, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,162, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,162, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,161, 67, - 0, 0,200, 65, 0,128,161, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 68, 1, 26, 0, 68, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 1, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 26, 0, - 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,159, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,157, 17, 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, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,162, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,160, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,153, 67, 0, 64, 12,196, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, - 50, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, - 6, 0, 68, 1, 67, 2, 51, 1, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 67, 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,160, 0, 0, 0, 67, 5, 0, 0,167, 0, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 4,153, 3, 13, 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, 72,162,240, 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, 8,239, 52, 8, 0, 0, 0, 0, 56,238, 52, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,160, 17, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,216,160, 17, 7, + 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26,150,180, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0, 11,210, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, +143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, 68,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190, +142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65, + 51,120,173,192,115,208,213, 64, 0, 0,128, 63,178,157,229, 62, 51, 25, 17,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63, +176,224,139, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 2,162,161, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, + 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 39,240,191, 62,124,116, 85, 63, 48,189, 70,188, 0, 0,184,180, 61,203,145,190, + 88,140, 12, 62,193,104, 34, 63, 0, 0, 78, 52,197,112,117,194,178,208,216, 65,220,158, 5,194,231,251,159,192,221, 54,114, 66, + 29,247,213,193, 58,221, 3, 66, 25, 4,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, +143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63,178,157,229, 62, 51, 25, 17,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63, +176,224,139, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 2,162,161, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, + 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,168,163, 20, 6, 0, 0, 0, 0,183, 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, 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, 0, 0, 0, 0, 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,165, 20, 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, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 8,165, 20, 6, - 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,104,165, 20, 6, 0, 0, 0, 0, 68, 65, 84, 65, -224, 0, 0, 0,104,165, 20, 6, 0, 0, 0, 0,236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8,110, 21, 6, - 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, - 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,152,136, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,146, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,200, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,159, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,181, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,153, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,131, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,139, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,130, 21, 6, - 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 40,167, 20, 6, - 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,152,246, 20, 6, 0, 0, 0, 0, 24, 87, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 33,210,111, 65, + 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 9,191,201, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 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,128, 63, + 32, 33, 12, 66, 85,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0,152,164, 17, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, +205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63, +205,204,204, 61, 0, 0,122, 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, 16, 0, 10, 0, 7, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,216,166, 17, 7, + 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,136, 22, 49, 8, 0, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,120,168, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0,152,174, 20, 6, 0, 0, 0, 0,200,183, 20, 6, - 0, 0, 0, 0, 56,184, 20, 6, 0, 0, 0, 0, 72,239, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,168, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,168, 20, 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, 68, 65, 84, 65, 32, 0, 0, 0,232,168, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 88,169, 20, 6, 0, 0, 0, 0,120,168, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,169, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,169, 20, 6, - 0, 0, 0, 0,232,168, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,200,169, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0, 88,169, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,170, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0,200,169, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,171, 20, 6, - 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,171, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,173, 20, 6, - 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0,216,172, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,173, 20, 6, - 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,174, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,175, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,168, 20, 6, 0, 0, 0, 0, 88,169, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,175, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,175, 20, 6, - 0, 0, 0, 0,152,174, 20, 6, 0, 0, 0, 0,232,168, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,175, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,175, 20, 6, - 0, 0, 0, 0, 8,175, 20, 6, 0, 0, 0, 0, 88,169, 20, 6, 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,175, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,176, 20, 6, - 0, 0, 0, 0,120,175, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,176, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,176, 20, 6, - 0, 0, 0, 0,232,175, 20, 6, 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,176, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,177, 20, 6, - 0, 0, 0, 0, 88,176, 20, 6, 0, 0, 0, 0,200,169, 20, 6, 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,177, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,177, 20, 6, - 0, 0, 0, 0,200,176, 20, 6, 0, 0, 0, 0,120,168, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,177, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,178, 20, 6, - 0, 0, 0, 0, 56,177, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,178, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,178, 20, 6, - 0, 0, 0, 0,168,177, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,178, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,178, 20, 6, - 0, 0, 0, 0, 24,178, 20, 6, 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,178, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,179, 20, 6, - 0, 0, 0, 0,136,178, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,179, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,179, 20, 6, - 0, 0, 0, 0,248,178, 20, 6, 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,179, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,180, 20, 6, - 0, 0, 0, 0,104,179, 20, 6, 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,180, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,180, 20, 6, - 0, 0, 0, 0,216,179, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,180, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,181, 20, 6, - 0, 0, 0, 0, 72,180, 20, 6, 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,181, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,181, 20, 6, - 0, 0, 0, 0,184,180, 20, 6, 0, 0, 0, 0,200,169, 20, 6, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,181, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,182, 20, 6, - 0, 0, 0, 0, 40,181, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,182, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,182, 20, 6, - 0, 0, 0, 0,152,181, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,182, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,182, 20, 6, - 0, 0, 0, 0, 8,182, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,182, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,183, 20, 6, - 0, 0, 0, 0,120,182, 20, 6, 0, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,183, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,183, 20, 6, - 0, 0, 0, 0,232,182, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,183, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88,183, 20, 6, 0, 0, 0, 0,120,168, 20, 6, 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56,184, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,188, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0,232,168, 20, 6, 0, 0, 0, 0, 88,169, 20, 6, - 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, - 5, 4, 0, 0, 7, 7,127, 7, 93, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,246, 20, 6, - 0, 0, 0, 0, 8,246, 20, 6, 0, 0, 0, 0, 40,185, 20, 6, 0, 0, 0, 0,152,186, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0, 8,183, 17, 7, + 0, 0, 0, 0,120,183, 17, 7, 0, 0, 0, 0,152,239, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,168, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,168, 17, 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, 68, 65, 84, 65, 32, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,169, 17, 7, + 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,169, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,171, 17, 7, + 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0,200,170, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,171, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,172, 17, 7, + 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,136,172, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,173, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 1,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3, + 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,174, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,174, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,175, 17, 7, + 0, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,175, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,175, 17, 7, + 0, 0, 0, 0,184,174, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,175, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,176, 17, 7, + 0, 0, 0, 0, 40,175, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,176, 17, 7, + 0, 0, 0, 0,152,175, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,176, 17, 7, + 0, 0, 0, 0, 8,176, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,177, 17, 7, + 0, 0, 0, 0,120,176, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,177, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,177, 17, 7, + 0, 0, 0, 0,232,176, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,177, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,178, 17, 7, + 0, 0, 0, 0, 88,177, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,178, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,178, 17, 7, + 0, 0, 0, 0,200,177, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,178, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,179, 17, 7, + 0, 0, 0, 0, 56,178, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,179, 17, 7, + 0, 0, 0, 0,168,178, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,179, 17, 7, + 0, 0, 0, 0, 24,179, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,180, 17, 7, + 0, 0, 0, 0,136,179, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,180, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,180, 17, 7, + 0, 0, 0, 0,248,179, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,180, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,181, 17, 7, + 0, 0, 0, 0,104,180, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,181, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,181, 17, 7, + 0, 0, 0, 0,216,180, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,181, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,182, 17, 7, + 0, 0, 0, 0, 72,181, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,182, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,182, 17, 7, + 0, 0, 0, 0,184,181, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,182, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,183, 17, 7, + 0, 0, 0, 0, 40,182, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,183, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152,182, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,183, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,187, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, + 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,246, 17, 7, + 0, 0, 0, 0, 88,246, 17, 7, 0, 0, 0, 0,104,184, 17, 7, 0, 0, 0, 0,216,185, 17, 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, 68, 65, 84, 65, - 40, 1, 0, 0, 40,185, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,186, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 1, 0, 0,104,184, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,185, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, - 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,152,186, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,185, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, - 0, 0,134, 66,110, 7, 0, 0,127, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,109, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, - 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, -235, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 1, 0, 0,216,185, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,184, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0, + 0, 0, 0, 64,112, 7, 0, 0,129, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, + 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, 5, 4, 0, 0, + 5, 4, 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, 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, 68, 65, 84, 65, -160, 0, 0, 0, 8,188, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,212, 20, 6, 0, 0, 0, 0, 56,184, 20, 6, - 0, 0, 0, 0,136,171, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0,200,169, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1, -236, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,211, 20, 6, 0, 0, 0, 0, 88,211, 20, 6, - 0, 0, 0, 0,248,188, 20, 6, 0, 0, 0, 0,104,190, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,248,188, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,190, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,190, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,188, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,198, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0, -142, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -124, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,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,216,191, 20, 6, 0, 0, 0, 0,184,209, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0,216,191, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,193, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 0, 0, 0, 72,187, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,120,183, 17, 7, + 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,120,169, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1, +140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,210, 17, 7, 0, 0, 0, 0,152,210, 17, 7, + 0, 0, 0, 0, 56,188, 17, 7, 0, 0, 0, 0,168,189, 17, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,188, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,189, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,189, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,188, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,174, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0, + 94, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,114, 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, 24,191, 17, 7, 0, 0, 0, 0,248,208, 17, 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, 68, 65, 84, 65, 88, 1, 0, 0, 24,191, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,192, 17, 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, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,193, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,195, 20, 6, - 0, 0, 0, 0,216,191, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,192, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,194, 17, 7, + 0, 0, 0, 0, 24,191, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100, 101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, -124, 1, 61, 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, + 76, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,195, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,196, 20, 6, 0, 0, 0, 0,120,193, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0, 88,194, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,195, 17, 7, 0, 0, 0, 0,184,192, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101,114,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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,196, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,198, 20, 6, - 0, 0, 0, 0, 24,195, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,195, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,197, 17, 7, + 0, 0, 0, 0, 88,194, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 68,105,109,101, 110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, -124, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,198, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,199, 20, 6, 0, 0, 0, 0,184,196, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0,152,197, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,199, 17, 7, 0, 0, 0, 0,248,195, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, 110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105, 110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,124, 1, 58, 0, 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, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,248,199, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,201, 20, 6, - 0, 0, 0, 0, 88,198, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,199, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,200, 17, 7, + 0, 0, 0, 0,152,197, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112, 108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, -124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 20, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,201, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,203, 20, 6, 0, 0, 0, 0,248,199, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0,216,200, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,202, 17, 7, 0, 0, 0, 0, 56,199, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,203, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,204, 20, 6, - 0, 0, 0, 0,152,201, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,202, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,204, 17, 7, + 0, 0, 0, 0,216,200, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,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, 80,101,114,102, 111,114,109, 97,110, 99,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, 0,242,253, -124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,204, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,206, 20, 6, 0, 0, 0, 0, 56,203, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0, 24,204, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,205, 17, 7, 0, 0, 0, 0,120,202, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, 115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101, 115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,120,206, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,208, 20, 6, - 0, 0, 0, 0,216,204, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,205, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,207, 17, 7, + 0, 0, 0, 0, 24,204, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, -124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 24,208, 20, 6, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,209, 20, 6, 0, 0, 0, 0,120,206, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0, 88,207, 17, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,208, 17, 7, 0, 0, 0, 0,184,205, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,124, 1,130, 0, 0, 0, 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,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,209, 20, 6, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24,208, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,208, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 88,207, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, -124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88,211, 20, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152,210, 17, 7, 0, 0, 0, 0,179, 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, 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, @@ -4332,359 +3820,1188 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,212, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40,226, 20, 6, - 0, 0, 0, 0, 8,188, 20, 6, 0, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0, 24,171, 20, 6, - 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0, -167, 3, 0, 0, 1, 1,247, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,224, 20, 6, - 0, 0, 0, 0,120,224, 20, 6, 0, 0, 0, 0,136,213, 20, 6, 0, 0, 0, 0, 72,219, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,219, 17, 7, + 0, 0, 0, 0, 72,187, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, + 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, +139, 1, 0, 0, 17, 17, 32, 6,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,218, 17, 7, + 0, 0, 0, 0,184,218, 17, 7, 0, 0, 0, 0,200,212, 17, 7, 0, 0, 0, 0, 72,217, 17, 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, 68, 65, 84, 65, - 40, 1, 0, 0,136,213, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,214, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, + 40, 1, 0, 0,200,212, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,214, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,246, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0, -130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,248,214, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,216, 20, 6, 0, 0, 0, 0,136,213, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, - 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0, -167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 0, 1, 0, + 40, 1, 0, 0, 56,214, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,217, 17, 7, 0, 0, 0, 0,200,212, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,185,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195, + 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0, +114, 1, 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, 26, 0, 0, 0, +139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,114, 1, 0, 0, 4, 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,168,215, 17, 7, 0, 0, 0, 0,168,215, 17, 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, 68, 65, 84, 65, + 88, 1, 0, 0,168,215, 17, 7, 0, 0, 0, 0,213, 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, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111, +112,101,114,116,105,101,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, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111, +112,101,114,116,105,101,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, 80,114,111,112,101,114,116,105,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,217, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,214, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, + 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68,224,198,182,194,184,177,165, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0, +113, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0, +113, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5,114, 1, 51, 5, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,220, 0, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 5,114, 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, 68, 65, 84, 65, 72, 0, 0, 0,184,218, 17, 7, 0, 0, 0, 0,192, 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, 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,255, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,219, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, + 1, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,248,172, 17, 7, + 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0, +126, 7, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 9, 9, 62, 2, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24,223, 17, 7, 0, 0, 0, 0, 24,223, 17, 7, 0, 0, 0, 0, 56,220, 17, 7, 0, 0, 0, 0,168,221, 17, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,220, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,221, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68, + 0, 0,200, 65, 0, 64, 15, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0, +126, 7, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0, + 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,221, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56,220, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0, +131,248, 1, 68, 0, 0, 0, 0, 86, 26, 3, 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, 61, 2, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, + 10, 0, 62, 2, 67, 2, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0, +126, 7, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 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, 68, 65, 84, 65,160, 2, 0, 0, 24,223, 17, 7, 0, 0, 0, 0,186, 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, 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, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,104,216, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,217, 20, 6, 0, 0, 0, 0,248,214, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0, -131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, +160, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,239, 17, 7, 0, 0, 0, 0, 72,219, 17, 7, + 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,136,172, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3, + 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,237, 17, 7, 0, 0, 0, 0,232,237, 17, 7, + 0, 0, 0, 0,248,226, 17, 7, 0, 0, 0, 0,184,232, 17, 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, 68, 65, 84, 65, 40, 1, 0, 0,248,226, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,228, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,126, 68, 0, 0,200, 65, 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 26, 0, 0, 0, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,228, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,229, 17, 7, 0, 0, 0, 0,248,226, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0, +160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 2, 0, 0, 5, 0, 3, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,229, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,231, 17, 7, 0, 0, 0, 0,104,228, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0, +160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,231, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,232, 17, 7, 0, 0, 0, 0,216,229, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 67, 0, 0,109,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,109,196, 0,128,145,195,163, 0, 0, 0, +180, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +162, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,232, 17, 7, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,231, 17, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 67, 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, 40,234, 17, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 40,234, 17, 7, + 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128, + 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,121,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65, +214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,221, 57, 80, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, + 0, 0, 5, 0,251,251, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, + 0, 0,180, 66, 0, 0,180, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0,232,237, 17, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, +205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, +205,204,204, 61, 0, 0,122, 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, 16, 0, 10, 0, 7, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,239, 17, 7, + 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,200,170, 17, 7, + 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,243, 17, 7, 0, 0, 0, 0,104,243, 17, 7, 0, 0, 0, 0,136,240, 17, 7, + 0, 0, 0, 0,248,241, 17, 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, 68, 65, 84, 65, 40, 1, 0, 0,136,240, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0,248,241, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, 0,128,161, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 1, 26, 0, 68, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,241, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,240, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153, 67, 0, 64, 12,196, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, + 66, 2, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0, + 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, + 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 68, 1, 67, 2, 51, 1, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 1, 67, 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, 68, 65, 84, 65, 24, 1, 0, 0,104,243, 17, 7, 0, 0, 0, 0,183, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,244, 17, 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, 1, 0, 0, 0, 68, 65, 84, 65, + 16, 0, 0, 0,200,244, 17, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 40,245, 17, 7, + 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, 40,245, 17, 7, 0, 0, 0, 0,236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0, + 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 83, 78, 0, 0, + 8, 1, 0, 0,136, 22, 49, 8, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0,216,166, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 77,111,116,105,111,110, 32, 84,114, 97, + 99,107,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,152,235, 49, 8, 0, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0, 24, 96, 55, 8, + 0, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0, 88,136, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 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,220,104,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216, 6, 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, 68, 65, 84, 65, 32, 0, 0, 0,216, 6, 56, 8, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0,216, 6, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,105, 55, 8, + 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 88,104, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 18, 56, 8, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 6, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0, 88,207, 49, 8, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,207, 49, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,202, 31, 7, + 0, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 88,207, 49, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,201, 31, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 6,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136, 76, 53, 8, + 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0,248,162, 50, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,120, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 86, 65, 8, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,208, 2, 64, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 96, 55, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,216, 6, 56, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0, 24, 96, 55, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,216, 6, 56, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,232, 18, 56, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 18, 56, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0, 88,104, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,152,235, 49, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 88,104, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0,136,202, 31, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136,202, 31, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 72,105, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,232, 18, 56, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0,248,162, 50, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,248,162, 50, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136, 76, 53, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,136, 76, 53, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 86, 65, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0,232, 86, 65, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0,212, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,232, 86, 65, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0,214, 0, 0, 0, + 1, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,216, 6, 56, 8, + 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 6, 0, 0, 65, 4, 0, 0, 98, 4, 0, 0, 7, 7, 63, 6, 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,184,206,240, 6, + 0, 0, 0, 0,184,142, 55, 8, 0, 0, 0, 0,184,142, 55, 8, 0, 0, 0, 0,168,183, 55, 8, 0, 0, 0, 0, 24,185, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,234, 31, 7, 0, 0, 0, 0,200,145, 49, 8, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,183, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,185, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,163, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, + 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 6, 0, 0, 65, 4, 0, 0, 90, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, + 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,208,240, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,185, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,168,183, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, + 0,192,197, 68, 0, 0,128, 64, 0, 0, 64, 65, 46, 6, 0, 0, 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, +111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, + 10, 0, 63, 6, 8, 0, 46, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 6, 0, 0, 91, 4, 0, 0, 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 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,216,207,240, 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, 68, 65, 84, 65,160, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 17, 56, 8, + 0, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,120,201, 31, 7, + 0, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, +107, 0, 0, 0, 15, 15, 63, 6,108, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,158,240, 6, 0, 0, 0, 0, 88,219, 48, 8, + 0, 0, 0, 0, 88,219, 48, 8, 0, 0, 0, 0, 8,223, 55, 8, 0, 0, 0, 0,120,224, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 20,238, 6, 0, 0, 0, 0, 8,105, 56, 8, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 8,223, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,224, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 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, 56,160,240, 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, 68, 65, 84, 65, - 40, 1, 0, 0,216,217, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,219, 20, 6, 0, 0, 0, 0,104,216, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, - 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0, -104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0, -167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, + 40, 1, 0, 0,120,224, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,223, 55, 8, + 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, + 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 18, 0, 0, 0, 81, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, + 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 63, 6, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 26, 0, 0, 0, +107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,159,240, 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, 68, 65, 84, 65, +208, 0, 0, 0, 88,219, 48, 8, 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, + 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 17, 56, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,215, 31, 7, + 0, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,248,162, 50, 8, + 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0, +119, 3, 0, 0, 20, 20, 63, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0,120,224, 31, 7, + 0, 0, 0, 0,120,224, 31, 7, 0, 0, 0, 0,200,252, 52, 8, 0, 0, 0, 0,216, 62, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 82, 53, 8, 0, 0, 0, 0,120, 57, 51, 8, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,200,252, 52, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,155, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 19, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0, 63, 6, 26, 0, 63, 6, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0, +134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 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,136, 12,241, 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, 68, 65, 84, 65, - 40, 1, 0, 0, 72,219, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,217, 20, 6, + 40, 1, 0, 0,152,155, 31, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168, 14, 49, 8, 0, 0, 0, 0,200,252, 52, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 30,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0, +121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,255, 0, 0, 0, +119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,121, 2, 0, 0, 5, 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, 72, 9,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,168, 14, 49, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,226, 31, 7, 0, 0, 0, 0,152,155, 31, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0, +120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,135, 0, 0, 0, +254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,107, 50, 8, 0, 0, 0, 0,136,107, 50, 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, 68, 65, 84, 65, + 88, 1, 0, 0,136,107, 50, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,226, 31, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0,200,190, 55, 8, 0, 0, 0, 0,168, 14, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 60,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 60,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, +240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, +240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,241, 2,143, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,159, 5, 0, 0, 62, 6, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 0,241, 2, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 99, 51, 8, + 0, 0, 0, 0,248, 99, 51, 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, 68, 65, 84, 65, 88, 1, 0, 0,248, 99, 51, 8, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0, -167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,220, 20, 6, 0, 0, 0, 0, 68, 65, 84, 65, -112, 3, 0, 0,184,220, 20, 6, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74,141,193, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, - 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, - 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, - 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, - 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191, -184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, - 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, - 0,160, 32,182,252, 5,136,190, 43, 33, 3, 62,235,135, 23, 63, 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195, -136,252, 71,194, 3, 54, 25, 68,158, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, - 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191, -184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, - 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,200,190, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,126, 51, 8, 0, 0, 0, 0,200,226, 31, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,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,159, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0, +167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0, +119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 13,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 24,126, 51, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 62, 53, 8, 0, 0, 0, 0,200,190, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, + 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,128, 0, 0,124,146, 72, +255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,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,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0, +119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,216, 62, 53, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,126, 51, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, + 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0, 0, 0, 0, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,255, 4,241, 2,255, 4, +241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,158, 5, 0, 0,135, 0, 0, 0, +119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4,241, 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, 24, 5,241, 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, 68, 65, 84, 65, + 48, 1, 0, 0,120,224, 31, 7, 0, 0, 0, 0,196, 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, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +120, 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, 17,200, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, - 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 30, 33, 12, 66, 86,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,120,224, 20, 6, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, - 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,104,139, 21, 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, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, - 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,215, 31, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,136, 49, 8, + 0, 0, 0, 0,232, 17, 56, 8, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0,232, 18, 56, 8, + 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0, + 63, 4, 0, 0, 20, 20,110, 3,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0,168,104, 53, 8, + 0, 0, 0, 0,168,104, 53, 8, 0, 0, 0, 0,232,206, 50, 8, 0, 0, 0, 0, 88,110, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 94, 55, 8, 0, 0, 0, 0,248,239, 55, 8, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,232,206, 50, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,208, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 91, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 91, 68, 0, 0,200, 65, 0, 64, 91, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,110, 3, 26, 0,110, 3, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0, +146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 3, 26, 0, 0, 0, 1, 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,136, 12,241, 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, 68, 65, 84, 65, -160, 0, 0, 0, 40,226, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,232, 20, 6, 0, 0, 0, 0,152,212, 20, 6, - 0, 0, 0, 0,120,168, 20, 6, 0, 0, 0, 0,248,171, 20, 6, 0, 0, 0, 0,104,172, 20, 6, 0, 0, 0, 0,136,171, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5, -104, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,230, 20, 6, 0, 0, 0, 0,184,230, 20, 6, - 0, 0, 0, 0, 24,227, 20, 6, 0, 0, 0, 0,136,228, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,227, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,228, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 40, 1, 0, 0, 88,208, 50, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0,232,206, 50, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 9,241, 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, -239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 16, 51, 8, 0, 0, 0, 0, 88,208, 50, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0, +120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 92, 56, 8, 0, 0, 0, 0,200, 92, 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, 68, 65, 84, 65, + 88, 1, 0, 0,200, 92, 56, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,228, 20, 6, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0,224,189, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0, -240, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0, 40, 16, 51, 8, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 8,121, 55, 8, 0, 0, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, +172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, +172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 17, 51, 8, + 0, 0, 0, 0,152, 17, 51, 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, 68, 65, 84, 65, 88, 1, 0, 0,152, 17, 51, 8, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,229, 20, 6, - 0, 0, 0, 0,193, 0, 0, 0, 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,104,230, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,104,230, 20, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0,184,230, 20, 6, 0, 0, 0, 0, -194, 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, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,248,229, 20, 6, 0, 0, 0, 0, -248,229, 20, 6, 0, 0, 0, 0, 62, 62, 62, 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, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,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,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 8,121, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,122, 55, 8, 0, 0, 0, 0, 40, 16, 51, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 27,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,160, 0,173, 0,160, 0, +155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,112, 3, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,173, 0, 0, 0, 2, 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,120, 13,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,120,122, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,110, 56, 8, 0, 0, 0, 0, 8,121, 55, 8, + 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68,171,170,132,194, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68, 0, 0, 27,195, + 0, 0, 0, 0,189, 2, 0, 0,206, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, +255,255,127,127, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 16, 0, 2, 4, 4, 0,206, 2,173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 62, 6, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 2,173, 0, 0, 0, 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, 8, 6,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 88,110, 56, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,122, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, + 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0, 46, 2,173, 0, 46, 2, +173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5,241, 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, 68, 65, 84, 65, + 48, 1, 0, 0,168,104, 53, 8, 0, 0, 0, 0,196, 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, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120, 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, 17,200, 0, 0, 0, 0, 2, 0, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,136, 49, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72,215, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 86, 65, 8, + 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0, + 63, 4, 0, 0, 20, 20,208, 2,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0, 24,206, 55, 8, + 0, 0, 0, 0, 24,206, 55, 8, 0, 0, 0, 0, 24,237, 55, 8, 0, 0, 0, 0,120, 92, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 2, 49, 8, 0, 0, 0, 0, 56, 19, 51, 8, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 24,237, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,238, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 52, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 51, 68, 0, 0,200, 65, 0,192, 51, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,208, 2, 26, 0,208, 2, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0, +146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 26, 0, 0, 0, 1, 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,136, 12,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,136,238, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,173, 55, 8, 0, 0, 0, 0, 24,237, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 9,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,104,173, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,164, 55, 8, 0, 0, 0, 0,136,238, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0, +120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,174, 55, 8, 0, 0, 0, 0,216,174, 55, 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, 68, 65, 84, 65, + 88, 1, 0, 0,216,174, 55, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, + 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,164, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0,216, 16,238, 6, 0, 0, 0, 0,104,173, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, +172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, +172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,165, 55, 8, + 0, 0, 0, 0,184,165, 55, 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, 68, 65, 84, 65, 88, 1, 0, 0,184,165, 55, 8, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,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, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,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,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,216, 16,238, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 18,238, 6, 0, 0, 0, 0, 72,164, 55, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,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,159, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0, +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,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 13,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 72, 18,238, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 92, 53, 8, 0, 0, 0, 0,216, 16,238, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, + 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72, +255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,208, 2,173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,147, 3, 0, 0, + 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,173, 0, 0, 0, 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, 8, 6,241, 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, 68, 65, 84, 65, + 40, 1, 0, 0,120, 92, 53, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 18,238, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, + 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0,144, 1,173, 0,144, 1, +173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5,241, 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, 68, 65, 84, 65, + 48, 1, 0, 0, 24,206, 55, 8, 0, 0, 0, 0,196, 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, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120, 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, 17,200, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,232,246, 17, 7, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 88, 70, 18, 7, + 0, 0, 0, 0,136, 22, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99, +114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 56,248, 17, 7, 0, 0, 0, 0,232,253, 17, 7, + 0, 0, 0, 0, 88,254, 17, 7, 0, 0, 0, 0,136, 7, 18, 7, 0, 0, 0, 0,248, 7, 18, 7, 0, 0, 0, 0, 8, 63, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,248, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,248, 17, 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, 68, 65, 84, 65, + 32, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 56,248, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,249, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,250, 17, 7, + 0, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0,248,249, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,250, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,252, 17, 7, + 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0,184,251, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,252, 17, 7, + 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, + 1, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,236, 2, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,253, 17, 7, + 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,253, 17, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,254, 17, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,254, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,248, 17, 7, + 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,254, 17, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,255, 17, 7, 0, 0, 0, 0, 88,254, 17, 7, 0, 0, 0, 0,168,248, 17, 7, + 0, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,255, 17, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,255, 17, 7, 0, 0, 0, 0,200,254, 17, 7, 0, 0, 0, 0, 24,249, 17, 7, + 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,255, 17, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 0, 18, 7, 0, 0, 0, 0, 56,255, 17, 7, 0, 0, 0, 0,248,249, 17, 7, + 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 0, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 0, 18, 7, 0, 0, 0, 0,168,255, 17, 7, 0, 0, 0, 0,104,250, 17, 7, + 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 0, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 0, 18, 7, 0, 0, 0, 0, 24, 0, 18, 7, 0, 0, 0, 0,136,249, 17, 7, + 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 0, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 1, 18, 7, 0, 0, 0, 0,136, 0, 18, 7, 0, 0, 0, 0, 56,248, 17, 7, + 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 1, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 1, 18, 7, 0, 0, 0, 0,248, 0, 18, 7, 0, 0, 0, 0,248,249, 17, 7, + 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 1, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 2, 18, 7, 0, 0, 0, 0,104, 1, 18, 7, 0, 0, 0, 0,216,250, 17, 7, + 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 2, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 2, 18, 7, 0, 0, 0, 0,216, 1, 18, 7, 0, 0, 0, 0, 72,251, 17, 7, + 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 2, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 3, 18, 7, 0, 0, 0, 0, 72, 2, 18, 7, 0, 0, 0, 0,184,251, 17, 7, + 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 3, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 3, 18, 7, 0, 0, 0, 0,184, 2, 18, 7, 0, 0, 0, 0, 40,252, 17, 7, + 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 3, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 4, 18, 7, 0, 0, 0, 0, 40, 3, 18, 7, 0, 0, 0, 0, 72,251, 17, 7, + 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 4, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 4, 18, 7, 0, 0, 0, 0,152, 3, 18, 7, 0, 0, 0, 0,216,250, 17, 7, + 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 4, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 4, 18, 7, 0, 0, 0, 0, 8, 4, 18, 7, 0, 0, 0, 0,104,250, 17, 7, + 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 4, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 5, 18, 7, 0, 0, 0, 0,120, 4, 18, 7, 0, 0, 0, 0,136,249, 17, 7, + 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 5, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 5, 18, 7, 0, 0, 0, 0,232, 4, 18, 7, 0, 0, 0, 0, 8,253, 17, 7, + 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 5, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 6, 18, 7, 0, 0, 0, 0, 88, 5, 18, 7, 0, 0, 0, 0,248,249, 17, 7, + 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 6, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 6, 18, 7, 0, 0, 0, 0,200, 5, 18, 7, 0, 0, 0, 0,216,250, 17, 7, + 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 6, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 7, 18, 7, 0, 0, 0, 0, 56, 6, 18, 7, 0, 0, 0, 0,152,252, 17, 7, + 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 7, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 7, 18, 7, 0, 0, 0, 0,168, 6, 18, 7, 0, 0, 0, 0,184,251, 17, 7, + 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 7, 18, 7, + 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 7, 18, 7, 0, 0, 0, 0, 56,248, 17, 7, + 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 7, 18, 7, + 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,249, 17, 7, + 0, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 93, 0, 1, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 69, 18, 7, 0, 0, 0, 0,200, 69, 18, 7, 0, 0, 0, 0,232, 8, 18, 7, + 0, 0, 0, 0, 88, 10, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,232, 8, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 88, 10, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 7, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 10, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 8, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, + 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, 0, 0,134, 66,110, 7, 0, 0,127, 7, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,109, 7, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, + 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0,235, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, + 1, 0, 0, 0, 88, 36, 18, 7, 0, 0, 0, 0,248, 7, 18, 7, 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 8,253, 17, 7, + 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1,236, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0,184, 12, 18, 7, 0, 0, 0, 0, 40, 14, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,184, 12, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 14, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, + 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 14, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,184, 12, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,198, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, +254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, +126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,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,152, 15, 18, 7, 0, 0, 0, 0,120, 33, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,152, 15, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 17, 18, 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, 66, 85, 84, 84, + 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, + 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,111,110,116, +101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, +124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 17, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 18, 18, 7, 0, 0, 0, 0,152, 15, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,111,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, 8, 4, 0, 0, 8, 4, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,136,232, 20, 6, 0, 0, 0, 0, -214, 0, 0, 0, 1, 0, 0, 0, 72,239, 20, 6, 0, 0, 0, 0, 40,226, 20, 6, 0, 0, 0, 0, 72,173, 20, 6, 0, 0, 0, 0, - 24,171, 20, 6, 0, 0, 0, 0,168,170, 20, 6, 0, 0, 0, 0,184,173, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0,167, 3, 0, 0, 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88,236, 20, 6, 0, 0, 0, 0, 88,236, 20, 6, 0, 0, 0, 0,120,233, 20, 6, 0, 0, 0, 0, -232,234, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,120,233, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, -232,234, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, 1, 26, 0, 0, 0, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0,216, 18, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 20, 18, 7, + 0, 0, 0, 0, 56, 17, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,108, 97,121,101,114,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, 0, 0, 0, 76, 97,121,101, +114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, +124, 1, 0, 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,234, 20, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,120,233, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,190, 67, 0, 0, 15,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, - 0, 0, 12, 4, 6, 0,142, 1,161, 0,125, 1,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,126, 7, 0, 0, 7, 3, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, 1,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 20, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0,216, 18, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,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, 68, 65, 84, 65, 24, 1, 0, 0, 88,236, 20, 6, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 23, 18, 7, + 0, 0, 0, 0,120, 20, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,110,116,105, + 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, +124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,184,237, 20, 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, 68, 65, 84, 65, 88, 1, 0, 0,184, 23, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, +114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, +114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 16, 0, 0, 0, -184,237, 20, 6, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 24,238, 20, 6, 0, 0, 0, 0, - 68, 65, 84, 65,224, 0, 0, 0, 24,238, 20, 6, 0, 0, 0, 0,236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 8,110, 21, 6, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, - 8,110, 21, 6, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -152,136, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,146, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -168,200, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,159, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -248,181, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,153, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -216,131, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,139, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -200,130, 21, 6, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 8,110, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 72,239, 20, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,232, 20, 6, 0, 0, 0, 0, -248,171, 20, 6, 0, 0, 0, 0, 56,170, 20, 6, 0, 0, 0, 0, 40,174, 20, 6, 0, 0, 0, 0,216,172, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,243, 20, 6, 0, 0, 0, 0, 24,243, 20, 6, 0, 0, 0, 0, - 56,240, 20, 6, 0, 0, 0, 0,168,241, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,240, 20, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0,168,241, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 62, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68, 0, 0,200, 65, 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,248, 2, 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 26, 0, 0, 0, 1, 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, 34,254,124, 1, 0, 0, 20, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,241, 20, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,240, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, - 0, 0, 0, 0, 0,192, 22, 68,248,150, 23, 68, 8, 41,100, 68, 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, - 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, - 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,248, 2, 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 37, 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, 68, 65, 84, 65, 88, 1, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 26, 18, 7, + 0, 0, 0, 0,184, 23, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100, +105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, +124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0, 24,243, 20, 6, 0, 0, 0, 0, -186, 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, 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, 32, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0, -231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,124, 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, 68, 65, 84, 65, 88, 1, 0, 0,248, 26, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 28, 18, 7, 0, 0, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, +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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, +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, 80,101,114,102,111,114,109, 97,110, 99,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, 0,242,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 28, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 30, 18, 7, + 0, 0, 0, 0,248, 26, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, + 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, +124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, 56, 30, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 31, 18, 7, 0, 0, 0, 0,152, 28, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 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, 68, 65, 84, 65, 88, 1, 0, 0,216, 31, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 33, 18, 7, + 0, 0, 0, 0, 56, 30, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, + 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 69, 78, 68, + 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,117,116,112, +117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,253, +124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 33, 18, 7, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 31, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,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, 66, 97,107,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, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0,179, 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, 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, 83, 78, 0, 0, 8, 1, 0, 0,152,246, 20, 6, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, -184, 61, 21, 6, 0, 0, 0, 0, 40,167, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,232,247, 20, 6, 0, 0, 0, 0, -248,250, 20, 6, 0, 0, 0, 0,104,251, 20, 6, 0, 0, 0, 0,200,255, 20, 6, 0, 0, 0, 0, 56, 0, 21, 6, 0, 0, 0, 0, - 88, 44, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,247, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, - 88,248, 20, 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, - 68, 65, 84, 65, 32, 0, 0, 0, 88,248, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,248, 20, 6, 0, 0, 0, 0, -232,247, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -200,248, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0, 88,248, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0, -211, 0, 0, 0, 1, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0,200,248, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, - 24,250, 20, 6, 0, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, -168,249, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -136,250, 20, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200, 3,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0, -211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,251, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -216,251, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,248, 20, 6, 0, 0, 0, 0,200,248, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,251, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 72,252, 20, 6, 0, 0, 0, 0,104,251, 20, 6, 0, 0, 0, 0, 88,248, 20, 6, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,252, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -184,252, 20, 6, 0, 0, 0, 0,216,251, 20, 6, 0, 0, 0, 0,200,248, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,252, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 40,253, 20, 6, 0, 0, 0, 0, 72,252, 20, 6, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,253, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -152,253, 20, 6, 0, 0, 0, 0,184,252, 20, 6, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,253, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 8,254, 20, 6, 0, 0, 0, 0, 40,253, 20, 6, 0, 0, 0, 0,232,247, 20, 6, 0, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,254, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -120,254, 20, 6, 0, 0, 0, 0,152,253, 20, 6, 0, 0, 0, 0,232,247, 20, 6, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,254, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -232,254, 20, 6, 0, 0, 0, 0, 8,254, 20, 6, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,254, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 88,255, 20, 6, 0, 0, 0, 0,120,254, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,255, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -200,255, 20, 6, 0, 0, 0, 0,232,254, 20, 6, 0, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,255, 20, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88,255, 20, 6, 0, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56, 0, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, - 8, 4, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0, 88,248, 20, 6, 0, 0, 0, 0, -200,248, 20, 6, 0, 0, 0, 0, 24,250, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, -235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 61, 21, 6, 0, 0, 0, 0, 40, 61, 21, 6, 0, 0, 0, 0, 40, 1, 21, 6, 0, 0, 0, 0,152, 2, 21, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 40, 1, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152, 2, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, - 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, - 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, -235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,152, 2, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 1, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, - 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, - 2, 0,112, 7, 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, - 5, 4, 0, 0, 5, 4, 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, 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, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0, +160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 36, 18, 7, + 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 49, 18, 7, 0, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0,152,252, 17, 7, + 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 1, 1,247, 2, 63, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 48, 18, 7, 0, 0, 0, 0, 56, 48, 18, 7, 0, 0, 0, 0, 72, 37, 18, 7, + 0, 0, 0, 0, 8, 43, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 72, 37, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0,184, 38, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 38, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0, 72, 37, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, + 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, + 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 8, 4, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 44, 21, 6, 0, 0, 0, 0, - 56, 0, 21, 6, 0, 0, 0, 0,232,247, 20, 6, 0, 0, 0, 0,168,249, 20, 6, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, -248,250, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, - 6, 6,200, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 10, 21, 6, 0, 0, 0, 0, -232, 10, 21, 6, 0, 0, 0, 0,248, 4, 21, 6, 0, 0, 0, 0,120, 9, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0,152, 41, 18, 7, 0, 0, 0, 0,184, 38, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, + 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, +119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, +119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 41, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 8, 43, 18, 7, 0, 0, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, +121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, +121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 43, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 41, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,247, 2, 37, 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,120, 44, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,120, 44, 18, 7, 0, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,141,193, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, + 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, + 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, + 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, + 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, + 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, + 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65, +214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,160, 32,182,252, 5,136,190, 43, 33, 3, 62,235,135, 23, 63, + 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,158, 87,135,195,205,209,166, 67, +151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, + 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, + 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, + 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65, +214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, + 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 30, 33, 12, 66, 86,152,137, 66, +116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 56, 48, 18, 7, + 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, + 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, + 0, 0, 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, 0, 10, 0, 7, 1, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 49, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, + 1, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0, 88, 36, 18, 7, 0, 0, 0, 0, 56,248, 17, 7, 0, 0, 0, 0,184,251, 17, 7, + 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5,104, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,216, 50, 18, 7, 0, 0, 0, 0, 72, 52, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,216, 50, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 52, 18, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, + 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, + 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 52, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,216, 50, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, + 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, + 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 78, 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, 68, 65, 84, 65, 40, 0, 0, 0,184, 53, 18, 7, 0, 0, 0, 0,193, 0, 0, 0, 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, 40, 54, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 40, 54, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,136, 1, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,194, 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, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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,184, 53, 18, 7, 0, 0, 0, 0,184, 53, 18, 7, 0, 0, 0, 0, 62, 62, 62, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,111,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, 8, 4, 0, 0, 8, 4, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 63, 18, 7, 0, 0, 0, 0, +232, 49, 18, 7, 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, +120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0,167, 3, 0, 0, + 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 60, 18, 7, 0, 0, 0, 0, + 24, 60, 18, 7, 0, 0, 0, 0, 56, 57, 18, 7, 0, 0, 0, 0,168, 58, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, -248, 4, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 6, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, + 56, 57, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168, 58, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0, 6, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -104, 6, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 9, 21, 6, 0, 0, 0, 0,248, 4, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 67, 0,192,115,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0, -203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 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, 26, 0, 0, 0,233, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,208, 3, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, +168, 58, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, 0, 0, 15,195, 0, 0, 0, 0, +125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,142, 1,161, 0,125, 1,143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 7, 3, 0, 0,167, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, + 24, 60, 18, 7, 0, 0, 0, 0,183, 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, 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,216, 7, 21, 6, 0, 0, 0, 0,216, 7, 21, 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, 68, 65, 84, 65, 88, 1, 0, 0, -216, 7, 21, 6, 0, 0, 0, 0,213, 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, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,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, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,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, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,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,152,255,202, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120, 61, 18, 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, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,120, 61, 18, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, + 14, 0, 0, 0, 14, 0, 0, 0,216, 61, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,216, 61, 18, 7, 0, 0, 0, 0, +236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, +200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, +200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, +200,189, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 63, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0, +232,253, 17, 7, 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, +105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216, 66, 18, 7, 0, 0, 0, 0,216, 66, 18, 7, 0, 0, 0, 0,248, 63, 18, 7, 0, 0, 0, 0,104, 65, 18, 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, + 68, 65, 84, 65, 40, 1, 0, 0,248, 63, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 65, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 62, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68, 0, 0,200, 65, + 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,248, 2, + 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, +105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 9, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,104, 6, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, - 51, 51, 43,191,154,153,213, 63, 51, 51,131,191,154,153, 1, 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,236, 2, 0, 0, 0, 0, 0, 0,208, 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, + 68, 65, 84, 65, 40, 1, 0, 0,104, 65, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248, 63, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,248,150, 23, 68, 8, 41,100, 68, + 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,248, 2, + 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, +131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 37, 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, -220, 0, 0, 0,199, 3, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, 2,208, 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, 68, 65, 84, 65, 40, 33, 0, 0,232, 10, 21, 6, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, + 68, 65, 84, 65,160, 2, 0, 0,216, 66, 18, 7, 0, 0, 0, 0,186, 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, 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, 32, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, +231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,124, 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, - 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,100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0, -154,153,153, 62,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4700,20 +5017,130 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, + 88, 70, 18, 7, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,168, 71, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 40, 75, 18, 7, 0, 0, 0, 0, +136, 79, 18, 7, 0, 0, 0, 0,248, 79, 18, 7, 0, 0, 0, 0, 24,124, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +168, 71, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24, 72, 18, 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, 68, 65, 84, 65, 32, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0, +211, 0, 0, 0, 1, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,168, 71, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, +248, 72, 18, 7, 0, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, +136, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +104, 73, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, +211, 0, 0, 0, 1, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, +184, 74, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3,234, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40, 75, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 75, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 72, 18, 7, 0, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152, 75, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 76, 18, 7, 0, 0, 0, 0, 40, 75, 18, 7, 0, 0, 0, 0, + 24, 72, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 8, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 76, 18, 7, 0, 0, 0, 0,152, 75, 18, 7, 0, 0, 0, 0, +136, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +120, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 76, 18, 7, 0, 0, 0, 0, 8, 76, 18, 7, 0, 0, 0, 0, +104, 73, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +232, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 77, 18, 7, 0, 0, 0, 0,120, 76, 18, 7, 0, 0, 0, 0, +104, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 88, 77, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 77, 18, 7, 0, 0, 0, 0,232, 76, 18, 7, 0, 0, 0, 0, +168, 71, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +200, 77, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 78, 18, 7, 0, 0, 0, 0, 88, 77, 18, 7, 0, 0, 0, 0, +168, 71, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 56, 78, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 78, 18, 7, 0, 0, 0, 0,200, 77, 18, 7, 0, 0, 0, 0, + 72, 74, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +168, 78, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 79, 18, 7, 0, 0, 0, 0, 56, 78, 18, 7, 0, 0, 0, 0, +216, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 24, 79, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 79, 18, 7, 0, 0, 0, 0,168, 78, 18, 7, 0, 0, 0, 0, +248, 72, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +136, 79, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 79, 18, 7, 0, 0, 0, 0, +248, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +248, 79, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104, 73, 18, 7, 0, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,140, 18, 7, 0, 0, 0, 0,232,140, 18, 7, 0, 0, 0, 0, +232, 80, 18, 7, 0, 0, 0, 0, 88, 82, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,232, 80, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 88, 82, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 82, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 80, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, + 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, + 18, 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,128, 63, 0, 0,128, 63, + 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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, 5, 4, 0, 0, 5, 4, 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, 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, 68, 65, 84, 65,160, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 24,124, 18, 7, 0, 0, 0, 0,248, 79, 18, 7, 0, 0, 0, 0,168, 71, 18, 7, 0, 0, 0, 0, +104, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 6, 6,200, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168, 90, 18, 7, 0, 0, 0, 0,168, 90, 18, 7, 0, 0, 0, 0,184, 84, 18, 7, 0, 0, 0, 0, + 56, 89, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,184, 84, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 40, 86, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 86, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56, 89, 18, 7, 0, 0, 0, 0,184, 84, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 67, 0,192,115,196, 0, 0, 0, 0, + 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, + 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 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, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +220, 0,208, 3, 0, 0, 4, 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,152, 87, 18, 7, 0, 0, 0, 0, +152, 87, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,152, 87, 18, 7, 0, 0, 0, 0,213, 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, + 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,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, + 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,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, + 71,114,101, 97,115,101, 32, 80,101,110, 99,105,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,152,255,202, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 56, 89, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 86, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 51, 51, 43,191,154,153,213, 63, 51, 51,131,191,154,153, 1, 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,236, 2, 0, 0, 0, 0, 0, 0,208, 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,220, 0, 0, 0,199, 3, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2,208, 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, 68, 65, 84, 65, 40, 33, 0, 0, +168, 90, 18, 7, 0, 0, 0, 0,184, 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, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,240, 65, + 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4813,7 +5240,6 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4844,6 +5270,12 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4943,445 +5375,466 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 44, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 21, 6, 0, 0, 0, 0,248,250, 20, 6, 0, 0, 0, 0,136,250, 20, 6, 0, 0, 0, 0, - 24,250, 20, 6, 0, 0, 0, 0, 56,249, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, - 0, 0, 0, 0,233, 3, 0, 0, 1, 1,182, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 59, 21, 6, 0, 0, 0, 0,120, 59, 21, 6, 0, 0, 0, 0, 72, 45, 21, 6, 0, 0, 0, 0, 72, 54, 21, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 72, 45, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 46, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, - 0, 64,109, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, - 26, 0,182, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,184, 46, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200, 49, 21, 6, 0, 0, 0, 0, - 72, 45, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, - 0, 0, 86,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, - 88, 3,143, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0, -146, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 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, 40, 48, 21, 6, 0, 0, 0, 0, 40, 48, 21, 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, - 68, 65, 84, 65, 88, 1, 0, 0, 40, 48, 21, 6, 0, 0, 0, 0,213, 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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,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, 79, 98,106,101, 99,116, 32, 84, -111,111,108,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 49, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0,216, 52, 21, 6, 0, 0, 0, 0,184, 46, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, - 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, - 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0, 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 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, - 56, 51, 21, 6, 0, 0, 0, 0, 56, 51, 21, 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, 68, 65, 84, 65, 88, 1, 0, 0, 56, 51, 21, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 24,124, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0, +184, 74, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 1, 1,182, 3,234, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,139, 18, 7, 0, 0, 0, 0, 56,139, 18, 7, 0, 0, 0, 0, + 8,125, 18, 7, 0, 0, 0, 0, 8,134, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 8,125, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,120,126, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 3, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, 0, 64,109, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, 26, 0,182, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,126, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,136,129, 18, 7, 0, 0, 0, 0, 8,125, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, + 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 86,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 88, 3,143, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,146, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 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, +232,127, 18, 7, 0, 0, 0, 0,232,127, 18, 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, 68, 65, 84, 65, 88, 1, 0, 0,232,127, 18, 7, 0, 0, 0, 0, 213, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111, +100,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111, +100,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, 79, 98,106,101, 99,116, 32, 84,111,111,108,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,136,129, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,132, 18, 7, 0, 0, 0, 0, +120,126, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, + 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, +120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0, + 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, + 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,248,130, 18, 7, 0, 0, 0, 0,248,130, 18, 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, + 68, 65, 84, 65, 88, 1, 0, 0,248,130, 18, 7, 0, 0, 0, 0,213, 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, 86, 73, 69, 87, 51, 68, 95, 80, + 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 73, 69, 87, 51, 68, 95, 80, + 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,216, 52, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 54, 21, 6, 0, 0, 0, 0, -200, 49, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, -255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, - 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, - 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, - 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 72, 54, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216, 52, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0,152,132, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 8,134, 18, 7, 0, 0, 0, 0,136,129, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, + 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 4, 0, 0,126, 7, 0, 0, - 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,134, 18, 7, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,132, 18, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 55, 21, 6, 0, 0, 0, 0, - 68, 65, 84, 65,112, 3, 0, 0,184, 55, 21, 6, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190, -184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, - 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63, -160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, - 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191,147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, - 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63, -138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63, -192,214, 32,188, 0, 0, 40,180,195, 15,188,190,132, 75, 53, 62,216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64, -181,148,248,192,203,247,159,192,233, 74, 87, 65,247, 46,190,192, 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190, -184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, - 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, - 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63, -138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 4, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 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,120,135, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,120,135, 18, 7, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, + 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62, +166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191, +147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62, + 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, +100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63,192,214, 32,188, 0, 0, 40,180,195, 15,188,190,132, 75, 53, 62, +216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192,203,247,159,192,233, 74, 87, 65,247, 46,190,192, + 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62, + 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, +100, 98, 82, 64, 0, 25, 95, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190, -237,203,148,190, 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,120, 59, 21, 6, 0, 0, 0, 0,174, 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, - 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, -104,139, 21, 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, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, - 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 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, 0, 10, 0, 7, 1, 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,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64, + 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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,128, 63, 30, 33, 12, 66, + 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, + 56,139, 18, 7, 0, 0, 0, 0,174, 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, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, + 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 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, - 83, 78, 0, 0, 8, 1, 0, 0,184, 61, 21, 6, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152,246, 20, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, - 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 8, 63, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, - 72, 68, 21, 6, 0, 0, 0, 0,184, 75, 21, 6, 0, 0, 0, 0, 40, 76, 21, 6, 0, 0, 0, 0,136,101, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 8, 63, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120, 63, 21, 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, 68, 65, 84, 65, 32, 0, 0, 0, -120, 63, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, 8, 63, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, -211, 0, 0, 0, 1, 0, 0, 0, 88, 64, 21, 6, 0, 0, 0, 0,120, 63, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 64, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, -200, 64, 21, 6, 0, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0, - 88, 64, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 56, 65, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0, -211, 0, 0, 0, 1, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 4, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, -136, 66, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0, - 24, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -248, 66, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, -211, 0, 0, 0, 1, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 2, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 72, 68, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 68, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,120, 63, 21, 6, 0, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,184, 68, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 69, 21, 6, 0, 0, 0, 0, - 72, 68, 21, 6, 0, 0, 0, 0,120, 63, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 40, 69, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 69, 21, 6, 0, 0, 0, 0, -184, 68, 21, 6, 0, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,152, 69, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 70, 21, 6, 0, 0, 0, 0, - 40, 69, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 8, 70, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 70, 21, 6, 0, 0, 0, 0, -152, 69, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,120, 70, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 70, 21, 6, 0, 0, 0, 0, - 8, 70, 21, 6, 0, 0, 0, 0, 8, 63, 21, 6, 0, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,232, 70, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 71, 21, 6, 0, 0, 0, 0, -120, 70, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 88, 71, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 71, 21, 6, 0, 0, 0, 0, -232, 70, 21, 6, 0, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,200, 71, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 72, 21, 6, 0, 0, 0, 0, - 88, 71, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 56, 72, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 72, 21, 6, 0, 0, 0, 0, -200, 71, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,168, 72, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 73, 21, 6, 0, 0, 0, 0, - 56, 72, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 24, 73, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 73, 21, 6, 0, 0, 0, 0, -168, 72, 21, 6, 0, 0, 0, 0, 88, 64, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,136, 73, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 73, 21, 6, 0, 0, 0, 0, - 24, 73, 21, 6, 0, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,248, 73, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 74, 21, 6, 0, 0, 0, 0, -136, 73, 21, 6, 0, 0, 0, 0, 8, 63, 21, 6, 0, 0, 0, 0, 88, 64, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,104, 74, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 74, 21, 6, 0, 0, 0, 0, -248, 73, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,216, 74, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 75, 21, 6, 0, 0, 0, 0, -104, 74, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 72, 75, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 75, 21, 6, 0, 0, 0, 0, -216, 74, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,184, 75, 21, 6, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 75, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 40, 76, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 79, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0,120, 63, 21, 6, 0, 0, 0, 0,232, 63, 21, 6, 0, 0, 0, 0, - 56, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, - 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,109, 21, 6, 0, 0, 0, 0, -120,109, 21, 6, 0, 0, 0, 0, 24, 77, 21, 6, 0, 0, 0, 0,136, 78, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 24, 77, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136, 78, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, + 0, 0,250, 67, 0, 0, 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, 0, + 10, 0, 7, 1, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,120,141, 18, 7, 0, 0, 0, 0, +210, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -136, 78, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 77, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, -112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,111, 7, 0, 0, 18, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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,222, 2, 0, 0,222, 2, 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, 2, 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, +200,142, 18, 7, 0, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0, +232,155, 18, 7, 0, 0, 0, 0, 72,181, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0, +211, 0, 0, 0, 1, 0, 0, 0, 56,143, 18, 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, 68, 65, 84, 65, 32, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, +168,143, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, + 56,143, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 24,144, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, +211, 0, 0, 0, 1, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, +104,145, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, +248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +216,145, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0, +211, 0, 0, 0, 1, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, + 40,147, 18, 7, 0, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0, +184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +152,147, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0, +168,143, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0, +136,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0, +248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, +248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, +104,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0, +216,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, + 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, +184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0, + 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0, + 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, +152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, +152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, +152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0, + 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, + 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, + 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, +184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, +184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,155, 18, 7, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, + 56,143, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,189, 18, 7, 0, 0, 0, 0, 56,189, 18, 7, 0, 0, 0, 0,216,156, 18, 7, 0, 0, 0, 0, + 72,158, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,216,156, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 72,158, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +241, 4, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,158, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,216,156, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 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,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, + 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 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,222, 2, 0, 0,222, 2, 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, 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, 68, 65, 84, 65,160, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, +168,164, 18, 7, 0, 0, 0, 0,232,155, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, +152,147, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, + 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136,163, 18, 7, 0, 0, 0, 0,136,163, 18, 7, 0, 0, 0, 0,168,160, 18, 7, 0, 0, 0, 0, 24,162, 18, 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, + 68, 65, 84, 65, 40, 1, 0, 0,168,160, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,162, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, + 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, + 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -248, 79, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 84, 21, 6, 0, 0, 0, 0, 40, 76, 21, 6, 0, 0, 0, 0, - 8, 63, 21, 6, 0, 0, 0, 0, 24, 66, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, 88, 64, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 83, 21, 6, 0, 0, 0, 0,200, 83, 21, 6, 0, 0, 0, 0, -232, 80, 21, 6, 0, 0, 0, 0, 88, 82, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0,232, 80, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 88, 82, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 24,162, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168,160, 18, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, + 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,241, 4, + 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,240, 4, 0, 0, + 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 82, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 80, 21, 6, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, - 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, - 18, 0, 0, 0, 41, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, - 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,241, 4, 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,240, 4, 0, 0, 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 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, + 68, 65, 84, 65,208, 0, 0, 0,136,163, 18, 7, 0, 0, 0, 0,190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,200, 83, 21, 6, 0, 0, 0, 0, -190, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -232, 84, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 92, 21, 6, 0, 0, 0, 0,248, 79, 21, 6, 0, 0, 0, 0, - 24, 66, 21, 6, 0, 0, 0, 0,248, 66, 21, 6, 0, 0, 0, 0,168, 65, 21, 6, 0, 0, 0, 0,216, 67, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 91, 21, 6, 0, 0, 0, 0,152, 91, 21, 6, 0, 0, 0, 0, -216, 85, 21, 6, 0, 0, 0, 0, 40, 90, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0,216, 85, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 72, 87, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168,164, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, +152,172, 18, 7, 0, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0, +104,145, 18, 7, 0, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, + 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88,171, 18, 7, 0, 0, 0, 0, 88,171, 18, 7, 0, 0, 0, 0,152,165, 18, 7, 0, 0, 0, 0,232,169, 18, 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, + 68, 65, 84, 65, 40, 1, 0, 0,152,165, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,167, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, + 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, + 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, + 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 87, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0,184, 88, 21, 6, 0, 0, 0, 0,216, 85, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, - 0, 0,125,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, - 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,240, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,220, 0,253, 0, 0, 0, 4, 0, 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, + 68, 65, 84, 65, 40, 1, 0, 0, 8,167, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,168, 18, 7, 0, 0, 0, 0, +152,165, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,125,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, + 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0, +253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,240, 4, 0, 0, + 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,253, 0, 0, 0, 4, 0, + 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, 68, 65, 84, 65, 40, 1, 0, 0,184, 88, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 40, 90, 21, 6, 0, 0, 0, 0, 72, 87, 21, 6, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, - 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 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,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, - 0, 0, 0, 0, 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, 20, 4, 0, 0, 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,120,168, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,169, 18, 7, 0, 0, 0, 0, + 8,167, 18, 7, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196, 0, 0,112, 68, + 0, 0, 7,196, 0, 0, 7, 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,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 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, 20, 4, 0, 0, + 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 90, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 88, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,252, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, - 18, 0, 0, 0,252, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 21, 4,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, 20, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 4,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, + 68, 65, 84, 65, 40, 1, 0, 0,232,169, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120,168, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, + 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 21, 4, +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, 20, 4, 0, 0, + 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4,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, 68, 65, 84, 65,240, 0, 0, 0,152, 91, 21, 6, 0, 0, 0, 0, -180, 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, 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, + 68, 65, 84, 65,240, 0, 0, 0, 88,171, 18, 7, 0, 0, 0, 0,180, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -216, 92, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,101, 21, 6, 0, 0, 0, 0,232, 84, 21, 6, 0, 0, 0, 0, -248, 66, 21, 6, 0, 0, 0, 0,200, 64, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 99, 21, 6, 0, 0, 0, 0,136, 99, 21, 6, 0, 0, 0, 0, -200, 93, 21, 6, 0, 0, 0, 0, 24, 98, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0,200, 93, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 56, 95, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, - 0, 0, 0, 0, 0, 0,208, 65,154,216, 65, 55, 0, 0, 12, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 11, 68, 0, 0,200, 65, 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 48, 2, 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 95, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0,168, 96, 21, 6, 0, 0, 0, 0,200, 93, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, - 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 76, 1, 0, 0, 2, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,172, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, + 72,181, 18, 7, 0, 0, 0, 0,168,164, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, + 72,146, 18, 7, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, + 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72,179, 18, 7, 0, 0, 0, 0, 72,179, 18, 7, 0, 0, 0, 0,136,173, 18, 7, 0, 0, 0, 0,216,177, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0,168, 96, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 24, 98, 21, 6, 0, 0, 0, 0, 56, 95, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,136,173, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,174, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65,154,216, 65, 55, 0, 0, 12, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 11, 68, 0, 0,200, 65, + 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 48, 2, + 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, + 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 26, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,248,174, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,176, 18, 7, 0, 0, 0, 0, +136,173, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, + 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, + 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, +119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 76, 1, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,104,176, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,177, 18, 7, 0, 0, 0, 0, +248,174, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 98, 21, 6, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 96, 21, 6, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, - 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 1, 76, 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, 47, 2, 0, 0, 47, 2, 0, 0, +119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, + 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,136, 99, 21, 6, 0, 0, 0, 0, -178, 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, 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, + 68, 65, 84, 65, 40, 1, 0, 0,216,177, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104,176, 18, 7, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,111, 18,131, 58,111, 18,131, 58, + 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 87, 1, + 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 47, 2, 0, 0, +119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 1, 76, 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,200,100, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, -200,100, 21, 6, 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0, 8,110, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,240, 0, 0, 0, 72,179, 18, 7, 0, 0, 0, 0,178, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,136,101, 21, 6, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216, 92, 21, 6, 0, 0, 0, 0,104, 67, 21, 6, 0, 0, 0, 0,136, 66, 21, 6, 0, 0, 0, 0, 56, 65, 21, 6, 0, 0, 0, 0, -168, 65, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, - 8, 8,192, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,108, 21, 6, 0, 0, 0, 0, - 56,108, 21, 6, 0, 0, 0, 0,120,102, 21, 6, 0, 0, 0, 0,200,106, 21, 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, 68, 65, 84, 65, 40, 1, 0, 0, -120,102, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,103, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,245, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -232,103, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,105, 21, 6, 0, 0, 0, 0,120,102, 21, 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, +136,180, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,136,180, 18, 7, 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0, +200,189, 18, 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, 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, 68, 65, 84, 65,160, 0, 0, 0, 72,181, 18, 7, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,172, 18, 7, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0, + 72,146, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 8, 8,192, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0, 56,182, 18, 7, 0, 0, 0, 0, +136,186, 18, 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, 68, 65, 84, 65, 40, 1, 0, 0, 56,182, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +168,183, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,183, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 24,185, 18, 7, 0, 0, 0, 0, 56,182, 18, 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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 88,105, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,106, 21, 6, 0, 0, 0, 0,232,103, 21, 6, 0, 0, 0, 0, - 0, 0,240,195, 0, 0,240, 67, 0, 0,135,195, 0, 0,135, 67,238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 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,191, 2, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70, -172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 76, 1, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -200,106, 21, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,105, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, - 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, +240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 24,185, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +136,186, 18, 7, 0, 0, 0, 0,168,183, 18, 7, 0, 0, 0, 0, 0, 0,240,195, 0, 0,240, 67, 0, 0,135,195, 0, 0,135, 67, +238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 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,191, 2, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 2, 76, 1, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, - 56,108, 21, 6, 0, 0, 0, 0,180, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,136,186, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24,185, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, + 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0,202, 2, 76, 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, + 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0,180, 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, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 67, 0, 0,216, 11, 0, 0, 8,110, 21, 6, 0, 0, 0, 0,171, 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, 83, 67, 83, 99,101,110,101, 0, -116, 97,103,101, 0, 97,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40,122, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,139, 21, 6, 0, 0, 0, 0, -152,136, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,122, 21, 6, 0, 0, 0, 0,216,123, 21, 6, 0, 0, 0, 0, -248,122, 21, 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, + 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, - 1, 0, 0, 0, 1, 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, - 72,124, 21, 6, 0, 0, 0, 0,120,105, 34,109,161,127, 0, 0, 17, 2, 24, 0, 90, 90, 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,192, 0, 0, 0, 68,172, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 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,128, 64, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,216, 11, 0, 0,200,189, 18, 7, 0, 0, 0, 0, +171, 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, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, 0, 97,105,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, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, - 0, 0, 1, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, - 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, - 90, 0, 1, 0, 81, 0, 0, 0, 23, 0, 33, 0, 2, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,128, 21, 6, 0, 0, 0, 0, 40,128, 21, 6, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47,116,109,112, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,201, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +184,202, 18, 7, 0, 0, 0, 0,152,203, 18, 7, 0, 0, 0, 0,184,202, 18, 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, 1, 0, 0, 0, 1, 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, 8,204, 18, 7, 0, 0, 0, 0, 8,245, 55, 8, 0, 0, 0, 0, + 17, 2, 24, 0, 90, 90, 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,192, 0, 0, 0, 68,172, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 6, 0, 50, 0, +141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, 90, 0, 1, 0, 81, 0, 0, 0, 23, 0, 33, 0, 2, 0, 0, 0, + 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248,207, 18, 7, 0, 0, 0, 0,248,207, 18, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5410,10 +5863,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5434,77 +5887,81 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63, -173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 54, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,205, 89,108,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,212, 21, 6, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,205,204,204, 61,154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, - 0, 0, 0, 64,154,153, 25, 63, 0, 0, 64, 65,102,102,166, 63, 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, - 0, 0,128, 63, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, - 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 40,122, 21, 6, 0, 0, 0, 0, - 9, 0, 0, 0, 1, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,122, 21, 6, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, -104,123, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,216, 2,222, 1, - 8,146, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,123, 21, 6, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, -216,123, 21, 6, 0, 0, 0, 0,248,122, 21, 6, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,173, 3, 35, 3, - 72,153, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,123, 21, 6, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,104,123, 21, 6, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,161, 0, 65, 2, -104,139, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65,232, 1, 0, 0, 72,124, 21, 6, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, -120,126, 21, 6, 0, 0, 0, 0,248,126, 21, 6, 0, 0, 0, 0,120,127, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 1, 0, 0, 0,205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, - 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,204, 76, 63,205,204, 76, 63, +205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, + 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, +102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 15, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 44, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104, 57,237, 6, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,205,204,204, 61, +154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, 0, 0, 0, 64,154,153, 25, 63, 0, 0, 64, 65,102,102,166, 63, + 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, 0, 0,128, 63, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, + 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 64, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,128, 0, 0, 0,232,201, 18, 7, 0, 0, 0, 0, 9, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +184,202, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 40,203, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 82, 2,204, 1,232,225, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40,203, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0,152,203, 18, 7, 0, 0, 0, 0,184,202, 18, 7, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,255, 2,213, 2, 40,233, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152,203, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,203, 18, 7, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,131, 0, 29, 2, 72,219, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,240, 1, 0, 0, + 8,204, 18, 7, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 72,206, 18, 7, 0, 0, 0, 0,200,206, 18, 7, 0, 0, 0, 0, + 72,207, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0,205,204, 76, 63, 0, 0,180, 66, + 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, + 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 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,128, 63, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61, -102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 67, 2, 0, 3, 2, 0, 1, 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, 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, 0, 0, 0, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0,204,197,121, 63, - 0, 0, 0, 63, 17, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0,120,126, 21, 6, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, -136, 45, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 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, 68, 65, 84, 65, 56, 0, 0, 0, -248,126, 21, 6, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200,200,255,128, 1, 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, 68, 65, 84, 65, 96, 0, 0, 0,120,127, 21, 6, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, -120,158, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, 1, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0,155, 9, 25, 67,190, 23,237, 64, 75, 1,147, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,120, 0, 0, 0, 40,128, 21, 6, 0, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 15, 0, 0, 0, 0, 0, -255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0,200,130, 21, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 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,128, 63, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 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, + 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, 0, 0, 0, 35, 0, 0, 0, +204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 0, 0, 0, 72,206, 18, 7, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 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, 68, 65, 84, 65, 56, 0, 0, 0,200,206, 18, 7, 0, 0, 0, 0, +164, 0, 0, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,255,128, 1, 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, + 68, 65, 84, 65, 96, 0, 0, 0, 72,207, 18, 7, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, 1, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, +155, 9, 25, 67,190, 23,237, 64, 75, 1,147, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, +248,207, 18, 7, 0, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82,101,110,100,101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,127, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 22, 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, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63, 0, 0, 0, 66, 0, 0,144, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 65, 0, 0, 16, 2, 0, 0,216,131, 21, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 16, 2, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 36, 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, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66, -154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 56,134, 21, 6, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63, +154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 24,214, 18, 7, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, @@ -5514,22 +5971,22 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,136, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, - 56,134, 21, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 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, 8,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, + 24,214, 18, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 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,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63, -200,135, 21, 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, +168,215, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,200,135, 21, 6, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,215, 18, 7, 0, 0, 0, 0, 117, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 40,136, 21, 6, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 8,216, 18, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 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, - 87, 79, 0, 0, 24, 2, 0, 0,152,136, 21, 6, 0, 0, 0, 0,142, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87, 79, 0, 0, 24, 2, 0, 0,120,216, 18, 7, 0, 0, 0, 0,142, 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, 87, 79, 87,111,114,108,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, 1, 0, 0, 0, @@ -5546,10 +6003,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -248,138, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,138, 21, 6, 0, 0, 0, 0, +216,218, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,218, 18, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 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, 79, 66, 0, 0,112, 5, 0, 0,104,139, 21, 6, 0, 0, 0, 0, -129, 0, 0, 0, 1, 0, 0, 0, 8,146, 21, 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, 79, 66, 0, 0,112, 5, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, +129, 0, 0, 0, 1, 0, 0, 0,232,225, 18, 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, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5558,7 +6015,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,130, 21, 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,168,210, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 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, @@ -5588,18 +6045,18 @@ char datatoc_startup_blend[] = { 0, 0, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,145, 21, 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, 8,225, 18, 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, 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, 68, 65, 84, 65,152, 0, 0, 0, - 40,145, 21, 6, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,225, 18, 7, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,204,204, 61,205,204, 76, 62, 10,215,163, 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, 2, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0, 8,146, 21, 6, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0, - 72,153, 21, 6, 0, 0, 0, 0,104,139, 21, 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, 2, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0,232,225, 18, 7, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0, + 40,233, 18, 7, 0, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,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, 0, 0, 1, 0, 0, 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, @@ -5607,13 +6064,13 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168,122,142,109,161,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136, 36, 49, 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,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 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, 0, 0, 0, 0, 0,200,151, 21, 6, 0, 0, 0, 0, 24,152, 21, 6, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168,231, 18, 7, 0, 0, 0, 0,248,231, 18, 7, 0, 0, 0, 0, 1, 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, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5638,19 +6095,19 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,152, 21, 6, 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,120, 74, 34,109,161,127, 0, 0, - 56, 83, 34,109,161,127, 0, 0, 25, 0, 0, 38, 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, 72,232, 18, 7, 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, 88, 75, 49, 8, 0, 0, 0, 0, +184, 98, 49, 8, 0, 0, 0, 0, 25, 0, 0, 38, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,200,151, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 24,152, 21, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,104,152, 21, 6, 0, 0, 0, 0,132, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,168,231, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,248,231, 18, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0, 72,232, 18, 7, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,204,204, 61, 205,204, 76, 62, 10,215,163, 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, 72, 0, 0, 0, 79, 66, 0, 0, -112, 5, 0, 0, 72,153, 21, 6, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,146, 21, 6, +112, 5, 0, 0, 40,233, 18, 7, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0, 0, 0, @@ -5659,7 +6116,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,131, 21, 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,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 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, @@ -5690,16 +6147,16 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,159, 21, 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,232,238, 18, 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, 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, 68, 65, 84, 65,152, 0, 0, 0, 8,159, 21, 6, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,232,238, 18, 7, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,204,204, 61,205,204, 76, 62, 10,215,163, 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, 2, 0, 0, 0, 77, 65, 0, 0,128, 3, 0, 0,232,159, 21, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 77, 65, 0, 0,128, 3, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,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, @@ -5719,17 +6176,17 @@ char datatoc_startup_blend[] = { 0, 0, 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, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63,184,163, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,152,243, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,165, 21, 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, 24,245, 18, 7, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 68, 65, 84, 65, 56, 1, 0, 0,184,163, 21, 6, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,181, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,152,243, 18, 7, 0, 0, 0, 0, 25, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 5, 19, 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, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 1, 0, 0, @@ -5739,9 +6196,9 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 40, 0, 0, 0, 56,165, 21, 6, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0,168,165, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 16, 0, 0,168,165, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 0, 0, 0, 24,245, 18, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0,136,245, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 0, 16, 0, 0,136,245, 18, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, 6, 6, 6,153, 4, 4, 4,102, 3, 3, 3,102, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5869,7 +6326,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, 88, 88, 88,204, 81, 81, 81,204, 54, 54, 54,153, 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 0, 0,168, 1, 0, 0,248,181, 21, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0,168, 1, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 33, 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, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5882,10 +6339,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 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, 1, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,183, 21, 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, 68, 65, 84, 65, 40, 0, 0, 0,232,183, 21, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 7, 19, 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, 68, 65, 84, 65, 40, 0, 0, 0,200, 7, 19, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 16, 0, 15, 0, 88,184, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 88,184, 21, 6, + 16, 0, 15, 0, 56, 8, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 56, 8, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6014,22 +6471,22 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0,232, 4, 0, 0,168,200, 21, 6, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0,232, 4, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 50, 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, 77, 69, 67,117, 98,101, 0,112,104,101,114,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,205, 21, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,221, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,217, 21, 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,184, 29, 19, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 42, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 38, 19, 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,120,208, 21, 6, 0, 0, 0, 0,184,211, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 32, 19, 7, 0, 0, 0, 0,152, 35, 19, 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, 40,206, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 0, 0, 0, 0, 8, 30, 19, 7, 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, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,209, 21, 6, 0, 0, 0, 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, 72, 33, 19, 7, 0, 0, 0, 0,255,255,255,255, 255,255,255,255,255,255,255,255, 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, @@ -6040,13 +6497,13 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,218, 21, 6, 0, 0, 0, 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,216, 39, 19, 7, 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, 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, 1, 0, 0, 0, 5, 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,232,214, 21, 6, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 0, 0, 0, 0,120, 36, 19, 7, 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, 0, 0, 0, 0,255,255,255,255,255,255,255,255, @@ -6054,12 +6511,12 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 0, 30, 0, 6, 0, 1, 0, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,216,205, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0,232,159, 21, 6, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, 40,206, 21, 6, 0, 0, 0, 0,124, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,184, 29, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, 8, 30, 19, 7, 0, 0, 0, 0,124, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,208, 21, 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, 88, 32, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6072,16 +6529,16 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,208, 21, 6, 0, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 32, 19, 7, 0, 0, 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73, 26,182, 1, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182, 1, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182, 1, 0, 250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182, 1, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63, 230, 73,230, 73,230, 73, 1, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73, 1, 0, 3, 0,128,191, 250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73, 1, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73, -230, 73, 1, 0, 68, 65, 84, 65, 8, 2, 0, 0,104,209, 21, 6, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, +230, 73, 1, 0, 68, 65, 84, 65, 8, 2, 0, 0, 72, 33, 19, 7, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,211, 21, 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,152, 35, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6095,16 +6552,16 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,184,211, 21, 6, 0, 0, 0, 0, 53, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,152, 35, 19, 7, 0, 0, 0, 0, 53, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, - 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 8, 2, 0, 0,232,214, 21, 6, 0, 0, 0, 0,124, 1, 0, 0, + 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 8, 2, 0, 0,120, 36, 19, 7, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 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, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232,217, 21, 6, 0, 0, 0, 0, 26, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200, 38, 19, 7, 0, 0, 0, 0, 26, 0, 0, 0, 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, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,217, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6117,17 +6574,17 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,232,217, 21, 6, 0, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,200, 38, 19, 7, 0, 0, 0, 0, 59, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, - 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,248,218, 21, 6, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 25, 0, 0, 0, + 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,216, 39, 19, 7, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 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, 78, 71,111,110, 32, 70, 97, 99,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, 0, 72,221, 21, 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, 40, 42, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6141,15 +6598,15 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0, 72,221, 21, 6, 0, 0, 0, 0, 58, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0, 40, 42, 19, 7, 0, 0, 0, 0, 58, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 2, 0, 66, 82, 0, 0, 88, 6, 0, 0,216,221, 21, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,232, 21, 6, + 0, 0, 2, 0, 66, 82, 0, 0, 88, 6, 0, 0,184, 42, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232, 52, 19, 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, 66, 82, 65,100, 100, 0,104, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,248,229, 21, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,216, 50, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6192,10 +6649,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112,222, 21, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80, 43, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6206,10 +6663,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,229, 21, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216, 50, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,136,231, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104, 52, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6217,14 +6674,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,136,231, 21, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,104, 52, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,232, 21, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,240, 21, 6, - 0, 0, 0, 0,216,221, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232, 52, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152, 61, 19, 7, + 0, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108, 111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,168,238, 21, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,136, 59, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6267,10 +6724,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,160,232, 21, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,128, 53, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6281,10 +6738,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,238, 21, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136, 59, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 56,240, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 24, 61, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6292,14 +6749,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 56,240, 21, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 24, 61, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,240, 21, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104,249, 21, 6, - 0, 0, 0, 0, 8,232, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152, 61, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72, 70, 19, 7, + 0, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108, 117,114, 0, 46, 48, 48, 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, 1, 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, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,247, 21, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 56, 68, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6342,10 +6799,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,241, 21, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 48, 62, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6356,10 +6813,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,247, 21, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56, 68, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,248, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,200, 69, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6367,14 +6824,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,232,248, 21, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,200, 69, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104,249, 21, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24, 2, 22, 6, - 0, 0, 0, 0,184,240, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248, 78, 19, 7, + 0, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114, 117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 8, 0, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,232, 76, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6417,10 +6874,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,250, 21, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,224, 70, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6431,10 +6888,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8, 0, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232, 76, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,152, 1, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,120, 78, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6442,14 +6899,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,152, 1, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,120, 78, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200, 10, 22, 6, - 0, 0, 0, 0,104,249, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248, 78, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,168, 87, 19, 7, + 0, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,184, 8, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152, 85, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6492,10 +6949,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,176, 2, 22, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,144, 79, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6506,10 +6963,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184, 8, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 85, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 72, 10, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 40, 87, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6517,14 +6974,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 72, 10, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 40, 87, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200, 10, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120, 19, 22, 6, - 0, 0, 0, 0, 24, 2, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,168, 87, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 88, 96, 19, 7, + 0, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 32, 83,116,114,105,112,115, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,104, 17, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 72, 94, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6567,10 +7024,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 96, 11, 22, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64, 88, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6581,10 +7038,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104, 17, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 72, 94, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,248, 18, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,216, 95, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6592,14 +7049,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,248, 18, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,216, 95, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120, 19, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40, 28, 22, 6, - 0, 0, 0, 0,200, 10, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,105, 19, 7, + 0, 0, 0, 0,168, 87, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 24, 26, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,248,102, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6642,10 +7099,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 20, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,240, 96, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6656,10 +7113,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24, 26, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,102, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,168, 27, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,136,104, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6667,14 +7124,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,168, 27, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,136,104, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216, 36, 22, 6, - 0, 0, 0, 0,120, 19, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,105, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,113, 19, 7, + 0, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114, 101, 97,115,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,200, 34, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,111, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6717,10 +7174,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192, 28, 22, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,160,105, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6731,10 +7188,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200, 34, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,111, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,228, 97,175,190, - 50,131,112, 63,218,243,127,191, 10,183,157,188, 88, 36, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50,131,112, 63,218,243,127,191, 10,183,157,188, 56,113, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6742,14 +7199,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 88, 36, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 56,113, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216, 36, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,136, 45, 22, 6, - 0, 0, 0, 0, 40, 28, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,113, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104,122, 19, 7, + 0, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97, 114,107,101,110, 0, 48, 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, 1, 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, 0, 0, 0, 0, 63, 0, 0, 0, 0,120, 43, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,120, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6792,10 +7249,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112, 37, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,114, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6806,10 +7263,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120, 43, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,120, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 8, 45, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,121, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6817,14 +7274,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 8, 45, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,232,121, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,136, 45, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 56, 54, 22, 6, - 0, 0, 0, 0,216, 36, 22, 6, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68,114, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104,122, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24,131, 19, 7, + 0, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68,114, 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 63, 0, 0, 0, 0, 40, 52, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 8,129, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6867,10 +7324,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 32, 46, 22, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,123, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6881,10 +7338,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 40, 52, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8,129, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,184, 53, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,152,130, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6892,14 +7349,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,184, 53, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,152,130, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232, 62, 22, 6, - 0, 0, 0, 0,136, 45, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24,131, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200,139, 19, 7, + 0, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105, 108,108, 47, 68,101,101,112,101,110, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,216, 60, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,184,137, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -6942,10 +7399,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,208, 54, 22, 6, + 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,176,131, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6956,10 +7413,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216, 60, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184,137, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,104, 62, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 72,139, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6967,14 +7424,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104, 62, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 72,139, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232, 62, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152, 71, 22, 6, - 0, 0, 0, 0, 56, 54, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200,139, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120,148, 19, 7, + 0, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101,110, 47, 67,111,110,116,114, 97,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,136, 69, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,146, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7017,10 +7474,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,128, 63, 22, 6, + 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 96,140, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7031,10 +7488,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136, 69, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104,146, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 24, 71, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,248,147, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7042,14 +7499,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 24, 71, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,248,147, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152, 71, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72, 80, 22, 6, - 0, 0, 0, 0,232, 62, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120,148, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40,157, 19, 7, + 0, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, 97, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 56, 78, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,155, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7092,10 +7549,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, - 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 48, 72, 22, 6, + 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16,149, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7106,10 +7563,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56, 78, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24,155, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,200, 79, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,168,156, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7117,14 +7574,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,200, 79, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,168,156, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248, 88, 22, 6, - 0, 0, 0, 0,152, 71, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40,157, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216,165, 19, 7, + 0, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110, 102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,232, 86, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,200,163, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7167,10 +7624,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, - 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,224, 80, 22, 6, + 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,192,157, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7181,10 +7638,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232, 86, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200,163, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,120, 88, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 88,165, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7192,14 +7649,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,120, 88, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 88,165, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248, 88, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,168, 97, 22, 6, - 0, 0, 0, 0, 72, 80, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216,165, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,136,174, 19, 7, + 0, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97, 121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,152, 95, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,120,172, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7242,10 +7699,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,144, 89, 22, 6, + 20,174,199, 62, 20,174,199, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112,166, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7256,10 +7713,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 95, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120,172, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 40, 97, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 8,174, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7267,14 +7724,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 40, 97, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 8,174, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,168, 97, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 88,106, 22, 6, - 0, 0, 0, 0,248, 88, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,136,174, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 56,183, 19, 7, + 0, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105, 103,104,116,101,110, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 72,104, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 40,181, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7317,10 +7774,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 64, 98, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 32,175, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7331,10 +7788,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 72,104, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 40,181, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,216,105, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,184,182, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7342,14 +7799,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,216,105, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,184,182, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 88,106, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,115, 22, 6, - 0, 0, 0, 0,168, 97, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 56,183, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232,191, 19, 7, + 0, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105, 120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,248,112, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,216,189, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7392,10 +7849,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,240,106, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,208,183, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7406,10 +7863,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,112, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,189, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,136,114, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104,191, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7417,14 +7874,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,136,114, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,104,191, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,115, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,123, 22, 6, - 0, 0, 0, 0, 88,106, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232,191, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152,200, 19, 7, + 0, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117, 108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,168,121, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,136,198, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7467,10 +7924,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,160,115, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,128,192, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7481,10 +7938,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,121, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136,198, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,123, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 24,200, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7492,14 +7949,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 56,123, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 24,200, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,123, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104,132, 22, 6, - 0, 0, 0, 0, 8,115, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152,200, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72,209, 19, 7, + 0, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117, 100,103,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 88,130, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 56,207, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7542,10 +7999,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, - 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,124, 22, 6, + 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 48,201, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7556,10 +8013,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,130, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56,207, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,232,131, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,200,208, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7567,14 +8024,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,232,131, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,200,208, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104,132, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24,141, 22, 6, - 0, 0, 0, 0,184,123, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,105, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72,209, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248,217, 19, 7, + 0, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,105, 110, 99,104, 47, 77, 97,103,110,105,102,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 8,139, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,232,215, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7617,10 +8074,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, - 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0, 0,133, 22, 6, + 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,224,209, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7631,10 +8088,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8,139, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,215, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,152,140, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,120,217, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7642,14 +8099,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,152,140, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,120,217, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24,141, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200,149, 22, 6, - 0, 0, 0, 0,104,132, 22, 6, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248,217, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,168,226, 19, 7, + 0, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111, 108,105,115,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,184,147, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,224, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7692,10 +8149,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,176,141, 22, 6, + 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,144,218, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7706,10 +8163,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184,147, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,224, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 72,149, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,226, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7717,14 +8174,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 72,149, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 40,226, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200,149, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120,158, 22, 6, - 0, 0, 0, 0, 24,141, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,168,226, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 88,235, 19, 7, + 0, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99, 114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,104,156, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 72,233, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7767,10 +8224,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 96,150, 22, 6, + 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64,227, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7781,10 +8238,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104,156, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 72,233, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,248,157, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,216,234, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7792,14 +8249,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,248,157, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,216,234, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120,158, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40,167, 22, 6, - 0, 0, 0, 0,200,149, 22, 6, 0, 0, 0, 0,168,205,210, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 88,235, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,244, 19, 7, + 0, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0,168,205,210, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99, 117,108,112,116, 68,114, 97,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, 2, 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, 63, 0, 0, 0, 0, 24,165, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,248,241, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7842,10 +8299,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16,159, 22, 6, + 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,240,235, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7856,10 +8313,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24,165, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,241, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,168,166, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,136,243, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7867,14 +8324,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,168,166, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,136,243, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40,167, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216,175, 22, 6, - 0, 0, 0, 0,120,158, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,244, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,252, 19, 7, + 0, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109, 101, 97,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,200,173, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,250, 19, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7917,10 +8374,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,167, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,160,244, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7931,10 +8388,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200,173, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,250, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 88,175, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,252, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7942,14 +8399,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 88,175, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 56,252, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216,175, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,136,184, 22, 6, - 0, 0, 0, 0, 40,167, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,252, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104, 5, 20, 7, + 0, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109, 111,111,116,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,120,182, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 3, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -7992,10 +8449,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, - 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112,176, 22, 6, + 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,253, 19, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8006,10 +8463,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120,182, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 3, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 8,184, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 4, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8017,14 +8474,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 8,184, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,232, 4, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,136,184, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 56,193, 22, 6, - 0, 0, 0, 0,216,175, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,110, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104, 5, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24, 14, 20, 7, + 0, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,110, 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0, 40,191, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 8, 12, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8067,10 +8524,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, - 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 32,185, 22, 6, + 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 6, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8081,10 +8538,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 40,191, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8, 12, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,184,192, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,152, 13, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8092,14 +8549,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,184,192, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,152, 13, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 56,193, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232,201, 22, 6, - 0, 0, 0, 0,136,184, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200, 22, 20, 7, + 0, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111, 102,116,101,110, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,216,199, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,184, 20, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8142,10 +8599,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,208,193, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,176, 14, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8156,10 +8613,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,199, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184, 20, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104,201, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 72, 22, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8167,14 +8624,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,201, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 72, 22, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232,201, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152,210, 22, 6, - 0, 0, 0, 0, 56,193, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,117, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200, 22, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120, 31, 20, 7, + 0, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,136,208, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104, 29, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8217,10 +8674,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,128,202, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 96, 23, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8231,10 +8688,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136,208, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104, 29, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 24,210, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54,189,194, 61, 14,215,126,191, 46,189,194, 61,248, 30, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8242,14 +8699,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 24,210, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,248, 30, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152,210, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72,219, 22, 6, - 0, 0, 0, 0,232,201, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120, 31, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40, 40, 20, 7, + 0, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101, 120, 68,114, 97,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, 2, 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, 63, 0, 0, 0, 0, 56,217, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 38, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8292,10 +8749,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 35, 0, 0, 0, 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 48,211, 22, 6, + 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16, 32, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8306,10 +8763,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56,217, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24, 38, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,200,218, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186,168, 39, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8317,14 +8774,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,200,218, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0,168, 39, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72,219, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248,227, 22, 6, - 0, 0, 0, 0,152,210, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,104, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216, 48, 20, 7, + 0, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,104, 117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,232,225, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,200, 46, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8367,10 +8824,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, - 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,224,219, 22, 6, + 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192, 40, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8381,10 +8838,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,225, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200, 46, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,120,227, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 88, 48, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8392,14 +8849,14 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,120,227, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 88, 48, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248,227, 22, 6, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,219, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119, + 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216, 48, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119, 105,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 63, 0, 0, 0, 0,152,234, 22, 6, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,120, 55, 20, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -8442,10 +8899,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, +205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, - 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,144,228, 22, 6, + 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112, 49, 20, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8456,10 +8913,10 @@ char datatoc_startup_blend[] = { 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,234, 22, 6, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120, 55, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,236, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 95,255,186,224,255,127,191,114, 97,255,186, 8, 57, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8467,9 +8924,9 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 40,236, 22, 6, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 48, 0, 0, 0, 8, 57, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 83, 69, 82,112, 38, 0, 0, 32,125, 29, 5, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, 1, 8, 17, 1, + 0, 0, 0, 0, 85, 83, 69, 82,112, 38, 0, 0,224,140, 41, 5, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, 1, 8, 17, 1, 63, 6, 0, 0, 5, 0, 0, 0, 47,116,109,112, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8736,10 +9193,10 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, 56, 52, 39, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, - 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0,104, 19, 23, 6, 0, 0, 0, 0,104, 19, 23, 6, 0, 0, 0, 0,120,248, 22, 6, - 0, 0, 0, 0,120,248, 22, 6, 0, 0, 0, 0, 88, 61, 23, 6, 0, 0, 0, 0, 88, 61, 23, 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,120,228, 21, 6, - 0, 0, 0, 0,184, 60, 23, 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, + 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 72, 96, 20, 7, 0, 0, 0, 0, 72, 96, 20, 7, 0, 0, 0, 0,200, 71, 20, 7, + 0, 0, 0, 0,200, 71, 20, 7, 0, 0, 0, 0, 56,138, 20, 7, 0, 0, 0, 0, 56,138, 20, 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, 88, 49, 19, 7, + 0, 0, 0, 0,152,137, 20, 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, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, @@ -8777,7 +9234,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 62, 0, 0, 0, 0, 68, 65, 84, 65,168, 36, 0, 0,104, 19, 23, 6, 0, 0, 0, 0,206, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 68, 65, 84, 65,168, 36, 0, 0, 72, 96, 20, 7, 0, 0, 0, 0,206, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 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, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, @@ -9047,13 +9504,13 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255, -255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255, +255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255, 255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255, 255,160, 0,255,219, 37, 18,255, 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, + 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,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, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9071,40 +9528,40 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,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, 3, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,120,228, 21, 6, 0, 0, 0, 0,207, 0, 0, 0, - 1, 0, 0, 0, 24,229, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95, 51,100,115, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 88, 49, 19, 7, 0, 0, 0, 0,207, 0, 0, 0, + 1, 0, 0, 0,248, 49, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95, 51,100,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, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 24,229, 21, 6, - 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 88, 56, 23, 6, 0, 0, 0, 0,120,228, 21, 6, 0, 0, 0, 0,105,111, 95,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,248, 49, 19, 7, + 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0, 88, 49, 19, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,102, 98,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 80, 0, 0, 0, 88, 56, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,248, 56, 23, 6, 0, 0, 0, 0, 24,229, 21, 6, + 80, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,248, 49, 19, 7, 0, 0, 0, 0,105,111, 95, 97,110,105,109, 95, 98,118,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,248, 56, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,152, 57, 23, 6, - 0, 0, 0, 0, 88, 56, 23, 6, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,120,134, 20, 7, + 0, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,152, 57, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, - 1, 0, 0, 0, 56, 58, 23, 6, 0, 0, 0, 0,248, 56, 23, 6, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,111, 98,106, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,120,134, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, + 1, 0, 0, 0, 24,135, 20, 7, 0, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,111, 98,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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 56, 58, 23, 6, - 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,216, 58, 23, 6, 0, 0, 0, 0,152, 57, 23, 6, 0, 0, 0, 0,105,111, 95,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 24,135, 20, 7, + 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,120,134, 20, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,120, 51,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, 68, 65, 84, 65, - 80, 0, 0, 0,216, 58, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,120, 59, 23, 6, 0, 0, 0, 0, 56, 58, 23, 6, + 80, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0, 24,135, 20, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,115,116,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, 68, 65, 84, 65, 80, 0, 0, 0,120, 59, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 24, 60, 23, 6, - 0, 0, 0, 0,216, 58, 23, 6, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,117,118, 95,108, 97,121,111,117,116, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,248,136, 20, 7, + 0, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,117,118, 95,108, 97,121,111,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 24, 60, 23, 6, 0, 0, 0, 0,207, 0, 0, 0, - 1, 0, 0, 0,184, 60, 23, 6, 0, 0, 0, 0,120, 59, 23, 6, 0, 0, 0, 0,105,111, 95, 99,117,114,118,101, 95,115,118,103, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,248,136, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, + 1, 0, 0, 0,152,137, 20, 7, 0, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0,105,111, 95, 99,117,114,118,101, 95,115,118,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,184, 60, 23, 6, - 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 60, 23, 6, 0, 0, 0, 0, 99,121, 99,108, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,152,137, 20, 7, + 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,136, 20, 7, 0, 0, 0, 0, 99,121, 99,108, 101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -232, 0, 0, 0, 88, 61, 23, 6, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 0, 0, 0, 56,138, 20, 7, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 32, 83,116,121,108,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, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, @@ -9112,7 +9569,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 5, 0, 5, 0, 8, 0, 2, 0, 8, 0, 4, 0, 0, 0, 68, 78, 65, 49, -148, 4, 1, 0, 8,111,147,109,161,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 58, 13, 0, 0, + 84, 5, 1, 0,232, 8, 63, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 62, 13, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101, 114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, @@ -9503,1332 +9960,1336 @@ char datatoc_startup_blend[] = { 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100, 105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103, -104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, 0,112, 97, -115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0,105,109,116,121,112,101, 0,112,108, 97,110,101,115, 0,113,117, - 97,108,105,116,121, 0, 99,111,109,112,114,101,115,115, 0,101,120,114, 95, 99,111,100,101, 99, 0, 99,105,110,101,111,110, 95, -102,108, 97,103, 0, 99,105,110,101,111,110, 95,119,104,105,116,101, 0, 99,105,110,101,111,110, 95, 98,108, 97, 99,107, 0, 99, -105,110,101,111,110, 95,103, 97,109,109, 97, 0,106,112, 50, 95,102,108, 97,103, 0,105,109, 95,102,111,114,109, 97,116, 0, 42, - 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, - 99,115,101,116,116,105,110,103,115, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112, -115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97, -100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0, -101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101, -113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111, -100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, - 99,104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,115,117, 98,105,109,116,121,112,101, 0, -100,105,115,112,108, 97,121,109,111,100,101, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116, -105,111,110,115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,111, 99,114,101,115, 0,112, 97, -100, 52, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,116, - 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, - 99,116,108, 97,121, 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114, -115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103, 0, -112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, - 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, - 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95, -115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105, -115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0,112,105, 99, 91, 49, 48, - 50, 52, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, - 97,116, 97, 91, 55, 54, 56, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, - 0,115,101,113, 95,112,114,101,118, 95,116,121,112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,101, 0,115,101,113, - 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112, -108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112, -108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, - 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105, -110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114, -112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0, -100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110, -103,105,110,101, 91, 51, 50, 93, 0,110, 97,109,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0, -115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, - 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, - 91, 51, 93, 0, 99,101,108,108,115,105,122,101, 0, 99,101,108,108,104,101,105,103,104,116, 0, 97,103,101,110,116,109, 97,120, -115,108,111,112,101, 0, 97,103,101,110,116,109, 97,120, 99,108,105,109, 98, 0, 97,103,101,110,116,104,101,105,103,104,116, 0, - 97,103,101,110,116,114, 97,100,105,117,115, 0,101,100,103,101,109, 97,120,108,101,110, 0,101,100,103,101,109, 97,120,101,114, -114,111,114, 0,114,101,103,105,111,110,109,105,110,115,105,122,101, 0,114,101,103,105,111,110,109,101,114,103,101,115,105,122, -101, 0,118,101,114,116,115,112,101,114,112,111,108,121, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,100,105,115,116, 0, -100,101,116, 97,105,108,115, 97,109,112,108,101,109, 97,120,101,114,114,111,114, 0,102,114, 97,109,105,110,103, 0,112,108, 97, -121,101,114,102,108, 97,103, 0,114,116, 49, 0,114,116, 50, 0, 97, 97,115, 97,109,112,108,101,115, 0,112, 97,100, 52, 91, 51, - 93, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,116,105,111,110, 0, -114,101, 99, 97,115,116, 68, 97,116, 97, 0,109, 97,116,109,111,100,101, 0,101,120,105,116,107,101,121, 0,111, 98,115,116, 97, - 99,108,101, 83,105,109,117,108, 97,116,105,111,110, 0,108,101,118,101,108, 72,101,105,103,104,116, 0, 42, 99, 97,109,101,114, - 97, 0, 42,112, 97,105,110,116, 95, 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, - 91, 52, 93, 0,112, 97,105,110,116, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108, -101, 0,115, 99,114,101,101,110, 95,103,114, 97, 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,116, 99,117,114,115, -111,114, 0,105,110,118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117, -115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, - 99,116,109,111,100,101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102, -114, 97,109,101,115, 0,114, 97,100,105, 97,108, 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120, 0,108, 97,115,116, - 95,121, 0,108, 97,115,116, 95, 97,110,103,108,101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100, 0, 97,110, 99,104, -111,114,101,100, 95,115,105,122,101, 0, 97,110, 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110, 91, 51, 93, 0, 97, -110, 99,104,111,114,101,100, 95,105,110,105,116,105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114, 97,119, 95,112,114, -101,115,115,117,114,101, 0,112,114,101,115,115,117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105, 97,108, 95,114,111, -116, 97,116,105,111,110, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, - 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0, 42,118, -112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,117,118,115, 99,117,108,112,116, 0,118,103,114,111,117,112, 95,119, -101,105,103,104,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101, -103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, - 97,108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0, -118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, - 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117, -118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, - 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117, -118, 95,115,117, 98,115,117,114,102, 95,108,101,118,101,108, 0,103,112,101,110, 99,105,108, 95,102,108, 97,103,115, 0, 97,117, -116,111,105,107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0, -112,114,111,112,111,114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, - 99,108,101, 97,110, 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101, -121, 95,102,108, 97,103, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,112, 97,100, 50, - 91, 53, 93, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115, -104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120, -116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95, -108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115, -107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109, -109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, - 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101, -105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105, -103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0, -115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105, -118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107, -103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, - 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105, -115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111, -110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100, -101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0, -101,100,103,101, 95,109,111,100,101, 0,101,100,103,101, 95,109,111,100,101, 95,108,105,118,101, 95,117,110,119,114, 97,112, 0, -115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0, -112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0,112,114,111,112,111,114,116,105,111, -110, 97,108, 95,111, 98,106,101, 99,116,115, 0,112, 97,100, 91, 53, 93, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122, -101, 0,109,117,108,116,105,112, 97,105,110,116, 0,117,115,101, 95,117,118, 95,115, 99,117,108,112,116, 0,117,118, 95,115, 99, -117,108,112,116, 95,115,101,116,116,105,110,103,115, 0,117,118, 95,115, 99,117,108,112,116, 95,116,111,111,108, 0,117,118, 95, -114,101,108, 97,120, 95,109,101,116,104,111,100, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,101,116,116,105,110, -103,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,101, 0,115, 99,117, -108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97, -100,105,117,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,108,112,104, 97, 0, -117,110,105,102,105,101,100, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,116,111,116,111, 98,106, 0,116,111, -116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, - 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, - 0,115,121,115,116,101,109, 95,114,111,116, 97,116,105,111,110, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0,113,117,105, 99, -107, 95, 99, 97, 99,104,101, 95,115,116,101,112, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, - 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, - 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,108, 97,121, 95,117, -112,100, 97,116,101,100, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, - 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,110,100, 95,115, 99, -101,110,101, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,115,111,117,110,100, 95,115, - 99,114,117, 98, 95,104, 97,110,100,108,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101,115, 0, 42,102,112, -115, 95,105,110,102,111, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97, -103,115, 0, 97, 99,116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103, -109, 0,117,110,105,116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110,103,115, 0, 42, 99,108,105,112, 0, 99,117, -115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 95,109,111,100, 97,108, 0, 99,117,115,101,114, 0, 98,108,101,110,100, 0, -118,105,101,119, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0, -118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115, -105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97, -116,111, 98, 91, 52, 93, 91, 52, 93, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,108, 91, - 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,110,100, -101,114, 95,101,110,103,105,110,101, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116, -105,109,101,114, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, - 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,105,115, - 95,112,101,114,115,112, 0,112,101,114,115,112, 0,118,105,101,119,108,111, 99,107, 0,116,119,100,114, 97,119,102,108, 97,103, - 0,114,102,108, 97,103, 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, - 0,103,114,105,100,118,105,101,119, 0,116,119, 97,110,103,108,101, 91, 51, 93, 0,114,111,116, 95, 97,110,103,108,101, 0,114, -111,116, 95, 97,120,105,115, 91, 51, 93, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, - 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0, 98,117,110,100,108, -101, 95,115,105,122,101, 0, 98,117,110,100,108,101, 95,100,114, 97,119,116,121,112,101, 0,108, 97,121, 95,117,115,101,100, 0, - 42,111, 98, 95, 99,101,110,116,114,101, 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99, -101,110,116,114,101, 95, 98,111,110,101, 91, 54, 52, 93, 0,100,114, 97,119,116,121,112,101, 0,111, 98, 95, 99,101,110,116,114, -101, 95, 99,117,114,115,111,114, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,103,114,105,100, 0,110, -101, 97,114, 0,102, 97,114, 0,109,111,100,101,115,101,108,101, 99,116, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105, -100,115,117, 98,100,105,118, 0,103,114,105,100,102,108, 97,103, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116, -119,102,108, 97,103, 0,112, 97,100, 50, 91, 50, 93, 0, 97,102,116,101,114,100,114, 97,119, 95,116,114, 97,110,115,112, 0, 97, -102,116,101,114,100,114, 97,119, 95,120,114, 97,121, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121,116,114, 97,110, -115,112, 0,122, 98,117,102, 0,120,114, 97,121, 0,112, 97,100, 51, 91, 50, 93, 0, 42,112,114,111,112,101,114,116,105,101,115, - 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97, -120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111, -108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97, -108,105,103,110, 0,119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 42, -116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0,114,112,116, 95,109, - 97,115,107, 0,118, 50,100, 0, 42, 97,100,115, 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97, -112, 0, 99,117,114,115,111,114, 86, 97,108, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115, -101,114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101, 95, 99,111,110,116, -101,120,116, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0, 42,116,101, -120,117,115,101,114, 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, - 97, 0,122,111,111,109, 0,116,105,116,108,101, 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,102,105,108,101, 91, - 50, 53, 54, 93, 0,114,101,110, 97,109,101,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,101,100,105,116, 91, - 50, 53, 54, 93, 0,102,105,108,116,101,114, 95,103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,102,105,108,101, - 0,115,101,108, 95,102,105,114,115,116, 0,115,101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, - 0,102, 95,102,112, 0,102,112, 95,115,116,114, 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, - 97,114, 97,109,115, 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100, -101,114,115, 95,110,101,120,116, 0, 42,111,112, 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, - 0, 42,108, 97,121,111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115, -116,101,109,110,114, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114, -105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116, -111,114,101,102,108, 97,103, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0, 42, 99,117,109, 97,112, 0,115, 99,111,112, -101,115, 0,115, 97,109,112,108,101, 95,108,105,110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,101, -110,116,120, 0, 99,101,110,116,121, 0, 99,117,114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, - 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0,116,111,112, 0,118, -105,101,119,108,105,110,101,115, 0,109,101,110,117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108, -105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110, -117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104,116, 0,111,118,101, -114,119,114,105,116,101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120, -116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110, -115, 0,102,105,110,100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0,109, - 97,114,103,105,110, 95, 99,111,108,117,109,110, 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121, 95,100,114, 97,119, - 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101, -114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, - 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, - 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,104, -101,115, 0, 99, 97, 99,104,101, 95,100,105,115,112,108, 97,121, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0,112, 97,100,102, - 0,109,120, 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111, -109, 0,115,104, 97,100,101,114,102,114,111,109, 0,108,105,110,107,100,114, 97,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, - 99,117,114,115,111,114, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, - 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,101,108, - 95,101,110,100, 0,102,105,108,116,101,114, 91, 54, 52, 93, 0,120,108,111, 99,107,111,102, 0,121,108,111, 99,107,111,102, 0, -117,115,101,114, 0,112, 97,116,104, 95,108,101,110,103,116,104, 0,108,111, 99, 91, 50, 93, 0,115,116, 97, 98,109, 97,116, 91, - 52, 93, 91, 52, 93, 0,117,110,105,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,116,112,114,111, 99, 95, -102,108, 97,103, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, - 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0, -107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, - 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, - 97,110,101,108,116,105,116,108,101, 0,103,114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, - 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0, -109,105,110,119,105,100,103,101,116, 99,104, 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, - 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98, -117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101, -114, 0,111,117,116,108,105,110,101, 91, 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, - 52, 93, 0,105,116,101,109, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115, -104, 97,100,101,100, 0,115,104, 97,100,101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99, -104,101, 99,107, 0,105,110,110,101,114, 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101, -108, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, - 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95, -115,101,108, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111, -108, 95,114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99, -111,108, 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, - 0,119, 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101, -110,117, 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0, -119, 99,111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, - 95, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, - 99,111,108, 95,108,105,115,116, 95,105,116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, - 99,111,110,102,105,108,101, 91, 50, 53, 54, 93, 0,105, 99,111,110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0, -116,105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, - 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104, -105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98, -117,116,116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, -108,105,115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, - 52, 93, 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101, -108, 95,116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116, -101,120,116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105, -108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, - 93, 0,108, 97,109,112, 91, 52, 93, 0,115,112,101, 97,107,101,114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97, -109,101,114, 97, 91, 52, 93, 0,112, 97,100, 91, 56, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, - 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118, -101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, - 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100, -103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, - 95, 99,114,101, 97,115,101, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, - 93, 0,102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,101,120,116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0, -101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,110,103,108,101, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97, -114,101, 97, 91, 52, 93, 0,112, 97,100, 51, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95, -110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115, -101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102, -114, 97,109,101, 91, 52, 93, 0,110,117,114, 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, - 91, 52, 93, 0, 97, 99,116, 95,115,112,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, - 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111, -105,110,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116, -111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, - 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108, -101, 95,115,101,108, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, - 0,104, 97,110,100,108,101, 95,115,101,108, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97, -108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, - 52, 93, 0,100,115, 95, 99,104, 97,110,110,101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, - 93, 0, 99,111,110,115,111,108,101, 95,111,117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117, -116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114, -111,114, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115, -105,122,101, 0,111,117,116,108,105,110,101, 95,119,105,100,116,104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110, -111,111,100,108,101, 95, 99,117,114,118,105,110,103, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, - 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, - 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,109,111,118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, - 91, 52, 93, 0,115, 99,101,110,101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0, -112,108,117,103,105,110, 91, 52, 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0, -101,100,105,116,109,101,115,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, - 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100, -108,101, 95,118,101,114,116,101,120, 95,115,105,122,101, 0,109, 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, - 0,109, 97,114,107,101,114, 91, 52, 93, 0, 97, 99,116, 95,109, 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114, -107,101,114, 91, 52, 93, 0,100,105,115, 95,109, 97,114,107,101,114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, - 91, 52, 93, 0, 98,117,110,100,108,101, 95,115,111,108,105,100, 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, - 52, 93, 0,112, 97,116,104, 95, 97,102,116,101,114, 91, 52, 93, 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0, -104,112, 97,100, 91, 55, 93, 0,112,114,101,118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95, -115,116,105,116, 99,104, 95,102, 97, 99,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100, -103,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101, -118,105,101,119, 95,115,116,105,116, 99,104, 95,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101, -119, 95,115,116,105,116, 99,104, 95,117,110,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, - 95,115,116,105,116, 99,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99, -116,101,100, 95,104,105,103,104,108,105,103,104,116, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98, -117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116, 97, 99,116, 0,116, -110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116, -110,111,100,101, 0,116,108,111,103,105, 99, 0,116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, - 99,108,105,112, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0, -109,111,100,117,108,101, 91, 54, 52, 93, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116, -105,109,101, 0,116,101,109,112,100,105,114, 91, 55, 54, 56, 93, 0,102,111,110,116,100,105,114, 91, 55, 54, 56, 93, 0,114,101, -110,100,101,114,100,105,114, 91, 49, 48, 50, 52, 93, 0,116,101,120,116,117,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103, -116,101,120,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 55, 54, 56, 93, 0,112,121,116,104, -111,110,100,105,114, 91, 55, 54, 56, 93, 0,115,111,117,110,100,100,105,114, 91, 55, 54, 56, 93, 0,105,109, 97,103,101, 95,101, -100,105,116,111,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 91, 49, 48, 50, 52, 93, 0, 97,110, -105,109, 95,112,108, 97,121,101,114, 95,112,114,101,115,101,116, 0,118, 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122, -101, 0,116,105,109,101, 99,111,100,101, 95,115,116,121,108,101, 0,118,101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108, -105, 99,107, 95,116,105,109,101, 0,103, 97,109,101,102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111, -108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119, -122,111,111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105, -111,114, 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0, -100,112,105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115, -104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111, -110,116,115, 0,117,105,115,116,121,108,101,115, 0,107,101,121,109, 97,112,115, 0,117,115,101,114, 95,107,101,121,109, 97,112, -115, 0, 97,100,100,111,110,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116, -101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0, -103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101, -116,116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115, -101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, - 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116, -101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,103,116, -104,114,101,115,104,111,108,100, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102, -114, 97,109,101,115, 0,102,114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110, -103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103, -104,116, 0,114,101, 99,101,110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108, -114,101,115,108,105,109,105,116, 0, 99,117,114,115,115,105,122,101, 0, 99,111,108,111,114, 95,112,105, 99,107,101,114, 95,116, -121,112,101, 0,105,112,111, 95,110,101,119, 0,107,101,121,104, 97,110,100,108,101,115, 95,110,101,119, 0,115, 99,114, 99, 97, -115,116,102,112,115, 0,115, 99,114, 99, 97,115,116,119, 97,105,116, 0,119,105,100,103,101,116, 95,117,110,105,116, 0, 97,110, -105,115,111,116,114,111,112,105, 99, 95,102,105,108,116,101,114, 0,117,115,101, 95, 49, 54, 98,105,116, 95,116,101,120,116,117, -114,101,115, 0,112, 97,100, 56, 0,110,100,111,102, 95,115,101,110,115,105,116,105,118,105,116,121, 0,110,100,111,102, 95,102, -108, 97,103, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0,116,101,120,116, 95,114,101,110,100,101,114, 0,112, 97,100, 57, - 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97, -121, 95, 99,111,108, 91, 51, 93, 0,116,119,101, 97,107, 95,116,104,114,101,115,104,111,108,100, 0, 97,117,116,104,111,114, 91, - 56, 48, 93, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,116,121,112,101, 0, 99,111,109,112,117,116,101, 95, -100,101,118,105, 99,101, 95,105,100, 0,102, 99,117, 95,105,110, 97, 99,116,105,118,101, 95, 97,108,112,104, 97, 0,118,101,114, -116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110, -101, 0,114,101,100,114, 97,119,115, 95,102,108, 97,103, 0,102,117,108,108, 0,116,101,109,112, 0,119,105,110,105,100, 0,100, -111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115,104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114, -101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99,117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, - 97,103, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110, -105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119, -118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, - 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0, -111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,108, 97, 98,101,108,111,102,115, 0, 99,111,110,116,114,111, -108, 0,115,110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105, -118,101,100, 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115, -116, 95,108, 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115, -101, 97,114, 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101, -116,121,112,101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101, -114,115, 0, 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119, -105,110,105,100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,114, 97, -119, 95,111,118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101, -114,115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118, -101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114, -115,105,111,110, 0,119,105,110,112,111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, - 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,111,110, 0,110, 97,109,101, - 91, 50, 53, 54, 93, 0,111,114,105,103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,103,104,116, 0, 98,111,116, -116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, - 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0, 98,117,105,108,100, 95,115, -105,122,101, 95,102,108, 97,103,115, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,100,111,110,101, 0,115,116, - 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0, 42, 99,114, -111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42,105,110, -115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114, -105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,115, 0, -109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,115, 97,116, 0,109,117, -108, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0,115,116,114,101, 97,109,105,110, -100,101,120, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105,112, 95,102,108, 97,103, 0, 42,115, -116,114,105,112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101,114, 0, -115,112,101,101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101, -113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100, 0,112,105,116, 99,104, 0, -112, 97,110, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114, -116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,101,110, -100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, - 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105,109, 97, -103,101,100,105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 49, 48, 50, 52, 93, 0,111, -118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108, 97,103, 0,111,118,101,114, - 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101,116,121, -112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, 81,117, - 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, 73,110, -105, 0,120, 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, - 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83, -112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114, -106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97, -110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118, -101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, - 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, - 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0, -115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,103, -114,111,117,112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 54, 52, 93, 0, 42,107, -101,121,115, 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112,111,105, -110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, - 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116,111,103,103,108,101, 78, 97,109,101, - 91, 54, 52, 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, 91, 54, 52, 93, 0,100,101,108, 97, -121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 54, 52, 93, 0,100, 97,109,112, -116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, 97,109,101, 91, 54, 52, 93, 0, 97, -120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, 0, 99,111,110,115,116,114, 97,105, -110,116, 91, 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 54, 52, 93, 0, 98, -111,100,121, 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,110,107, -115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105,110,103, -108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105,115,105, -111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,108,105, -110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, 97, 99, -116, 0,102,114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,116,121, - 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110,103, -116,104, 0,108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105, -110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99, -101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108, -101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97, -105,110, 0,115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108,105,110, - 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97,108, -102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, 0,102, -111,114, 99,101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116, -121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, - 99,101, 0,109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, 97,120, -108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,112,114, -111,112, 91, 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116,105,111, -110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, - 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 54, 52, 93, 0, 42,116,111, - 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97, -100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0,105, -110,102,108,117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99,105,110,103, 97,120,105,115, 0,118, -101,108,111, 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117,114,110,115,112,101,101,100, 0,117, -112,100, 97,116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42,110,101,119,112, 97, 99,107,101,100, -102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99,104,101, - 0, 42,119, 97,118,101,102,111,114,109, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42,108, 97,109, -112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0, - 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98, -111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97, -105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 97,114,109, 95,114,111,108,108, 0,120,119,105, -100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0, -114, 97,100, 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97, -115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, 0, 42, -115,107,101,116, 99,104, 0,103,101,118,101,114,116,100,101,102,111,114,109,101,114, 0,108, 97,121,101,114, 95,117,115,101,100, - 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105, -122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104, -111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, - 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0, -103,104,111,115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,115,116, - 95, 97, 99, 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,116, 95, -102,108, 97,103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,118,105, -101,119,102,108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, 97,116, -104, 95,101,102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0,105,107,102,108, 97,103, 0, 97,103,114,112, - 95,105,110,100,101,120, 0, 99,111,110,115,116,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0,112, 97,100, 48, - 91, 54, 93, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0,115,105,107,116,114,101,101, 0, - 42, 99,117,115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, 95,109, - 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97, -100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105, -109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, - 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42,116,101,109,112, 0, 99, -104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116, -114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, - 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, 42,105, -107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91, 54, 52, - 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,116,101, -112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, 97,120, - 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 99, -117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0,105,100,114,111,111, -116, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,115,101, 97,114, 99,104,115,116,114, 91, - 54, 52, 93, 0,102,105,108,116,101,114,102,108, 97,103, 0,114,101,110, 97,109,101, 73,110,100,101,120, 0, 97,100,115, 0,116, -105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0, -116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114, -114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0, -115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116, -101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42, -112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112,111,108,101, 97,110, -103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110, -117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101, -115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, - 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0, -118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105, -118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105, -116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, - 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109, -105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, - 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0,116, -114, 97, 99,107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, 91, 54, 52, 93, 0, 42,100,101,112,116,104, 95,111, 98, 0, 99,104, - 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105, -115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, - 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101, -108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115, -111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0,105,115, 95, 99,111, -112,121, 0,101,120,116,101,114,110, 97,108, 0, 42,110,101,119, 95,115,111, 99,107, 0, 42,115,116,111,114, 97,103,101, 0,108, -105,109,105,116, 0,115,116,114,117, 99,116, 95,116,121,112,101, 0,108,111, 99,120, 0,108,111, 99,121, 0, 42,100,101,102, 97, -117,108,116, 95,118, 97,108,117,101, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,115,116, 97, 99,107, 95,116,121,112,101, - 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107, 0, 42, -108,105,110,107, 0,110,115, 0, 42,114,101, 99,116, 0,120,115,105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119, 95,110, -111,100,101, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, 0,117,112,100, 97, -116,101, 0,108, 97, 98,101,108, 91, 54, 52, 93, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115, -116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114, -101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116, -121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115, -111, 99,107, 0, 42,116,111,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0,105,110,105,116, 0, 99,117,114, - 95,105,110,100,101,120, 0,110,111,100,101,116,121,112,101, 0, 42,101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114,111,103, -114,101,115,115, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98, -114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51, 93, 0, -118, 97,108,117,101, 91, 52, 93, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109, 97, -120,115,112,101,101,100, 0,109,105,110,115,112,101,101,100, 0, 99,117,114,118,101,100, 0,112,101,114, 99,101,110,116,120, 0, -112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0,103, 97,109,109, 97, 0,105,109, 97,103,101, 95,105,110, 95,119,105, -100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110, -116,101,114, 95,121, 0,115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, - 97, 95,115,112, 97, 99,101, 0,104,117,101, 0, 98, 97,115,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111,114,109, - 97,116, 0, 97, 99,116,105,118,101, 95,105,110,112,117,116, 0,117,115,101, 95,114,101,110,100,101,114, 95,102,111,114,109, 97, -116, 0,117,115,101, 95,110,111,100,101, 95,102,111,114,109, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101, -110,103,116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97, -110,110,101,108, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, 97, 99, 95,120, 50, 0,102, - 97, 99, 95,121, 49, 0,102, 97, 99, 95,121, 50, 0, 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, 98,107,116,121,112,101, 0, -112, 97,100, 95, 99, 49, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108, -117,114, 0, 98,116,104,114,101,115,104, 0,114,111,116, 97,116,105,111,110, 0,112, 97,100, 95,102, 49, 0, 42,100,105, 99,116, - 0, 42,110,111,100,101, 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, 0, 97,110,103,108,101, 95,111,102,115, - 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, - 91, 51, 93, 0,108,105,102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, - 99,104, 97,110, 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115, -112,105,108,108,103, 0,117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112,105,110,103, 0, 99,111,108,111,114, 95, -109, 97,112,112,105,110,103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, 51, 93, 0,116,117,114, 98,105,100,105, -116,121, 0, 99,111,108,111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116,105,111,110, 0,103,114, 97,100,105,101, -110,116, 95,116,121,112,101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, 97,118,101, 95,116,121,112,101, 0,119, - 97,118,101, 95,116,121,112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108, -101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, - 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,100, - 95,116,105,109,101,115,116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99, -107, 91, 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, - 0,120, 95,114,101,115,111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, - 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, - 0,115, 97,109,112,108,101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, - 99,121, 0,119, 97,118,101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97, -118,101,102,114,109, 95,121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111, -112,101, 95, 97,108,112,104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, - 51, 93, 91, 50, 93, 0,104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, - 95, 50, 0, 42,119, 97,118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114, -109, 95,116,111,116, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,105, 99,111,110, - 95,105,109, 98,117,102, 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97, -108, 95,119,101,105,103,104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115, -116,114,111,107,101, 95,114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111, -114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,112,108, 97,110,101, 0,112,108, 97,110,101, - 95,111,102,102,115,101,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,112, 97,105,110,116, 95, -116,111,111,108, 0,105,109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, 0,112, 97,100, 51, 91, 53, 93, 0, 97,117,116, -111,115,109,111,111,116,104, 95,102, 97, 99,116,111,114, 0, 99,114,101, 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116, -111,114, 0,112,108, 97,110,101, 95,116,114,105,109, 0,116,101,120,116,117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97, -115, 0,116,101,120,116,117,114,101, 95,111,118,101,114,108, 97,121, 95, 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, - 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0, 97, 99,116,105,118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, - 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97, -112, 91, 51, 52, 93, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, - 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97,108, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103, -114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116, -105, 99,108,101, 95,105,110,100,101,120, 91, 50, 93, 0,100,101,108,101,116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97, -114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112, -114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,110,117, -109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110, -103, 95,107, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 99,111,110,115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97, -116,105,111, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 98, 97,108, 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, - 97,110, 99,101, 0,118,105,115, 99,111,115,105,116,121, 95,111,109,101,103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98, -101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,107, 0,115,116,105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0, -114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,117,111,121, 97,110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97, -109,101,115, 0, 42, 98,111,105,100,115, 0, 42,102,108,117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, - 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, - 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102, -114, 97,109,101,115, 0,100,114, 97,119, 95, 99,111,108, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101, -112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105, -120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, - 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101, -116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, - 91, 50, 93, 0, 98, 98, 95,115,105,122,101, 91, 50, 93, 0, 98, 98, 95,118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101, -108, 95,116, 97,105,108, 0, 99,111,108,111,114, 95,118,101, 99, 95,109, 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101, -102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97, -110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119, -101, 97,107, 0, 99,111,117,114, 97,110,116, 95,116, 97,114,103,101,116, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97, -105,114, 0,103,114,105,100, 95,114, 97,110,100, 0,112,115, 95,111,102,102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114, -101,115, 0,101,102,102,101, 99,116,111,114, 95, 97,109,111,117,110,116, 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109, -101, 95,112, 97,100, 91, 51, 93, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, - 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101, -102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100, -115,105,122,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110, -100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0, -112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, - 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, - 95,102,108, 97,116, 0,107,105,110,107, 95, 97,109,112, 95, 99,108,117,109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103, -104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, - 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112, -101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110,103,116,104, 95,116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95, -102, 97, 99, 0,112, 97,114,116,105,110,103, 95,109,105,110, 0,112, 97,114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, - 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, - 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112, -115, 0,100,117,112,108,105,119,101,105,103,104,116,115, 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, - 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, - 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104, -101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, - 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42, -108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,114, 97,109,101, 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, - 0, 99,104,105,108,100, 95,115,101,101,100, 0,116,111,116,117,110,101,120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0, -116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112, -115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, - 91, 51, 93, 91, 54, 52, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114, -101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116,111,114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105, -110,103,115, 0,116,111,116, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100, -115,112,114,105,110,103,115, 0, 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, - 99, 0, 95,112, 97,100, 0, 67,100,105,115, 0, 67,118,105, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105, -110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, - 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111, -114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109, -101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111,111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102, -114,105, 99,116,105,111,110, 0,118,101,108, 95,100, 97,109,112,105,110,103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109, -101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121, -112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117, -112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,114, -101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,108, -102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, - 99,101, 0,100,105,115,116, 97,110, 99,101, 95,114,101,112,101,108, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110, -116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0, -115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, - 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95, -115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115, -116,111,114,101,108,101,118,101,108, 0, 42,114,101,112,111,114,116,116,105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, - 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110,100,111,119,115, 0,105,110,105,116,105, 97,108,105,122, -101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112, 95,117,110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, - 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117, -114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99, -111,110,102, 0, 42, 97,100,100,111,110, 99,111,110,102, 0, 42,117,115,101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, - 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114, 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114, -115,111,114, 0, 42,115, 99,114,101,101,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109, -101, 91, 54, 52, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,110,100,111,119,115,116, 97,116,101, 0,109,111,110,105, -116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0,109,111,100, 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111, -117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119, -101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, - 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117, -114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0, -112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107, -101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101, 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95, -105,116,101,109, 0, 42, 97,100,100, 95,105,116,101,109, 0,105,116,101,109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0, -115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0,107,109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, - 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107, -101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42, -114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102, -105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112, -108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102, -102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95, -109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102, -116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105, -111,110, 0,115,116,101,112, 95,115,105,122,101, 0, 42,114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109, -101, 91, 51, 50, 93, 0,116,114, 97,110,115, 67,104, 97,110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, - 93, 0,110,117,109, 95,116, 97,114,103,101,116,115, 0,118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105, -111,110, 91, 50, 53, 54, 93, 0, 42,101,120,112,114, 95, 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97, -114,114, 97,121, 95,105,110,100,101,120, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102, -114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, - 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100, -109,111,100,101, 0,101,120,116,101,110,100,109,111,100,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101, 0, -103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112,109,111,100,101, 0,107,101,121,105,110,103,102,108, 97,103, 0,112, - 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105,111,110, 91, 50, 52, 48, 93, 0,116,121,112,101,105,110,102,111, 91, 54, - 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107, -115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99, -116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105, -110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111,112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111, -114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113, -117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101,114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104, -101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0,114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, - 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110, -101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95,105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104, -110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103,103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95, -115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, - 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, - 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97, -110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114, -115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97, -116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117, -112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111, -119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98, -101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101, -116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115, -112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104, -101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104,105,103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, - 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,115, 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115, -105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108,101, 0,118,111,114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105, -116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116,105, 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, - 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0,118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103, -114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110,116,115, 95,111,108,100, 0, 42,118,101,108, 0,109, 97,116, 95,111, -108,100, 91, 52, 93, 91, 52, 93, 0,118,111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105,110, 0,100, -105,115,116, 97,110, 99,101, 95,109, 97,120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99,101, 0, 99, -111,110,101, 95, 97,110,103,108,101, 95,111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110,110,101,114, - 0, 99,111,110,101, 95,118,111,108,117,109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97,103, 0, 98, -117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0,108, 97,115, -116,115,105,122,101, 91, 50, 93, 0,116,114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99,111,110,116, -101,120,116, 0,112,114,111,120,121, 0,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104,116, 0, 42, -116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114, 97, 99,107, - 95,100,105,115, 97, 98,108,101,100, 0, 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101, 91, 50, 93, - 0,101,114,114,111,114, 0, 42,105,110,116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100,116,104, 0, -112,105,120,101,108, 95, 97,115,112,101, 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110, 99,105,112, - 97,108, 91, 50, 93, 0,107, 49, 0,107, 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110, 91, 50, 93, - 0,112, 97,116, 95,109, 97,120, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97,114, 99,104, - 95,109, 97,120, 91, 50, 93, 0,109, 97,114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114, 0, 42,109, - 97,114,107,101,114,115, 0, 98,117,110,100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103, 0,115,101, - 97,114, 99,104, 95,102,108, 97,103, 0,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114,110, 95,109, - 97,116, 99,104, 0,116,114, 97, 99,107,101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109,105,110,105, -109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107,101,114, 0, -100,101,102, 97,117,108,116, 95,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108,116, 95,109, -105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101, -114,110, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100,101,102, 97, -117,108,116, 95,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103,105,110, 0, -100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116, 95,102,108, - 97,103, 0,112,111,100, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102,114, 97,109,101, 50, 0,114,101,102,105,110, -101, 95, 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0,112, 97,100, 50, 51, 0, 99,108,101, 97,110, 95, -102,114, 97,109,101,115, 0, 99,108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101,114,114,111,114, 0, -111, 98,106,101, 99,116, 95,100,105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97, 99,116, 95,116,114, - 97, 99,107, 0,109, 97,120,115, 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99,105,110,102, 0,115, - 99, 97,108,101,105,110,102, 0,114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108, 97,115,116, 95, 99, - 97,109,101,114, 97, 0, 99, 97,109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115, 0,114,101, 99,111, -110,115,116,114,117, 99,116,105,111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,115,101,116,116,105,110,103,115, - 0, 99, 97,109,101,114, 97, 0,115,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, - 0,111, 98,106,101, 99,116,115, 0,111, 98,106,101, 99,116,110,114, 0,116,111,116, 95,111, 98,106,101, 99,116, 0, 42, 98,114, -117,115,104, 95,103,114,111,117,112, 0, 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116,121,112, -101, 0,105,109, 97,103,101, 95,102,105,108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112,114,101, -118,105,101,119, 95,105,100, 0,105,110,105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0,105,109, - 97,103,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99,111,108, -111,114, 91, 52, 93, 0, 42,105,110,105,116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114,110, 97, -109,101, 91, 54, 52, 93, 0,100,114,121, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114,101,115, -104,111,108,100, 0,100,101,112,116,104, 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115,112,114, -101, 97,100, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115,104,114, -105,110,107, 95,115,112,101,101,100, 0,100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110,102,108, -117,101,110, 99,101, 95,115, 99, 97,108,101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95,100, 97, -109,112,105,110,103, 0,119, 97,118,101, 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108,101, 0, -119, 97,118,101, 95,115,112,114,105,110,103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, 49, 48, - 50, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 50, - 91, 54, 52, 93, 0, 42,112,109,100, 0,115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0,101,114, -114,111,114, 91, 54, 52, 93, 0, 99,111,108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116,105, 99, -108,101, 95,114, 97,100,105,117,115, 0,112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110,116, 95, -100,105,115,116, 97,110, 99,101, 0, 42,112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, 0,112, -114,111,120,105,109,105,116,121, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95,102, 97, - 99,116,111,114, 0,119, 97,118,101, 95, 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115,109,117, -100,103,101, 95,115,116,114,101,110,103,116,104, 0, 0, 0, 0, 84, 89, 80, 69, 16, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, - 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102, -108,111, 97,116, 0,100,111,117, 98,108,101, 0,105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105, -100, 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118, -101, 99, 50,102, 0,118,101, 99, 51,102, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, - 97,116, 97, 0, 73, 68, 80,114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97, -116, 97, 0, 80,114,101,118,105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, - 0, 73,112,111, 67,117,114,118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75, -101,121, 66,108,111, 99,107, 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101, -120,116, 77, 97,114,107,101,114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, - 73,109, 97,103,101, 85,115,101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, - 0, 97,110,105,109, 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103, -105,110, 84,101,120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, - 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 86,111, -120,101,108, 68, 97,116, 97, 0, 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97, -112,112,105,110,103, 0, 67,111,108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 86,111,108,117,109,101, 83,101, -116,116,105,110,103,115, 0, 71, 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111, -117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110, -100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, - 66,111,120, 0, 69,100,105,116, 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101, -108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101,108,101, 99,116, 0, 77, 80,111,108,121, - 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, - 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, - 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 66, 77, 69,100,105,116, 77, -101,115,104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 77, 68,101,102,111,114,109, 87, -101,105,103,104,116, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116, -121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, - 79,114,105,103, 83,112, 97, 99,101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, - 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117, -108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77, 82,101, 99, 97,115,116, - 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,112,112,105,110,103, 73,110,102,111, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99, -101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, 68, 97, -116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102, -105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101, -118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105,110, 83, -101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 67, -111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, - 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77, -111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, - 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, - 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105, -101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116, -104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101,116,116, -105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104, -101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, - 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115,104, 0, - 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, - 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68, -101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, - 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97,114,116, -105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, - 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83, -101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, -105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, - 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 83, 99,114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 0, 79, 99,101, 97,110, 67, 97, 99,104,101, 0, 87, 97,114,112, 77,111,100,105,102, -105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 69,100,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, - 0, 87,101,105,103,104,116, 86, 71, 77,105,120, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, - 71, 80,114,111,120,105,109,105,116,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97, -105,110,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 67, 97,110,118, - 97,115, 83,101,116,116,105,110,103,115, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 66,114,117,115,104, 83,101,116,116, -105,110,103,115, 0, 82,101,109,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,105,116, 76, 97,116,116, - 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115, -105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86, -105,122, 83,101,116,116,105,110,103,115, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102, -116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111, -107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116, -115, 0, 80, 84, 67, 97, 99,104,101, 69,120,116,114, 97, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104, -101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114, -105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 70,108,117,105,100, 86,101,114,116,101,120, 86,101,108,111, 99,105,116, -121, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116, -105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105, -110,103,115, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99, -101,110,101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 73,109, 97,103,101, 70,111,114,109, 97,116, 68, 97,116, 97, 0, 82, -101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, - 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, 82,101, 99, 97,115,116, 68, 97,116, 97, 0, 71, 97,109,101, 68, 97,116, 97, - 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105, -110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114, -116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, 0, 83, 99,117,108,112,116, 0, 85,118, 83, 99,117,108,112, -116, 0, 86, 80, 97,105,110,116, 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 85,110, -105,102,105,101,100, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, - 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105, -110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, - 0, 77,111,118,105,101, 67,108,105,112, 0, 66, 71,112,105, 99, 0, 77,111,118,105,101, 67,108,105,112, 85,115,101,114, 0, 82, -101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,110,100,101,114, 69,110,103, -105,110,101, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119, -109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83, -112, 97, 99,101, 73,110,102,111, 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, - 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, - 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70, -105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114, -101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105, -115,116,111,103,114, 97,109, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112, -116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, - 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 67,111,110,115, -111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114, -101,102, 0, 83,112, 97, 99,101, 67,108,105,112, 0, 77,111,118,105,101, 67,108,105,112, 83, 99,111,112,101,115, 0,117,105, 70, -111,110,116, 0,117,105, 70,111,110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, - 67,111,108,111,114,115, 0,117,105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0,117,105, 80, 97,110, -101,108, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109, -101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105, -103,104,116, 0, 85,115,101,114, 68,101,102, 0, 98, 83, 99,114,101,101,110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69, -100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, - 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121, -112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111, -112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, - 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101, -113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, - 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108, -111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66, -117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, - 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110, -115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, - 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, - 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, - 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101, -110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110, -115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99, -107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67, -111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, - 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 83,111,117,110,100, 65, - 99,116,117, 97,116,111,114, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101, -110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98, -106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, - 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71, -114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101, -115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115, -105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97, -116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116, -111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116,101,101,114,105,110,103, 65, 99, -116,117, 97,116,111,114, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114, -101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, - 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99, -101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105, -110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110, -116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, - 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,111,110,115,116,114, 97,105, -110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107, -101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110, -116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, 97,109,101, 86,111,108,117,109, -101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, - 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, - 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84, -114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, - 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, - 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115, -116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, -102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111,110,115,116,114, 97,105,110,116, 0, - 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105, -115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, - 67, 97,109,101,114, 97, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 79, 98,106,101, 99,116, 83,111, -108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, - 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107, -101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 0, -117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, 98, 78,111,100,101, 84,114,101,101, 69,120,101, 99, 0, - 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 73,110,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, - 97,108,117,101, 70,108,111, 97,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 66,111,111,108,101, 97, -110, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 86,101, 99,116,111,114, 0, 98, 78,111,100,101, 83,111, - 99,107,101,116, 86, 97,108,117,101, 82, 71, 66, 65, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, - 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116, -101,114, 97,108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103, -101, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97, -103,101, 77,117,108,116,105, 70,105,108,101, 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100, -101, 84,119,111, 88, 89,115, 0, 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116, -114,121, 0, 78,111,100,101, 86,101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100, -101, 83, 99,114,105,112,116, 68,105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97, -112, 0, 78,111,100,101, 76,101,110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, - 78,111,100,101, 67,111,108,111,114,115,112,105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84, -101,120, 83,107,121, 0, 78,111,100,101, 84,101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101, -114, 0, 78,111,100,101, 84,101,120, 69,110,118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100, -105,101,110,116, 0, 78,111,100,101, 84,101,120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, - 0, 78,111,100,101, 84,101,120, 77,117,115,103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100, -101, 84,101,120, 77, 97,103,105, 99, 0, 78,111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101, -120, 78,111,100,101, 79,117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, - 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117, -115,116,111,109, 68, 97,116, 97, 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108, -101, 75,101,121, 0, 66,111,105,100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, - 99,108,101, 83,112,114,105,110,103, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, - 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, - 99,108,101, 68, 97,116, 97, 0, 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108, -101, 83,101,116,116,105,110,103,115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, - 97, 99,104,101, 75,101,121, 0, 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, - 76,105,110,107, 78,111,100,101, 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, - 71, 80, 68,102,114, 97,109,101, 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, - 87,105,110,100,111,119, 77, 97,110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102, -105,103, 0,119,109, 69,118,101,110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, - 0,119,109, 75,101,121, 77, 97,112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97, -112, 68,105,102,102, 73,116,101,109, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112, -101, 0, 70, 77,111,100,105,102,105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, - 70,117,110, 99,116,105,111,110, 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97, -116, 97, 0, 70, 77,111,100, 95, 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111, -100, 95, 80,121,116,104,111,110, 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, - 70, 77,111,100, 95, 83,116,101,112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, - 86, 97,114, 0, 67,104, 97,110,110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, - 65,110,105,109, 77, 97,112, 80, 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, - 78,108, 97, 84,114, 97, 99,107, 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79, -118,101,114,114,105,100,101, 0, 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66, -111,105,100, 82,117,108,101, 71,111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111, -108,108,105,115,105,111,110, 0, 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105, -100, 82,117,108,101, 65,118,101,114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, - 66,111,105,100, 83,116, 97,116,101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83, -112,101, 97,107,101,114, 0, 77,111,118,105,101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, - 97, 99,104,101, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, - 84,114, 97, 99,107, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82, -101, 99,111,110,115,116,114,117, 99,116,101,100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, - 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118, -105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, - 99,107,105,110,103, 82,101, 99,111,110,115,116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110, -103, 79, 98,106,101, 99,116, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 68,121,110, 97,109, -105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 68, 97,116, 97, 0, - 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 8, 0, 8, 0, 0, 0, 16, 0, 24, 0, - 16, 0, 4, 0, 8, 0, 12, 0, 16, 0, 16, 0, 32, 0,128, 0,120, 0,152, 8, 0, 0, 40, 0,144, 0,112, 5,112, 0, 36, 0, - 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0, 16, 0,200, 0, 40, 0,216, 11, 48, 5, 0, 0, 0, 0, 0, 0, - 56, 1,168, 1,216, 4, 24, 0, 8, 3,200, 0, 0, 0,104, 0, 64, 1, 56, 4, 80, 0, 24, 1,144, 0, 56, 3, 16, 2, 88, 0, - 16, 0,128, 3,152, 0,136, 4, 0, 0,104, 0,104, 0, 0, 1, 80, 0, 8, 0, 16, 0, 32, 0, 0, 0, 8, 2, 0, 0, 0, 0, - 0, 0,232, 4, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0, 20, 0, 48, 0, 64, 0, 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, - 0, 0,176, 0,144, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 8, 0, 24, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 4, 0, -112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0,192, 0,128, 0,120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,192, 0, - 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0, 88, 1,112, 0,168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0, -152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1,144, 0,152, 2,136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0, -112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1,104, 1,160, 1,104, 1,136, 0,104, 0,112, 0,128, 0, 16, 0, 96, 1, - 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0,120, 0,152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2, 40, 0,184, 0,152, 0, 64, 0, 72, 0, 32, 0,120, 0, 24, 0, 56, 9, - 64, 0, 24, 0, 16, 0, 56, 0,168, 0, 96, 0, 24, 0, 88, 6, 48, 0, 16, 0,168, 0, 96, 0, 24, 0, 56, 0,120, 0, 16, 0, -232, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0,192, 8,104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 1, 56, 0,144, 0, 64, 0,240, 0,112, 0,248, 0,240, 0,160, 7,104, 0, 0, 0,168, 0, 0, 0, 24, 1, 16, 0, 16, 0, - 40, 33,128, 16, 24, 16,216, 0,160, 2,168, 5, 64, 0, 24, 0,208, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 40, 1, 56, 0, - 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3,224, 1, 16, 0,168, 36, 80, 0, 56, 0,112, 38, 8, 1, 32, 0, 40, 0, - 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 48, 4, 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3,200, 4, 80, 1, -208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0, 24, 0, 32, 0,136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0, -136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0,204, 0,136, 0,136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, - 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0,112, 0,148, 0, 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, - 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1, 0, 1, 16, 0, 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0, -120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0, 80, 0, 80, 0, 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, - 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0, 28, 0, 28, 0, 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, - 48, 0,208, 0, 56, 0, 16, 0, 88, 1, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 4, 0, 24, 0, 16, 0, 16, 0, 40, 0, 28, 0, - 12, 0, 12, 0, 32, 4, 40, 4, 32, 0, 44, 0, 24, 0, 8, 0,128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, - 20, 0,200, 3,216, 3,208, 3,200, 3,208, 3,208, 3,200, 3,208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, - 24, 0,104, 0, 0, 4, 24, 0, 56, 0, 56, 0, 20, 0, 16, 0, 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, - 32, 0,136, 0, 0, 0,120, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, - 16, 0,104, 0, 0, 1, 40, 0,208, 0,104, 0,112, 0,216, 1, 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0, -128, 0, 0, 0, 0, 0,184, 0, 8, 3, 0, 0,248, 0,192, 0, 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, - 16, 6, 0, 0, 83, 84, 82, 67,207, 1, 0, 0, 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, 13, 0, 0, 0, - 13, 0, 1, 0, 11, 0, 2, 0, 14, 0, 2, 0, 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, - 16, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 18, 0, 4, 0, - 4, 0, 8, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 20, 0, 4, 0, 11, 0, 12, 0, 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, 21, 0, 0, 0, - 21, 0, 1, 0, 0, 0, 16, 0, 0, 0, 17, 0, 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, 4, 0, 22, 0, - 4, 0, 23, 0, 22, 0, 11, 0, 11, 0, 0, 0, 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, 2, 0, 27, 0, - 2, 0, 28, 0, 2, 0, 18, 0, 4, 0, 29, 0, 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 8, 0, 22, 0, 32, 0, 22, 0, 33, 0, - 24, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, 4, 0, 37, 0, 4, 0, 27, 0, 23, 0, 38, 0, 25, 0, 5, 0, 4, 0, 39, 0, - 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 4, 0, 43, 0, 26, 0, 6, 0, 27, 0, 44, 0, 2, 0, 45, 0, 2, 0, 46, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 47, 0, 28, 0, 21, 0, 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 48, 0, 30, 0, 49, 0, - 19, 0, 50, 0, 19, 0, 51, 0, 2, 0, 45, 0, 2, 0, 46, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, - 2, 0, 18, 0, 2, 0, 56, 0, 7, 0, 10, 0, 7, 0, 11, 0, 4, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, - 26, 0, 61, 0, 31, 0, 7, 0, 22, 0, 32, 0, 14, 0, 62, 0, 19, 0, 63, 0, 2, 0, 45, 0, 2, 0, 64, 0, 2, 0, 65, 0, - 2, 0, 27, 0, 32, 0, 16, 0, 32, 0, 0, 0, 32, 0, 1, 0, 7, 0, 66, 0, 7, 0, 60, 0, 2, 0, 16, 0, 2, 0, 67, 0, - 2, 0, 68, 0, 2, 0, 18, 0, 4, 0, 69, 0, 4, 0, 70, 0, 11, 0, 2, 0, 7, 0, 71, 0, 0, 0, 19, 0, 0, 0, 72, 0, - 7, 0, 73, 0, 7, 0, 74, 0, 33, 0, 15, 0, 22, 0, 32, 0, 34, 0, 75, 0, 32, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, - 4, 0, 27, 0, 14, 0, 79, 0, 31, 0, 80, 0, 22, 0, 81, 0, 2, 0, 16, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 18, 0, - 7, 0, 84, 0, 4, 0, 85, 0, 35, 0, 6, 0, 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 86, 0, 0, 0, 87, 0, 4, 0, 22, 0, - 4, 0, 88, 0, 36, 0, 10, 0, 36, 0, 0, 0, 36, 0, 1, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 91, 0, 4, 0, 67, 0, - 4, 0, 13, 0, 4, 0, 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 95, 0, 4, 0, 92, 0, - 4, 0, 96, 0, 14, 0, 97, 0, 35, 0, 98, 0, 35, 0, 99, 0, 4, 0,100, 0, 4, 0,101, 0, 14, 0,102, 0, 0, 0,103, 0, - 4, 0,104, 0, 4, 0,105, 0, 11, 0,106, 0, 8, 0,107, 0, 38, 0, 3, 0, 4, 0,108, 0, 4, 0,109, 0, 11, 0, 2, 0, - 39, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0, 0, 0, 16, 0, 0, 0,110, 0, 2, 0, 18, 0, 7, 0,111, 0, 7, 0,112, 0, - 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, - 7, 0,121, 0, 31, 0, 80, 0, 27, 0,122, 0, 0, 0,123, 0, 0, 0,124, 0, 40, 0, 14, 0, 41, 0,125, 0, 4, 0,126, 0, - 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, 0, 0, 0,130, 0, 0, 0,131, 0, 0, 0,132, 0, 0, 0, 27, 0, 2, 0,133, 0, - 2, 0,134, 0, 2, 0,135, 0, 2, 0, 18, 0, 4, 0, 30, 0, 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,136, 0, - 43, 0,137, 0, 44, 0,138, 0, 45, 0,139, 0, 45, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,132, 0, 2, 0, 18, 0, - 2, 0,143, 0, 2, 0, 16, 0, 4, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, - 2, 0,150, 0, 4, 0,151, 0, 4, 0,152, 0, 38, 0,153, 0, 25, 0,154, 0, 7, 0,155, 0, 4, 0,156, 0, 2, 0,157, 0, - 2, 0,158, 0, 2, 0,159, 0, 0, 0,160, 0, 0, 0,161, 0, 7, 0,162, 0, 7, 0,163, 0, 46, 0, 65, 0, 2, 0,164, 0, - 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 27, 0,168, 0, 47, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, - 0, 0,173, 0, 0, 0,174, 0, 7, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, - 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 0, 0,184, 0, 0, 0,124, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 7, 0,188, 0, 7, 0,189, 0, 7, 0, 56, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, - 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, - 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, - 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, - 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, - 48, 0, 15, 0, 0, 0, 35, 0, 11, 0,227, 0, 0, 0,228, 0, 0, 0,229, 0, 4, 0,230, 0, 4, 0,231, 0, 11, 0,232, 0, - 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 4, 0,236, 0, 11, 0,237, 0, 11, 0,238, 0, 4, 0,239, 0, 4, 0, 27, 0, - 49, 0, 6, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,240, 0, 7, 0, 66, 0, 4, 0, 63, 0, 50, 0, 5, 0, - 2, 0, 18, 0, 2, 0, 37, 0, 2, 0, 63, 0, 2, 0,241, 0, 49, 0,235, 0, 51, 0, 17, 0, 27, 0,168, 0, 42, 0,242, 0, - 52, 0,243, 0, 7, 0,244, 0, 7, 0,245, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,247, 0, - 4, 0,248, 0, 2, 0,249, 0, 2, 0,250, 0, 4, 0,132, 0, 4, 0,144, 0, 2, 0,251, 0, 2, 0,252, 0, 53, 0, 25, 0, - 2, 0, 18, 0, 2, 0,253, 0, 7, 0,254, 0, 7, 0,255, 0, 2, 0,143, 0, 2, 0, 0, 1, 4, 0, 1, 1, 4, 0, 2, 1, - 27, 0,168, 0, 4, 0, 3, 1, 2, 0, 4, 1, 2, 0, 5, 1, 11, 0, 6, 1, 7, 0, 7, 1, 7, 0, 8, 1, 2, 0, 9, 1, - 2, 0, 10, 1, 2, 0, 11, 1, 2, 0, 12, 1, 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 50, 0, 17, 1, - 54, 0, 18, 1, 55, 0, 13, 0, 4, 0, 19, 1, 4, 0, 20, 1, 2, 0, 21, 1, 2, 0, 18, 0, 2, 0, 22, 1, 2, 0, 23, 1, - 27, 0,168, 0, 7, 0, 24, 1, 4, 0, 25, 1, 0, 0, 26, 1, 7, 0, 27, 1, 4, 0, 28, 1, 4, 0,132, 0, 56, 0, 4, 0, - 27, 0,168, 0, 0, 0, 29, 1, 4, 0, 30, 1, 4, 0, 27, 0, 47, 0, 64, 0, 22, 0, 32, 0, 34, 0, 75, 0, 7, 0, 31, 1, - 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, - 7, 0, 30, 0, 7, 0, 40, 1, 7, 0, 41, 1, 7, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, - 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 7, 0, 51, 1, 2, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, - 2, 0, 55, 1, 2, 0, 56, 1, 2, 0, 57, 1, 2, 0, 58, 1, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0, 59, 1, - 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, 4, 0, 63, 1, 4, 0, 64, 1, 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 22, 1, - 2, 0,130, 0, 4, 0, 22, 0, 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 67, 0, - 40, 0, 69, 1, 57, 0, 70, 1, 31, 0, 80, 0, 42, 0,242, 0, 48, 0, 71, 1, 50, 0, 17, 1, 51, 0, 72, 1, 25, 0,154, 0, - 53, 0, 73, 1, 55, 0, 74, 1, 56, 0, 75, 1, 0, 0, 76, 1, 0, 0,124, 0, 58, 0, 13, 0, 7, 0, 77, 1, 7, 0, 78, 1, - 7, 0,176, 0, 4, 0, 18, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 4, 0, 27, 0, 7, 0, 79, 1, - 7, 0, 80, 1, 7, 0, 81, 1, 27, 0, 44, 0, 59, 0, 9, 0, 50, 0, 82, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, - 4, 0, 18, 0, 7, 0, 83, 1, 7, 0, 84, 1, 4, 0, 85, 1, 4, 0, 86, 1, 60, 0, 74, 0, 22, 0, 32, 0, 34, 0, 75, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 87, 1, 2, 0,179, 0, 2, 0, 88, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 7, 0,188, 0, 7, 0, 89, 1, 7, 0, 90, 1, 7, 0, 91, 1, 7, 0, 92, 1, 7, 0, 93, 1, 7, 0, 94, 1, 7, 0, 95, 1, - 7, 0, 96, 1, 7, 0, 97, 1, 7, 0, 98, 1, 7, 0, 99, 1, 54, 0,100, 1, 2, 0,253, 0, 2, 0, 30, 0, 7, 0,112, 0, - 7, 0,113, 0, 7, 0,101, 1, 7, 0,102, 1, 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, - 2, 0,108, 1, 2, 0,109, 1, 0, 0,110, 1, 0, 0,111, 1, 2, 0,112, 1, 2, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, - 2, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 7, 0,120, 1, 2, 0,121, 1, 2, 0, 67, 0, 2, 0,122, 1, - 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, - 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, 7, 0,137, 1, 2, 0,138, 1, - 0, 0,139, 1, 31, 0, 80, 0, 46, 0,140, 1, 2, 0,141, 1, 2, 0, 76, 1, 0, 0,142, 1, 25, 0,154, 0, 57, 0, 70, 1, - 61, 0, 18, 0, 7, 0,143, 1, 7, 0,144, 1, 7, 0,145, 1, 7, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, - 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 2, 0,153, 1, 2, 0,154, 1, 2, 0,155, 1, 2, 0,156, 1, 7, 0,157, 1, - 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 62, 0, 4, 0, 4, 0, 18, 0, 4, 0,161, 1, 4, 0,162, 1, 4, 0, 67, 0, - 63, 0,126, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0,163, 1, 2, 0, 18, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, - 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, 7, 0,175, 1, 7, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, - 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 61, 0,184, 1, 62, 0,185, 1, 7, 0,186, 1, 7, 0,187, 1, - 7, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, 7, 0,191, 1, 7, 0,192, 1, 2, 0,193, 1, 2, 0,194, 1, 2, 0,195, 1, - 0, 0,196, 1, 0, 0,197, 1, 7, 0,198, 1, 7, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, 7, 0,202, 1, 7, 0,203, 1, - 7, 0,204, 1, 7, 0,205, 1, 2, 0,206, 1, 2, 0,207, 1, 4, 0, 87, 1, 4, 0,208, 1, 2, 0,209, 1, 2, 0,210, 1, - 2, 0,211, 1, 2, 0,212, 1, 7, 0,213, 1, 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, - 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 7, 0,222, 1, 0, 0,223, 1, 7, 0,224, 1, 7, 0,225, 1, 7, 0,226, 1, - 4, 0,227, 1, 0, 0,228, 1, 0, 0,122, 1, 0, 0,229, 1, 0, 0, 76, 1, 2, 0,230, 1, 2, 0,231, 1, 2, 0,141, 1, - 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1, 7, 0,235, 1, 7, 0,236, 1, 7, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, - 2, 0,164, 0, 2, 0,165, 0, 50, 0,240, 1, 50, 0,241, 1, 0, 0,242, 1, 0, 0,243, 1, 0, 0,244, 1, 0, 0,245, 1, - 2, 0,246, 1, 2, 0,247, 1, 7, 0,248, 1, 7, 0,249, 1, 46, 0,140, 1, 57, 0, 70, 1, 31, 0, 80, 0, 64, 0,250, 1, - 25, 0,154, 0, 7, 0,251, 1, 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, 2, 0, 0, 2, 2, 0, 30, 0, - 7, 0, 1, 2, 7, 0, 2, 2, 7, 0, 3, 2, 7, 0, 4, 2, 7, 0, 5, 2, 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, - 7, 0, 9, 2, 2, 0, 10, 2, 2, 0, 11, 2, 4, 0, 12, 2, 2, 0, 13, 2, 2, 0, 14, 2, 14, 0, 15, 2, 65, 0, 4, 0, - 22, 0, 32, 0, 0, 0, 35, 0, 66, 0, 2, 0, 38, 0,153, 0, 67, 0, 20, 0, 67, 0, 0, 0, 67, 0, 1, 0, 68, 0, 16, 2, - 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 17, 2, 2, 0, 18, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 19, 2, - 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 22, 2, 7, 0, 23, 2, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0, 22, 0, 7, 0, 26, 2, - 7, 0, 27, 2, 69, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0, 68, 0, 16, 2, 14, 0, 28, 2, 14, 0, 29, 2, 14, 0, 30, 2, - 31, 0, 80, 0, 63, 0, 31, 2, 0, 0, 18, 0, 0, 0, 32, 2, 2, 0, 33, 2, 2, 0,178, 0, 2, 0, 27, 0, 7, 0, 77, 1, - 7, 0,176, 0, 7, 0, 78, 1, 7, 0, 34, 2, 7, 0, 35, 2, 7, 0, 36, 2, 67, 0, 37, 2, 30, 0, 11, 0, 7, 0, 38, 2, - 7, 0, 39, 2, 7, 0, 40, 2, 7, 0,255, 0, 2, 0, 54, 0, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 43, 2, 0, 0, 44, 2, - 0, 0, 45, 2, 0, 0, 46, 2, 29, 0, 7, 0, 7, 0, 47, 2, 7, 0, 39, 2, 7, 0, 40, 2, 2, 0, 43, 2, 2, 0, 46, 2, - 7, 0,255, 0, 7, 0, 27, 0, 70, 0, 21, 0, 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 16, 0, 2, 0, 48, 2, 2, 0, 46, 2, - 2, 0, 18, 0, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 53, 2, 2, 0, 54, 2, 2, 0, 55, 2, - 2, 0, 56, 2, 7, 0, 57, 2, 7, 0, 58, 2, 29, 0, 48, 0, 30, 0, 49, 0, 2, 0, 59, 2, 2, 0, 60, 2, 4, 0, 61, 2, - 71, 0, 5, 0, 2, 0, 62, 2, 2, 0, 48, 2, 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 72, 0, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 7, 0, 63, 2, 7, 0, 64, 2, 73, 0, 4, 0, 14, 0, 65, 2, 74, 0, 66, 2, 4, 0, 67, 2, 0, 0, 94, 0, - 75, 0, 68, 0, 22, 0, 32, 0, 34, 0, 75, 0, 68, 0, 16, 2, 14, 0, 68, 2, 14, 0, 29, 2, 73, 0, 69, 2, 27, 0, 70, 2, - 27, 0, 71, 2, 27, 0, 72, 2, 31, 0, 80, 0, 76, 0, 73, 2, 33, 0, 74, 2, 63, 0, 31, 2, 14, 0, 75, 2, 7, 0, 77, 1, - 7, 0,176, 0, 7, 0, 78, 1, 2, 0, 16, 0, 2, 0,178, 0, 2, 0, 76, 2, 2, 0, 77, 2, 7, 0, 78, 2, 7, 0, 79, 2, - 4, 0, 80, 2, 2, 0, 27, 0, 2, 0, 33, 2, 2, 0, 18, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, - 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 85, 2, 2, 0, 86, 2, 4, 0, 87, 2, 11, 0, 88, 2, 2, 0, 22, 0, 2, 0, 97, 0, - 2, 0, 66, 0, 2, 0, 89, 2, 7, 0, 90, 2, 7, 0, 91, 2, 7, 0, 92, 2, 7, 0, 93, 2, 7, 0, 94, 2, 7, 0, 95, 2, - 7, 0, 96, 2, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0, 99, 2, 0, 0,100, 2, 77, 0,101, 2, 78, 0,102, 2, 0, 0,103, 2, - 65, 0,104, 2, 65, 0,105, 2, 65, 0,106, 2, 65, 0,107, 2, 4, 0,108, 2, 7, 0, 84, 0, 4, 0,109, 2, 4, 0,110, 2, - 72, 0,111, 2, 4, 0,112, 2, 4, 0,113, 2, 71, 0,114, 2, 71, 0,115, 2, 79, 0, 47, 0, 22, 0, 32, 0, 34, 0, 75, 0, - 68, 0, 16, 2, 31, 0, 80, 0, 33, 0, 74, 2, 63, 0, 31, 2, 80, 0,116, 2, 81, 0,117, 2, 82, 0,118, 2, 83, 0,119, 2, - 84, 0,120, 2, 85, 0,121, 2, 86, 0,122, 2, 87, 0,123, 2, 88, 0,124, 2, 89, 0,125, 2, 90, 0,126, 2, 91, 0,127, 2, - 92, 0,128, 2, 93, 0,129, 2, 79, 0,130, 2, 94, 0,131, 2, 95, 0,132, 2, 95, 0,133, 2, 95, 0,134, 2, 95, 0,135, 2, - 95, 0,136, 2, 4, 0, 53, 0, 4, 0,137, 2, 4, 0,138, 2, 4, 0,139, 2, 4, 0,140, 2, 4, 0,141, 2, 4, 0,142, 2, - 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, 2, 0,178, 0, 2, 0, 76, 2, 2, 0,143, 2, 2, 0, 18, 0, 2, 0,144, 2, - 2, 0,145, 2, 0, 0,146, 2, 0, 0,147, 2, 2, 0, 33, 2, 96, 0,148, 2, 88, 0, 8, 0, 11, 0,149, 2, 7, 0,150, 2, - 4, 0,151, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 86, 0, 7, 0, 4, 0,155, 2, - 4, 0,156, 2, 4, 0,157, 2, 4, 0,158, 2, 2, 0, 48, 2, 0, 0,159, 2, 0, 0, 18, 0, 90, 0, 5, 0, 4, 0,155, 2, - 4, 0,156, 2, 0, 0,160, 2, 0, 0,161, 2, 2, 0, 18, 0, 97, 0, 2, 0, 4, 0,162, 2, 7, 0, 40, 2, 91, 0, 3, 0, - 97, 0,163, 2, 4, 0,164, 2, 4, 0, 18, 0, 89, 0, 4, 0, 7, 0,165, 2, 2, 0,166, 2, 0, 0, 18, 0, 0, 0,161, 2, - 92, 0, 4, 0, 0, 0,240, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, 81, 0, 5, 0, 4, 0,167, 2, 4, 0,141, 2, - 2, 0, 48, 2, 0, 0, 18, 0, 0, 0, 27, 0, 83, 0, 2, 0, 4, 0,168, 2, 4, 0,169, 2, 82, 0, 6, 0, 42, 0,149, 2, - 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 84, 0, 2, 0, 7, 0,170, 2, 4, 0, 18, 0, - 85, 0, 4, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, 0, 0,240, 0, 93, 0, 1, 0, 7, 0,171, 2, 80, 0, 2, 0, - 4, 0, 14, 2, 4, 0, 16, 0, 87, 0, 7, 0, 7, 0,150, 2, 42, 0,149, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, - 2, 0,153, 2, 2, 0,154, 2, 98, 0, 1, 0, 7, 0,172, 2, 99, 0, 1, 0, 4, 0,173, 2,100, 0, 1, 0, 0, 0,174, 2, -101, 0, 1, 0, 7, 0,150, 2,102, 0, 1, 0, 7, 0,170, 2,103, 0, 4, 0, 4, 0,175, 2, 4, 0,176, 2, 7, 0,177, 2, - 4, 0,178, 2,104, 0, 4, 0, 7, 0,240, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,105, 0, 1, 0,104, 0,151, 2, -106, 0, 5, 0, 4, 0,179, 2, 4, 0,180, 2, 0, 0, 18, 0, 0, 0, 48, 2, 0, 0,181, 2,107, 0, 2, 0, 4, 0,182, 2, - 4, 0,180, 2,108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,183, 2,105, 0,184, 2,107, 0,185, 2, 4, 0, 53, 0, - 4, 0,138, 2, 4, 0,137, 2, 4, 0, 27, 0, 89, 0,186, 2, 96, 0, 14, 0, 14, 0,187, 2, 89, 0,186, 2, 0, 0,188, 2, - 0, 0,189, 2, 0, 0,190, 2, 0, 0,191, 2, 0, 0,192, 2, 0, 0,193, 2, 0, 0,194, 2, 0, 0, 18, 0, 95, 0,132, 2, - 95, 0,134, 2, 2, 0,195, 2, 0, 0,196, 2,109, 0, 1, 0, 4, 0,173, 2,110, 0, 9, 0,110, 0, 0, 0,110, 0, 1, 0, - 4, 0, 16, 0, 4, 0, 87, 1, 4, 0,197, 2, 4, 0, 27, 0, 0, 0, 19, 0, 41, 0,125, 0, 0, 0,198, 2,111, 0, 6, 0, -110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2,112, 0, 7, 0,110, 0,199, 2, - 2, 0,205, 2, 2, 0,187, 2, 2, 0,206, 2, 2, 0, 92, 0, 11, 0,207, 2, 11, 0,208, 2,113, 0, 5, 0,110, 0,199, 2, - 27, 0,168, 0, 0, 0, 19, 0, 7, 0,209, 2, 0, 0, 94, 0,114, 0, 5, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 19, 0, - 2, 0,210, 2, 0, 0,211, 2,115, 0, 5, 0,110, 0,199, 2, 7, 0, 90, 0, 7, 0,212, 2, 4, 0,213, 2, 4, 0,214, 2, -116, 0, 5, 0,110, 0,199, 2, 27, 0,215, 2, 0, 0, 72, 0, 4, 0, 87, 1, 4, 0, 18, 0,117, 0, 13, 0,110, 0,199, 2, - 27, 0,216, 2, 27, 0,217, 2, 27, 0,218, 2, 27, 0,219, 2, 7, 0,220, 2, 7, 0,221, 2, 7, 0,212, 2, 7, 0,222, 2, - 4, 0,223, 2, 4, 0,224, 2, 4, 0, 92, 0, 4, 0,225, 2,118, 0, 5, 0,110, 0,199, 2, 2, 0,226, 2, 2, 0, 18, 0, - 7, 0,227, 2, 27, 0,228, 2,119, 0, 3, 0,110, 0,199, 2, 7, 0,229, 2, 4, 0, 92, 0,120, 0, 10, 0,110, 0,199, 2, - 7, 0,230, 2, 4, 0,231, 2, 4, 0, 27, 0, 2, 0, 92, 0, 2, 0,232, 2, 2, 0,233, 2, 2, 0,234, 2, 7, 0,235, 2, - 0, 0,236, 2,121, 0, 3, 0,110, 0,199, 2, 7, 0, 27, 0, 4, 0, 16, 0,122, 0, 6, 0,110, 0,199, 2,123, 0,237, 2, -124, 0,238, 2,125, 0,239, 2, 7, 0,240, 2, 4, 0, 16, 0,126, 0, 11, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, - 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 7, 0,209, 2, 4, 0,241, 2, 0, 0,236, 2, 7, 0,242, 2, 4, 0, 27, 0, -127, 0, 12, 0,110, 0,199, 2, 27, 0,243, 2, 42, 0,244, 2, 4, 0, 92, 0, 4, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, - 7, 0,248, 2, 7, 0,249, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0, 27, 0,128, 0, 3, 0,110, 0,199, 2, 7, 0,250, 2, - 4, 0,251, 2,129, 0, 5, 0,110, 0,199, 2, 7, 0,252, 2, 0, 0,236, 2, 2, 0, 18, 0, 2, 0,253, 2,130, 0, 8, 0, -110, 0,199, 2, 27, 0,168, 0, 7, 0,252, 2, 7, 0,255, 0, 7, 0,108, 0, 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 16, 0, -131, 0, 21, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 27, 0,254, 2, - 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2, 7, 0, 2, 3, - 7, 0, 3, 3, 7, 0, 4, 3, 7, 0, 5, 3, 7, 0, 6, 3, 7, 0, 7, 3, 7, 0, 67, 0,132, 0, 7, 0,110, 0,199, 2, - 2, 0, 8, 3, 2, 0, 9, 3, 4, 0, 30, 0, 27, 0,168, 0, 7, 0, 10, 3, 0, 0,236, 2,133, 0, 10, 0,110, 0,199, 2, - 27, 0,168, 0, 0, 0, 11, 3, 7, 0, 12, 3, 7, 0, 13, 3, 7, 0, 5, 3, 4, 0, 14, 3, 4, 0, 15, 3, 7, 0, 16, 3, - 0, 0, 19, 0,134, 0, 1, 0,110, 0,199, 2,135, 0, 7, 0,110, 0,199, 2, 41, 0,125, 0,136, 0, 17, 3,137, 0, 18, 3, -138, 0, 19, 3,139, 0, 20, 3, 14, 0, 21, 3,140, 0, 13, 0,110, 0,199, 2, 89, 0, 22, 3, 89, 0, 23, 3, 89, 0, 24, 3, - 89, 0, 25, 3, 89, 0, 26, 3, 89, 0, 27, 3, 86, 0, 28, 3, 4, 0, 29, 3, 4, 0, 30, 3, 7, 0, 31, 3, 7, 0, 32, 3, -141, 0, 33, 3,142, 0, 7, 0,110, 0,199, 2, 89, 0, 22, 3, 89, 0, 34, 3,143, 0, 35, 3,144, 0, 33, 3, 4, 0, 36, 3, - 4, 0, 29, 3,145, 0, 4, 0,110, 0,199, 2, 27, 0,168, 0, 4, 0, 37, 3, 4, 0, 27, 0,146, 0, 2, 0, 4, 0, 38, 3, - 7, 0, 40, 2,147, 0, 2, 0, 4, 0,128, 0, 4, 0, 39, 3,148, 0, 24, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0,236, 2, - 2, 0, 40, 3, 2, 0, 18, 0, 2, 0, 87, 1, 2, 0, 27, 0,146, 0, 41, 3, 4, 0, 42, 3, 7, 0, 43, 3, 4, 0, 53, 0, - 4, 0, 44, 3,147, 0, 45, 3,146, 0, 46, 3, 4, 0, 47, 3, 4, 0, 48, 3, 4, 0, 49, 3, 4, 0, 39, 3, 7, 0, 50, 3, - 7, 0, 51, 3, 7, 0, 52, 3, 7, 0, 53, 3, 7, 0, 54, 3, 11, 0, 55, 3,149, 0, 8, 0,110, 0,199, 2,150, 0, 56, 3, -143, 0, 35, 3, 4, 0, 57, 3, 4, 0, 58, 3, 4, 0, 59, 3, 2, 0, 18, 0, 2, 0, 56, 0,151, 0, 8, 0,110, 0,199, 2, - 27, 0, 44, 0, 2, 0, 3, 1, 2, 0, 18, 0, 2, 0,226, 2, 2, 0, 56, 0, 7, 0, 60, 3, 7, 0, 61, 3,152, 0, 6, 0, -110, 0,199, 2, 4, 0, 62, 3, 2, 0, 18, 0, 2, 0, 63, 3, 7, 0, 64, 3, 0, 0,170, 0,153, 0, 8, 0,110, 0,199, 2, - 0, 0, 65, 3, 0, 0, 66, 3, 0, 0,193, 2, 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 92, 0, 0, 0,181, 2,154, 0, 3, 0, -110, 0,199, 2,155, 0, 69, 3,139, 0, 20, 3,156, 0, 10, 0,110, 0,199, 2, 27, 0, 70, 3, 27, 0, 71, 3, 0, 0, 72, 3, - 7, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, 0, 0, 76, 3, 0, 0, 77, 3, 0, 0,211, 2,157, 0, 9, 0,110, 0,199, 2, - 27, 0, 78, 3, 0, 0, 72, 3, 7, 0, 79, 3, 7, 0, 80, 3, 0, 0, 87, 1, 0, 0,226, 2, 0, 0, 81, 3, 0, 0, 27, 0, -158, 0, 1, 0,110, 0,199, 2,159, 0, 11, 0,110, 0,199, 2, 0, 0,236, 2, 7, 0,128, 0, 7, 0, 82, 3, 7, 0, 83, 3, - 7, 0, 84, 3, 7, 0, 85, 3, 7, 0, 86, 3, 4, 0, 18, 0, 2, 0, 87, 3, 2, 0, 88, 3,160, 0, 9, 0,110, 0,199, 2, - 27, 0, 89, 3, 4, 0, 90, 3, 4, 0, 91, 3, 4, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 2, 0,226, 2, 2, 0, 18, 0, -161, 0, 29, 0,110, 0,199, 2,162, 0, 95, 3,163, 0, 96, 3, 4, 0, 97, 3, 4, 0, 98, 3, 7, 0, 99, 3, 7, 0, 4, 3, - 7, 0,100, 3, 7, 0,250, 0, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,240, 2, - 4, 0,106, 3, 4, 0,107, 3, 0, 0,108, 3, 0, 0,109, 3, 0, 0,110, 3, 0, 0,111, 3, 0, 0, 18, 0, 0, 0,112, 3, - 2, 0,113, 3, 2, 0,114, 3, 4, 0,214, 2, 7, 0,108, 0, 7, 0,115, 3, 4, 0, 27, 0,164, 0, 15, 0,110, 0,199, 2, - 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 27, 0,116, 3, 27, 0,117, 3, 54, 0,100, 1, - 0, 0,236, 2, 7, 0,209, 2, 7, 0,118, 3, 0, 0, 18, 0, 0, 0,253, 0, 0, 0,211, 2,165, 0, 16, 0,110, 0,199, 2, - 0, 0,236, 2, 2, 0,119, 3, 2, 0,253, 0, 7, 0,120, 3, 54, 0,121, 3, 7, 0,122, 3, 7, 0,123, 3, 7, 0,124, 3, - 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3, 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3,166, 0, 16, 0, -110, 0,199, 2, 0, 0,132, 3, 0, 0,133, 3, 7, 0,134, 3, 7, 0,135, 3, 0, 0,136, 3, 0, 0,137, 3, 0, 0,138, 3, - 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3, 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3, -167, 0, 16, 0,110, 0,199, 2, 0, 0,236, 2, 4, 0,139, 3, 4, 0,140, 3, 27, 0,141, 3, 7, 0,124, 3, 0, 0,125, 3, - 4, 0,126, 3, 47, 0,127, 3, 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 7, 0,142, 3, 7, 0,143, 3, 2, 0,253, 0, - 2, 0,144, 3,168, 0, 5, 0,110, 0,199, 2,169, 0,145, 3,170, 0,146, 3, 4, 0, 16, 0, 4, 0, 27, 0,171, 0, 8, 0, -110, 0,199, 2, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 0, 0,250, 0, 0, 0, 18, 0, 0, 0, 87, 1, 0, 0, 27, 0, -172, 0, 3, 0,173, 0,150, 3, 4, 0, 67, 2, 0, 0, 94, 0,173, 0, 29, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0, 49, 2, - 2, 0, 50, 2, 2, 0,151, 3, 2, 0, 18, 0, 2, 0,152, 3, 2, 0,153, 3, 2, 0,154, 3, 2, 0, 30, 0, 0, 0,155, 3, - 0, 0,156, 3, 0, 0,157, 3, 0, 0,247, 1, 4, 0, 27, 0, 7, 0,158, 3, 7, 0,159, 3, 7, 0,160, 3, 7, 0,161, 3, - 7, 0,162, 3, 7, 0,163, 3, 29, 0,164, 3, 31, 0, 80, 0, 33, 0, 74, 2, 91, 0,127, 2, 0, 0, 72, 0, 7, 0,165, 3, - 7, 0,166, 3,172, 0,167, 3,174, 0, 5, 0,174, 0, 0, 0,174, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,124, 0, - 68, 0, 3, 0, 7, 0,168, 3, 4, 0, 18, 0, 4, 0, 27, 0, 27, 0,128, 0, 22, 0, 32, 0, 34, 0, 75, 0,175, 0,169, 3, - 2, 0, 16, 0, 2, 0,170, 3, 4, 0,171, 3, 4, 0,172, 3, 4, 0,173, 3, 0, 0,174, 3, 27, 0, 38, 0, 27, 0,175, 3, - 27, 0,176, 3, 27, 0,177, 3, 27, 0,178, 3, 31, 0, 80, 0, 68, 0, 16, 2,176, 0,179, 3,176, 0,180, 3,177, 0,181, 3, - 11, 0, 2, 0,178, 0,182, 3,179, 0,183, 3,180, 0,184, 3, 14, 0,185, 3, 14, 0,186, 3, 14, 0, 29, 2, 14, 0,187, 3, - 14, 0,188, 3, 4, 0, 87, 1, 4, 0,189, 3, 63, 0, 31, 2, 0, 0,190, 3, 4, 0, 33, 2, 4, 0,191, 3, 7, 0, 77, 1, - 7, 0,192, 3, 7, 0,193, 3, 7, 0,176, 0, 7, 0,194, 3, 7, 0,195, 3, 7, 0, 78, 1, 7, 0,196, 3, 7, 0, 19, 2, - 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3, 7, 0, 12, 3, 7, 0,203, 3, - 7, 0,244, 0, 7, 0,204, 3, 4, 0,205, 3, 4, 0,206, 3, 2, 0, 18, 0, 2, 0,207, 3, 2, 0,208, 3, 2, 0,209, 3, - 2, 0,210, 3, 2, 0,211, 3, 2, 0,212, 3, 2, 0,213, 3, 2, 0,214, 3, 0, 0,215, 3, 0, 0,216, 3, 4, 0,217, 3, - 4, 0,218, 3, 4, 0,219, 3, 4, 0,220, 3, 7, 0,221, 3, 7, 0, 84, 0, 7, 0,222, 3, 7, 0,223, 3, 7, 0,224, 3, - 7, 0,225, 3, 7, 0,226, 3, 7, 0,220, 0, 7, 0,227, 3, 7, 0,228, 3, 7, 0,229, 3, 7, 0,230, 3, 7, 0,231, 3, - 2, 0,232, 3, 0, 0,233, 3, 0, 0,234, 3, 0, 0,235, 3, 0, 0,236, 3, 0, 0,110, 0, 0, 0,237, 3, 7, 0,238, 3, - 7, 0,239, 3, 14, 0,240, 3, 14, 0,241, 3, 14, 0,242, 3, 14, 0,243, 3, 7, 0,244, 3, 2, 0, 14, 2, 2, 0,245, 3, - 7, 0,151, 2, 4, 0,246, 3, 4, 0,247, 3,181, 0,248, 3, 2, 0,249, 3, 2, 0,251, 0, 7, 0,250, 3, 14, 0,251, 3, - 14, 0,252, 3, 14, 0,253, 3, 14, 0,254, 3,182, 0, 73, 1,183, 0,255, 3, 64, 0, 0, 4, 0, 0, 1, 4, 0, 0, 2, 4, - 2, 0, 67, 2, 7, 0,143, 2,155, 0, 3, 4,143, 0, 4, 4,143, 0, 5, 4, 10, 0, 6, 4, 10, 0, 7, 4, 4, 0, 8, 4, - 4, 0, 9, 4, 14, 0, 10, 4, 14, 0, 11, 4, 14, 0, 12, 4, 7, 0, 13, 4,184, 0, 14, 0,184, 0, 0, 0,184, 0, 1, 0, - 27, 0, 38, 0, 7, 0, 12, 3, 7, 0, 79, 1, 7, 0, 13, 3, 7, 0, 5, 3, 0, 0, 19, 0, 4, 0, 14, 3, 4, 0, 15, 3, - 4, 0, 14, 4, 2, 0, 16, 0, 2, 0, 15, 4, 7, 0, 16, 3,185, 0, 12, 0,185, 0, 0, 0,185, 0, 1, 0, 27, 0, 44, 0, - 4, 0, 16, 4, 4, 0, 14, 2, 7, 0, 79, 1, 7, 0, 17, 4, 7, 0, 18, 4, 7, 0,170, 2, 2, 0, 16, 0, 0, 0, 19, 4, - 0, 0, 20, 4,182, 0, 40, 0, 4, 0, 18, 0, 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 5, 3, 2, 0, 23, 4, 2, 0, 24, 4, - 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 27, 4, 7, 0, 28, 4, 7, 0, 29, 4, 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, - 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4, 7, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, 7, 0, 39, 4, 7, 0, 40, 4, - 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 7, 0, 45, 4, 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4, - 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, 47, 0,169, 0,186, 0, 55, 4, - 7, 0, 56, 4, 4, 0,214, 2,187, 0, 5, 0, 64, 0,250, 1, 7, 0, 57, 4, 7, 0, 58, 4, 2, 0, 18, 0, 2, 0, 59, 4, -188, 0, 5, 0,188, 0, 0, 0,188, 0, 1, 0, 4, 0, 16, 0, 4, 0, 60, 4, 11, 0, 2, 0,189, 0, 9, 0,189, 0, 0, 0, -189, 0, 1, 0, 4, 0, 61, 4, 4, 0, 62, 4, 4, 0, 63, 4, 4, 0, 18, 0, 11, 0, 64, 4, 11, 0, 65, 4, 14, 0, 66, 4, -139, 0, 23, 0,139, 0, 0, 0,139, 0, 1, 0, 4, 0, 18, 0, 4, 0, 67, 4, 4, 0, 68, 4, 4, 0, 69, 4, 4, 0, 70, 4, - 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4, 4, 0, 27, 0, 4, 0, 62, 4, 4, 0, 14, 2, 2, 0, 74, 4, 2, 0, 56, 0, - 0, 0, 19, 0, 0, 0, 75, 4, 0, 0, 76, 4, 0, 0, 77, 4, 0, 0, 78, 4, 14, 0, 79, 4,190, 0, 80, 4, 11, 0, 81, 4, -191, 0, 1, 0, 7, 0, 47, 2,181, 0, 30, 0, 4, 0, 18, 0, 7, 0, 82, 4, 7, 0, 83, 4, 7, 0, 84, 4, 4, 0, 85, 4, - 4, 0, 86, 4, 4, 0, 87, 4, 4, 0, 88, 4, 7, 0, 89, 4, 7, 0, 90, 4, 7, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, - 7, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, - 7, 0,102, 4, 7, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, 4, 0,107, 4, 4, 0,108, 4, 7, 0,109, 4, - 7, 0,227, 3,183, 0, 54, 0, 4, 0, 62, 4, 4, 0,110, 4,192, 0,111, 4,193, 0,112, 4, 0, 0, 27, 0, 0, 0,113, 4, - 2, 0,114, 4, 7, 0,115, 4, 0, 0,116, 4, 7, 0,117, 4, 7, 0,118, 4, 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, - 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4, 7, 0,125, 4, 2, 0,126, 4, 0, 0,127, 4, 2, 0,128, 4, 7, 0,129, 4, - 7, 0,130, 4, 0, 0,131, 4, 4, 0,129, 0, 4, 0,132, 4, 4, 0,133, 4, 2, 0,134, 4, 2, 0,135, 4,191, 0,136, 4, - 4, 0,137, 4, 4, 0, 82, 0, 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 2, 0,142, 4, 2, 0,143, 4, - 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4,194, 0,150, 4, 7, 0,151, 4, - 7, 0,152, 4,139, 0,153, 4, 14, 0, 21, 3,187, 0,154, 4, 7, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 4, 0,158, 4, -195, 0, 1, 0, 7, 0,159, 4,155, 0, 52, 0,154, 0,160, 4, 2, 0, 16, 0, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, - 7, 0,164, 4, 2, 0,165, 4, 2, 0,166, 4, 7, 0,167, 4, 2, 0,168, 4, 2, 0,169, 4, 7, 0,170, 4, 7, 0,171, 4, - 7, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, 4, 0,175, 4, 4, 0, 27, 0, 7, 0,176, 4, 4, 0,177, 4, 7, 0,178, 4, - 7, 0,179, 4, 7, 0,180, 4, 79, 0,181, 4, 79, 0,182, 4, 0, 0,183, 4, 7, 0,184, 4, 7, 0,185, 4, 31, 0, 80, 0, - 2, 0,186, 4, 0, 0,187, 4, 0, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 7, 0,191, 4, 7, 0,192, 4, 4, 0,193, 4, - 4, 0, 18, 0, 7, 0,194, 4, 7, 0,195, 4, 7, 0,196, 4,195, 0,197, 4, 4, 0, 53, 0, 7, 0,198, 4, 7, 0,199, 4, - 7, 0,200, 4, 7, 0,201, 4, 7, 0,202, 4, 7, 0,203, 4, 7, 0,204, 4, 4, 0,205, 4, 7, 0,206, 4,196, 0, 78, 0, - 22, 0, 32, 0, 34, 0, 75, 0, 2, 0,179, 0, 2, 0, 88, 1, 2, 0,122, 1, 2, 0,207, 4, 7, 0,208, 4, 7, 0,209, 4, - 7, 0,210, 4, 7, 0,211, 4, 7, 0,212, 4, 7, 0,213, 4, 7, 0,170, 1, 7, 0,172, 1, 7, 0,171, 1, 7, 0, 30, 0, - 4, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4, 7, 0,217, 4, 7, 0,218, 4, 7, 0,219, 4, 7, 0,220, 4, 7, 0,221, 4, - 2, 0,222, 4, 2, 0, 87, 1, 2, 0,223, 4, 2, 0,224, 4, 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, - 7, 0,229, 4, 7, 0,230, 4, 7, 0,231, 4, 7, 0,232, 4, 7, 0,233, 4, 7, 0,234, 4, 7, 0,235, 4, 7, 0,236, 4, - 7, 0,237, 4, 7, 0,238, 4, 7, 0,239, 4, 7, 0,240, 4, 2, 0,241, 4, 2, 0,242, 4, 2, 0,243, 4, 2, 0,244, 4, - 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, 7, 0,248, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, - 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, 7, 0, 0, 5, 7, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 2, 0, 4, 5, - 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 18, 0, 7, 0, 9, 5, 7, 0, 10, 5, 31, 0, 80, 0, - 46, 0,140, 1, 2, 0,141, 1, 2, 0, 76, 1, 2, 0,181, 2, 25, 0,154, 0, 57, 0, 70, 1,197, 0, 8, 0,197, 0, 0, 0, -197, 0, 1, 0, 4, 0,205, 3, 4, 0, 11, 5, 4, 0, 18, 0, 2, 0, 12, 5, 2, 0, 13, 5, 27, 0,168, 0,198, 0, 13, 0, - 11, 0, 14, 5, 11, 0, 15, 5, 4, 0, 16, 5, 4, 0, 17, 5, 4, 0, 18, 5, 4, 0, 19, 5, 4, 0, 20, 5, 4, 0, 21, 5, - 4, 0, 22, 5, 4, 0, 23, 5, 4, 0, 24, 5, 4, 0, 27, 0, 0, 0, 25, 5,199, 0, 5, 0, 11, 0, 26, 5, 11, 0, 27, 5, - 4, 0, 28, 5, 4, 0, 30, 0, 0, 0, 29, 5,200, 0, 17, 0, 4, 0, 30, 5, 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, - 4, 0, 34, 5, 4, 0, 35, 5, 4, 0, 36, 5, 4, 0, 37, 5, 4, 0, 38, 5, 4, 0, 39, 5, 4, 0, 40, 5, 4, 0, 41, 5, - 2, 0, 42, 5, 2, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 4, 0, 67, 0,201, 0, 17, 0, 4, 0, 16, 0, 4, 0, 32, 5, - 4, 0, 46, 5, 4, 0, 47, 5, 4, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 7, 0, 52, 5, 4, 0, 53, 5, - 4, 0, 92, 0, 4, 0, 54, 5, 4, 0, 55, 5, 4, 0, 56, 5, 4, 0, 57, 5, 4, 0, 58, 5, 21, 0, 31, 0,202, 0, 9, 0, - 4, 0, 59, 5, 7, 0, 60, 5, 7, 0, 61, 5, 7, 0, 62, 5, 4, 0, 63, 5, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 84, 4, - 7, 0, 30, 0,203, 0, 11, 0,203, 0, 0, 0,203, 0, 1, 0, 0, 0, 19, 0, 63, 0, 64, 5, 64, 0, 65, 5, 4, 0,205, 3, - 4, 0, 66, 5, 4, 0, 67, 5, 4, 0, 27, 0, 4, 0, 68, 5, 4, 0, 69, 5,204, 0, 13, 0, 0, 0, 70, 5, 0, 0,250, 0, - 0, 0, 71, 5, 0, 0, 18, 0, 0, 0, 72, 5, 0, 0, 73, 5, 0, 0, 74, 5, 0, 0, 75, 5, 2, 0, 76, 5, 2, 0, 77, 5, - 7, 0, 78, 5, 0, 0, 79, 5, 0, 0,124, 0,205, 0,106, 0,204, 0, 80, 5,198, 0, 81, 5,199, 0, 82, 5,200, 0, 83, 5, -201, 0, 84, 5, 4, 0, 36, 3, 4, 0,129, 0, 4, 0,132, 4, 7, 0, 85, 5, 4, 0, 86, 5, 4, 0, 87, 5, 4, 0, 88, 5, - 4, 0, 89, 5, 2, 0, 18, 0, 2, 0, 90, 5, 7, 0, 91, 5, 7, 0, 92, 5, 7, 0, 93, 5, 7, 0, 94, 5, 7, 0, 95, 5, - 2, 0, 96, 5, 2, 0, 97, 5, 2, 0, 98, 5, 2, 0, 99, 5, 2, 0,250, 0, 2, 0,100, 5, 4, 0,101, 5, 2, 0,102, 5, - 2, 0,103, 5, 2, 0,109, 1, 2, 0,108, 0, 2, 0,104, 5, 2, 0,105, 5, 2, 0,106, 5, 2, 0,107, 5, 2, 0,108, 5, - 2, 0, 71, 5, 2, 0, 70, 5, 2, 0,109, 5, 2, 0, 72, 5, 2, 0,110, 5, 4, 0,111, 5, 4, 0, 87, 1, 4, 0,112, 5, - 2, 0,113, 5, 2, 0, 67, 0, 2, 0,114, 5, 2, 0,115, 5, 2, 0,116, 5, 2, 0,117, 5, 2, 0,118, 5, 2, 0,119, 5, - 19, 0,120, 5, 19, 0,121, 5, 18, 0,122, 5, 14, 0,123, 5, 2, 0,124, 5, 2, 0,125, 5, 7, 0,126, 5, 7, 0,127, 5, - 7, 0,128, 5, 7, 0,129, 5, 4, 0,130, 5, 7, 0,131, 5, 7, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, 2, 0,135, 5, - 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 2, 0,139, 5, 2, 0,140, 5, 7, 0,141, 5, 7, 0,142, 5, 7, 0,143, 5, - 0, 0,144, 5, 4, 0,145, 5, 2, 0,146, 5, 2, 0,247, 1, 0, 0,147, 5, 7, 0,148, 5, 7, 0,149, 5, 0, 0,150, 5, - 0, 0,151, 5, 0, 0,152, 5, 0, 0,153, 5, 4, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 7, 0,157, 5, 7, 0,158, 5, - 2, 0,159, 5, 2, 0,160, 5, 7, 0,161, 5, 2, 0,162, 5, 2, 0,163, 5, 4, 0,164, 5, 2, 0,165, 5, 2, 0,166, 5, - 2, 0,167, 5, 2, 0,168, 5, 7, 0,169, 5, 7, 0, 30, 0, 37, 0,170, 5, 0, 0,171, 5,206, 0, 9, 0,206, 0, 0, 0, -206, 0, 1, 0, 0, 0,172, 5, 2, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5, 2, 0, 67, 0, 7, 0,176, 5, 7, 0, 30, 0, -207, 0, 7, 0, 2, 0,231, 2, 2, 0, 87, 1, 2, 0, 94, 3, 2, 0,177, 5, 7, 0,178, 5, 7, 0, 30, 0, 37, 0,179, 5, -208, 0, 5, 0, 7, 0,180, 5, 0, 0, 16, 0, 0, 0, 67, 0, 0, 0, 30, 0, 0, 0,247, 1,209, 0, 15, 0, 7, 0,181, 5, - 7, 0,182, 5, 7, 0,183, 5, 7, 0,184, 5, 7, 0,185, 5, 7, 0,186, 5, 7, 0,187, 5, 7, 0,188, 5, 7, 0,189, 5, - 7, 0,190, 5, 4, 0,191, 5, 7, 0,192, 5, 7, 0,193, 5, 2, 0, 67, 0, 2, 0, 30, 0,210, 0, 32, 0,208, 0,194, 5, - 2, 0,195, 5, 2, 0, 97, 5, 2, 0, 98, 5, 2, 0, 99, 5, 2, 0,250, 0, 2, 0,100, 5, 2, 0,196, 5, 2, 0,197, 5, - 2, 0,198, 5, 2, 0,199, 5,207, 0,200, 5, 2, 0,201, 5, 2, 0,102, 5, 7, 0,202, 5,209, 0,203, 5, 7, 0,220, 4, - 7, 0,221, 4, 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,204, 5, 2, 0,223, 4, 2, 0,224, 4, 2, 0,205, 5, 2, 0, 27, 0, - 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 2, 0,206, 5, 2, 0, 67, 0, 7, 0,207, 5,211, 0, 6, 0, -211, 0, 0, 0,211, 0, 1, 0, 4, 0, 61, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,208, 5,212, 0, 4, 0,213, 0,146, 3, - 11, 0,209, 5, 0, 0,210, 5, 4, 0, 92, 0,214, 0, 8, 0,212, 0,211, 5, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0,212, 5, - 2, 0,213, 5, 2, 0,214, 5, 4, 0, 67, 0, 11, 0,215, 5,215, 0, 6, 0, 2, 0,108, 0, 2, 0, 67, 4, 2, 0,216, 5, - 2, 0,225, 2, 4, 0, 18, 0, 7, 0,209, 2,216, 0, 14, 0, 2, 0, 18, 0, 2, 0,217, 5, 2, 0,218, 5, 2, 0,219, 5, -215, 0,220, 5, 11, 0,215, 5, 7, 0,221, 5, 7, 0, 56, 0, 4, 0,222, 5, 4, 0,223, 5, 4, 0,224, 5, 4, 0,225, 5, - 41, 0,125, 0, 27, 0,168, 0,217, 0, 14, 0,212, 0,211, 5, 4, 0, 92, 0, 4, 0,226, 5, 7, 0,227, 5, 7, 0,228, 5, - 7, 0,229, 5, 4, 0,230, 5, 4, 0,231, 5, 7, 0,232, 5, 7, 0,233, 5, 4, 0,234, 5, 7, 0,235, 5, 7, 0,236, 5, - 4, 0, 27, 0,218, 0, 1, 0,212, 0,211, 5,219, 0, 7, 0,212, 0,211, 5, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0, 37, 0, - 4, 0,237, 5, 91, 0,238, 5, 11, 0,215, 5,220, 0, 5, 0,220, 0, 0, 0,220, 0, 1, 0, 0, 0, 19, 0, 7, 0,239, 5, - 4, 0, 27, 0,221, 0, 4, 0, 4, 0,108, 0, 7, 0,240, 5, 7, 0,178, 1, 4, 0, 18, 0,222, 0, 85, 0,219, 0,241, 5, -219, 0,242, 5,217, 0,169, 3,218, 0,243, 5, 7, 0,244, 5, 2, 0,245, 5, 2, 0,247, 1, 7, 0,246, 5, 7, 0,247, 5, - 2, 0, 67, 4, 2, 0,248, 5, 7, 0,249, 5, 7, 0,250, 5, 7, 0,251, 5, 2, 0,252, 5, 2, 0,222, 5, 2, 0,253, 5, - 2, 0,254, 5, 2, 0,255, 5, 2, 0, 0, 6, 7, 0, 1, 6, 7, 0, 2, 6, 7, 0, 3, 6, 2, 0, 4, 6, 2, 0, 5, 6, - 2, 0, 6, 6, 2, 0, 7, 6, 2, 0, 8, 6, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6,214, 0, 12, 6,216, 0, 13, 6, - 7, 0, 14, 6, 7, 0, 15, 6, 7, 0, 16, 6, 2, 0, 17, 6, 2, 0, 18, 6, 0, 0, 19, 6, 0, 0, 20, 6, 2, 0, 21, 6, - 7, 0, 22, 6, 7, 0, 23, 6, 7, 0, 24, 6, 7, 0, 25, 6, 7, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, - 7, 0, 30, 6, 7, 0, 31, 6, 2, 0, 32, 6, 0, 0, 33, 6, 0, 0, 34, 6, 0, 0, 35, 6, 0, 0, 36, 6, 27, 0, 37, 6, - 0, 0, 38, 6, 0, 0, 39, 6, 0, 0, 40, 6, 0, 0, 41, 6, 0, 0, 42, 6, 0, 0, 43, 6, 0, 0, 44, 6, 0, 0, 45, 6, - 0, 0, 46, 6, 0, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, 0, 0, 52, 6, 0, 0, 53, 6, - 0, 0, 54, 6, 0, 0, 55, 6, 4, 0, 56, 6, 4, 0, 57, 6, 4, 0, 58, 6, 4, 0, 59, 6, 2, 0, 60, 6, 2, 0, 67, 0, - 4, 0, 61, 6, 7, 0, 62, 6, 7, 0, 63, 6,221, 0, 64, 6,223, 0, 8, 0, 4, 0, 65, 6, 4, 0, 66, 6, 4, 0, 67, 6, - 4, 0, 68, 6, 4, 0, 69, 6, 4, 0, 70, 6, 4, 0, 53, 0, 4, 0,138, 2,224, 0, 4, 0, 7, 0, 71, 6, 0, 0, 72, 6, - 0, 0, 73, 6, 2, 0, 18, 0,225, 0, 4, 0, 7, 0, 74, 6, 4, 0, 18, 0, 4, 0, 75, 6, 4, 0, 56, 0, 41, 0, 46, 0, - 22, 0, 32, 0, 34, 0, 75, 0, 27, 0,208, 5,196, 0, 76, 6, 41, 0, 77, 6, 14, 0, 78, 6,197, 0, 79, 6, 27, 0, 80, 6, - 7, 0, 81, 6, 7, 0, 82, 6, 7, 0, 83, 6, 7, 0, 84, 6, 4, 0,205, 3, 4, 0, 85, 6, 4, 0, 86, 6, 2, 0, 18, 0, - 2, 0, 76, 1, 57, 0, 70, 1,226, 0, 87, 6,222, 0, 88, 6,227, 0, 89, 6,205, 0,185, 0,202, 0, 90, 6, 14, 0,102, 0, - 14, 0, 91, 6, 11, 0, 92, 6, 11, 0, 93, 6, 11, 0, 94, 6, 11, 0, 95, 6, 11, 0, 96, 6,228, 0, 97, 6, 2, 0, 98, 6, - 2, 0, 99, 6, 2, 0,251, 0, 2, 0,206, 3, 4, 0,216, 3, 4, 0,100, 6, 14, 0,101, 6,208, 0,194, 5,210, 0,102, 6, -224, 0,103, 6,178, 0,182, 3,225, 0,104, 6,229, 0,105, 6, 10, 0, 7, 4, 10, 0,106, 6,230, 0, 14, 0,230, 0, 0, 0, -230, 0, 1, 0, 42, 0,242, 0, 40, 0, 69, 1,229, 0,105, 6,231, 0,107, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,108, 0, - 7, 0,108, 6, 2, 0,109, 6, 2, 0, 18, 0, 2, 0,143, 0, 2, 0, 27, 0,232, 0, 39, 0, 7, 0,110, 6, 7, 0,111, 6, - 7, 0,112, 6, 7, 0,113, 6, 7, 0,114, 6, 7, 0,115, 6, 7, 0,116, 6, 7, 0,117, 6, 7, 0,118, 6, 68, 0,119, 6, -178, 0,182, 3,232, 0,120, 6,233, 0,121, 6,234, 0,122, 6,235, 0,123, 6,236, 0,124, 6,237, 0,125, 6, 7, 0,126, 6, - 7, 0,127, 6, 7, 0, 94, 1, 7, 0,128, 6, 7, 0,129, 6, 7, 0,130, 6, 7, 0,131, 6, 7, 0,175, 0, 7, 0,132, 6, - 0, 0,133, 6, 0, 0,134, 6, 0, 0,109, 6, 0, 0,135, 6, 2, 0,136, 6, 2, 0,137, 6, 7, 0,138, 6, 2, 0,139, 6, - 2, 0,140, 6, 7, 0,141, 6, 7, 0,142, 6, 7, 0,143, 6, 7, 0,144, 6,238, 0, 51, 0,239, 0, 0, 0,239, 0, 1, 0, - 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6, 7, 0,127, 6, 7, 0, 94, 1, 7, 0,149, 6, 2, 0,150, 6, - 0, 0,211, 2, 4, 0,151, 6, 2, 0,134, 6, 2, 0,109, 6, 27, 0,208, 5, 27, 0,152, 6, 14, 0,153, 6,230, 0,154, 6, -238, 0,120, 6, 0, 0,155, 6, 4, 0,205, 3, 4, 0, 85, 6, 2, 0,156, 6, 2, 0,157, 6, 2, 0,158, 6, 2, 0,159, 6, - 2, 0, 18, 0, 2, 0, 32, 2, 7, 0,114, 0, 7, 0,160, 6, 7, 0,161, 6, 7, 0,162, 6, 7, 0,175, 0, 7, 0, 81, 6, - 2, 0,163, 6, 2, 0,164, 6, 2, 0,165, 6, 0, 0,166, 6, 0, 0,167, 6, 0, 0,168, 6, 0, 0,169, 6, 0, 0,170, 6, - 14, 0,171, 6, 14, 0,172, 6, 14, 0,173, 6, 2, 0,174, 6, 2, 0,152, 2, 2, 0,175, 6, 0, 0,176, 6, 11, 0,177, 6, -178, 0,182, 3,240, 0, 24, 0, 19, 0, 37, 0, 19, 0, 63, 0, 18, 0,178, 6, 18, 0,179, 6, 18, 0,180, 6, 7, 0,181, 6, - 7, 0,182, 6, 7, 0,183, 6, 7, 0,184, 6, 2, 0,185, 6, 2, 0,186, 6, 2, 0,187, 6, 2, 0,188, 6, 2, 0,189, 6, - 2, 0, 18, 0, 2, 0,190, 6, 2, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,159, 6, 7, 0,195, 6, - 4, 0,196, 6, 4, 0,197, 6,239, 0, 6, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, - 2, 0,148, 6,241, 0, 8, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6, - 0, 0,198, 6, 0, 0,124, 0,242, 0, 14, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, - 2, 0,148, 6,240, 0,199, 6,243, 0,200, 6, 14, 0,201, 6, 2, 0, 87, 1, 2, 0,202, 6, 4, 0, 18, 0, 7, 0,203, 6, - 4, 0,159, 6,244, 0, 21, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6, -240, 0,199, 6, 2, 0,204, 6, 2, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,190, 6, 2, 0,208, 6, 2, 0,209, 6, - 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 73, 2, 4, 0,210, 6, 4, 0,211, 6, 22, 0,212, 6, 11, 0,213, 6,245, 0, 18, 0, -239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6,240, 0,199, 6, 7, 0, 97, 2, - 7, 0, 98, 2, 2, 0,204, 6, 2, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6, 4, 0, 18, 0, 7, 0,217, 6, 4, 0,109, 6, - 4, 0, 27, 0,178, 0,182, 3,246, 0, 16, 0, 0, 0,218, 6, 0, 0,219, 6, 0, 0,220, 6, 0, 0,221, 6, 0, 0,222, 6, - 0, 0,223, 6, 4, 0,224, 6, 4, 0,225, 6, 4, 0,226, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,227, 6, 2, 0,228, 6, - 2, 0,190, 1, 2, 0,229, 6, 0, 0,230, 6,247, 0, 16, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, - 4, 0,231, 6,246, 0,232, 6,248, 0,233, 6, 14, 0,234, 6, 14, 0,235, 6,249, 0,236, 6,237, 0,237, 6,250, 0,238, 6, - 2, 0,239, 6, 2, 0,240, 6, 2, 0,241, 6, 2, 0, 30, 0,251, 0, 15, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, - 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6,240, 0,199, 6, 14, 0,242, 6,252, 0,243, 6, 0, 0,244, 6,253, 0,245, 6, - 2, 0, 18, 0, 2, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6,254, 0, 25, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, - 4, 0,146, 6, 4, 0, 18, 0, 42, 0,244, 2, 40, 0, 69, 1, 54, 0,249, 6,255, 0,250, 6, 0, 1,251, 6,178, 0,182, 3, - 7, 0,252, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,217, 6, 7, 0,253, 6, 7, 0,254, 6, 2, 0,255, 6, 2, 0, 27, 0, - 2, 0, 0, 7, 2, 0, 1, 7, 0, 0, 2, 7, 0, 0, 3, 7, 0, 0, 4, 7, 0, 0,159, 6, 1, 1, 11, 0,239, 0, 0, 0, -239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6, 2, 0,202, 6, 2, 0, 18, 0, 4, 0, 27, 0, -243, 0,200, 6,240, 0,199, 6, 2, 1, 31, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, - 2, 0,148, 6, 37, 0, 5, 7, 4, 0, 6, 7, 4, 0, 7, 7, 2, 0, 92, 0, 2, 0, 8, 7, 2, 0, 9, 7, 0, 0, 10, 7, - 0, 0, 11, 7, 4, 0, 12, 7, 4, 0, 13, 7, 4, 0, 14, 7, 2, 0, 15, 7, 2, 0, 16, 7, 2, 0, 17, 7, 2, 0, 18, 7, - 7, 0, 19, 7, 18, 0, 20, 7, 18, 0, 21, 7, 4, 0, 22, 7, 4, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, 2, 0, 26, 7, - 0, 0,211, 2, 11, 0, 27, 7, 3, 1, 10, 0, 22, 0, 32, 0, 11, 0, 28, 7, 11, 0, 29, 7, 11, 0, 30, 7, 11, 0, 31, 7, - 11, 0, 32, 7, 4, 0, 92, 0, 4, 0, 33, 7, 0, 0, 34, 7, 0, 0, 35, 7, 4, 1, 10, 0,239, 0, 0, 0,239, 0, 1, 0, - 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 3, 1, 36, 7, 2, 0, 92, 0, 2, 0, 8, 7, 4, 0, 67, 0, 11, 0, 37, 7, - 5, 1, 3, 0, 5, 1, 0, 0, 5, 1, 1, 0, 7, 0, 38, 7, 6, 1, 9, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, - 4, 0,146, 6, 7, 0,147, 6,240, 0,199, 6, 14, 0, 39, 7, 4, 0, 40, 7, 4, 0, 18, 0, 7, 1, 27, 0,239, 0, 0, 0, -239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6,240, 0,199, 6, 22, 0, 41, 7, 22, 0, 81, 0, - 2, 0, 18, 0, 2, 0, 67, 0, 7, 0, 42, 7, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,217, 6, 7, 0, 43, 7, 7, 0, 44, 7, - 7, 0, 45, 7, 57, 0, 70, 1, 57, 0, 46, 7, 4, 0, 47, 7, 2, 0, 48, 7, 2, 0, 49, 7, 2, 0,251, 0, 2, 0, 86, 1, - 14, 0, 50, 7,178, 0,182, 3, 8, 1, 10, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, - 2, 0,148, 6, 2, 0, 18, 0, 2, 0,214, 3, 4, 0, 27, 0,178, 0,182, 3, 9, 1, 7, 0, 9, 1, 0, 0, 9, 1, 1, 0, - 4, 0, 51, 7, 4, 0, 22, 0, 0, 0, 86, 0, 4, 0, 52, 7, 4, 0, 16, 0, 10, 1, 14, 0,239, 0, 0, 0,239, 0, 1, 0, - 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6, 4, 0, 9, 7, 4, 0, 27, 0, 14, 0, 53, 7, 14, 0, 54, 7, - 0, 0, 55, 7, 0, 0, 56, 7, 4, 0, 57, 7, 4, 0, 58, 7, 11, 1, 6, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, - 4, 0,146, 6, 4, 0, 27, 0, 0, 0, 59, 7, 12, 1, 24, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, - 7, 0, 97, 2, 7, 0, 98, 2, 7, 0, 60, 7, 7, 0, 61, 7, 7, 0,217, 6,231, 0, 62, 7,229, 0,105, 6, 13, 1,250, 6, - 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,109, 6, 4, 0, 63, 7, 7, 0, 64, 7, 7, 0,148, 3, 7, 0, 94, 3, 4, 0, 27, 0, - 7, 0, 65, 7, 7, 0, 66, 7, 4, 0, 67, 7, 4, 0, 68, 7, 14, 1, 7, 0, 14, 1, 0, 0, 14, 1, 1, 0, 0, 0, 69, 7, - 2, 0, 70, 7, 2, 0, 71, 7, 2, 0, 72, 7, 2, 0, 27, 0, 15, 1, 12, 0, 2, 0, 71, 7, 2, 0, 73, 7, 2, 0, 74, 7, - 0, 0,211, 2, 2, 0, 75, 7, 2, 0, 76, 7, 2, 0, 77, 7, 2, 0, 78, 7, 2, 0, 79, 7, 2, 0,190, 6, 7, 0, 80, 7, - 7, 0, 81, 7, 16, 1, 18, 0, 16, 1, 0, 0, 16, 1, 1, 0, 0, 0, 19, 0, 15, 1, 82, 7, 15, 1, 83, 7, 15, 1, 84, 7, - 15, 1, 85, 7, 7, 0, 86, 7, 2, 0, 87, 7, 2, 0, 88, 7, 2, 0, 89, 7, 2, 0, 90, 7, 2, 0, 91, 7, 2, 0, 92, 7, - 2, 0, 93, 7, 2, 0, 94, 7, 2, 0, 95, 7, 2, 0, 27, 0, 17, 1, 10, 0, 0, 0, 96, 7, 0, 0, 97, 7, 0, 0, 98, 7, - 0, 0, 99, 7, 0, 0,100, 7, 0, 0,101, 7, 2, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 18, 1, 8, 0, - 0, 0,106, 7, 0, 0,107, 7, 0, 0,108, 7, 0, 0,109, 7, 0, 0,110, 7, 0, 0,111, 7, 7, 0,108, 6, 7, 0, 27, 0, - 19, 1, 3, 0, 0, 0,112, 7, 2, 0,113, 7, 2, 0, 27, 0, 20, 1, 22, 0, 17, 1,114, 7, 17, 1,115, 7, 17, 1,116, 7, +104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121, 95,101,120, 99,108,117,100, +101, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0,115, 97,109,112, +108,101,115, 0,105,109,116,121,112,101, 0,112,108, 97,110,101,115, 0,113,117, 97,108,105,116,121, 0, 99,111,109,112,114,101, +115,115, 0,101,120,114, 95, 99,111,100,101, 99, 0, 99,105,110,101,111,110, 95,102,108, 97,103, 0, 99,105,110,101,111,110, 95, +119,104,105,116,101, 0, 99,105,110,101,111,110, 95, 98,108, 97, 99,107, 0, 99,105,110,101,111,110, 95,103, 97,109,109, 97, 0, +106,112, 50, 95,102,108, 97,103, 0,105,109, 95,102,111,114,109, 97,116, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, + 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116,105,110,103,115, 0,102,102, + 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105, +109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, + 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99, +114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, + 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110, +115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114, +116,115, 0,121,112, 97,114,116,115, 0,115,117, 98,105,109,116,121,112,101, 0,100,105,115,112,108, 97,121,109,111,100,101, 0, +115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, 97, 99, +101, 95,115,116,114,117, 99,116,117,114,101, 0,111, 99,114,101,115, 0,112, 97,100, 52, 0, 97,108,112,104, 97,109,111,100,101, + 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100, +101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95, +115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, + 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111, +115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, + 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97, +107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113, +117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115, +100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0,112,105, 99, 91, 49, 48, 50, 52, 93, 0,115,116, 97,109,112, 0,115,116, + 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 55, 54, 56, 93, 0,102,103, 95, +115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,118, 95,116,121, +112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53, + 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, + 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, + 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110, +119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, + 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, + 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109, +101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,110, 97,109, +101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0, +115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0, +114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, 91, 51, 93, 0, 99,101,108,108,115,105,122,101, + 0, 99,101,108,108,104,101,105,103,104,116, 0, 97,103,101,110,116,109, 97,120,115,108,111,112,101, 0, 97,103,101,110,116,109, + 97,120, 99,108,105,109, 98, 0, 97,103,101,110,116,104,101,105,103,104,116, 0, 97,103,101,110,116,114, 97,100,105,117,115, 0, +101,100,103,101,109, 97,120,108,101,110, 0,101,100,103,101,109, 97,120,101,114,114,111,114, 0,114,101,103,105,111,110,109,105, +110,115,105,122,101, 0,114,101,103,105,111,110,109,101,114,103,101,115,105,122,101, 0,118,101,114,116,115,112,101,114,112,111, +108,121, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,100,105,115,116, 0,100,101,116, 97,105,108,115, 97,109,112,108,101, +109, 97,120,101,114,114,111,114, 0,102,114, 97,109,105,110,103, 0,112,108, 97,121,101,114,102,108, 97,103, 0,114,116, 49, 0, +114,116, 50, 0, 97, 97,115, 97,109,112,108,101,115, 0,112, 97,100, 52, 91, 51, 93, 0,100,111,109,101, 0,115,116,101,114,101, +111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,116,105,111,110, 0,114,101, 99, 97,115,116, 68, 97,116, 97, 0,109, + 97,116,109,111,100,101, 0,101,120,105,116,107,101,121, 0,111, 98,115,116, 97, 99,108,101, 83,105,109,117,108, 97,116,105,111, +110, 0,108,101,118,101,108, 72,101,105,103,104,116, 0, 42, 99, 97,109,101,114, 97, 0, 42,112, 97,105,110,116, 95, 99,117,114, +115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,115,101, + 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97, + 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111, +116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, + 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116, +121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,114, 97,100,105, 97,108, + 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120, 0,108, 97,115,116, 95,121, 0,108, 97,115,116, 95, 97,110,103,108, +101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100, 0, 97,110, 99,104,111,114,101,100, 95,115,105,122,101, 0, 97,110, + 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110, 91, 51, 93, 0, 97,110, 99,104,111,114,101,100, 95,105,110,105,116, +105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114, 97,119, 95,112,114,101,115,115,117,114,101, 0,112,114,101,115,115, +117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105, 97,108, 95,114,111,116, 97,116,105,111,110, 0, 42,118,112, 97,105, +110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,117, +110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110, +116, 0, 42,117,118,115, 99,117,108,112,116, 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114, +116,121,112,101, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, + 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109, +101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119, +114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101, +115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, + 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95, +102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118, 95,115,117, 98,115,117,114,102, 95,108,101, +118,101,108, 0,103,112,101,110, 99,105,108, 95,102,108, 97,103,115, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101, +110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, + 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, + 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,109,117,108,116,105, +114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,112, 97,100, 50, 91, 53, 93, 0,115,107,103,101,110, 95,114,101, +115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97, +108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, + 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, + 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97, +116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0, +115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101, +110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114, +101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112, +116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114, +111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115, +107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, + 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99, +111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0, +115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, + 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0, +115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,101,100, +103,101, 95,109,111,100,101, 95,108,105,118,101, 95,117,110,119,114, 97,112, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, + 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108, + 0,112,114,111,112, 95,109,111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,111, 98,106,101, 99,116,115, 0, +112, 97,100, 91, 53, 93, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,109,117,108,116,105,112, 97,105,110,116, + 0,117,115,101, 95,117,118, 95,115, 99,117,108,112,116, 0,117,118, 95,115, 99,117,108,112,116, 95,115,101,116,116,105,110,103, +115, 0,117,118, 95,115, 99,117,108,112,116, 95,116,111,111,108, 0,117,118, 95,114,101,108, 97,120, 95,109,101,116,104,111,100, + 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,115, 99,117,108,112,116, 95,112, 97, +105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,101, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110, +105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0,115, 99,117,108,112,116, 95, +112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,108,112,104, 97, 0,117,110,105,102,105,101,100, 95,112, 97,105,110, +116, 95,115,101,116,116,105,110,103,115, 0,116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106, +115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, + 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, 0,115,121,115,116,101,109, 95,114,111,116, 97, +116,105,111,110, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,112, + 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105, +116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116, +119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,108, 97,121, 95,117,112,100, 97,116,101,100, 0, 42,101,100, 0, 42, +116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102, +111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42,115,111,117,110,100, 95,115, + 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,115,111,117,110,100, 95,115, 99,114,117, 98, 95,104, 97,110,100,108,101, 0, + 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101,115, 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68, + 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0, 97, 99,116,105,118,101, 95,107,101, +121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, + 99,115, 95,115,101,116,116,105,110,103,115, 0, 42, 99,108,105,112, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115, +107, 95,109,111,100, 97,108, 0, 99,117,115,101,114, 0, 98,108,101,110,100, 0,118,105,101,119, 0,119,105,110,109, 97,116, 91, + 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, + 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105, +101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0, 99,108, +105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, + 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,110,100,101,114, 95,101,110,103,105,110,101, 0, 42,100, +101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0,116,119,109, 97,116, 91, 52, + 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100, +121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,105,115, 95,112,101,114,115,112, 0,112,101,114,115,112, + 0,118,105,101,119,108,111, 99,107, 0,116,119,100,114, 97,119,102,108, 97,103, 0,114,102,108, 97,103, 0,108,118,105,101,119, +113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119, + 97,110,103,108,101, 91, 51, 93, 0,114,111,116, 95, 97,110,103,108,101, 0,114,111,116, 95, 97,120,105,115, 91, 51, 93, 0,114, +101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98, +108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0, 98,117,110,100,108,101, 95,115,105,122,101, 0, 98,117,110,100,108, +101, 95,100,114, 97,119,116,121,112,101, 0,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 98, +103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 54, + 52, 93, 0,100,114, 97,119,116,121,112,101, 0,111, 98, 95, 99,101,110,116,114,101, 95, 99,117,114,115,111,114, 0,115, 99,101, +110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,103,114,105,100, 0,110,101, 97,114, 0,102, 97,114, 0,109,111,100,101, +115,101,108,101, 99,116, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,115,117, 98,100,105,118, 0,103,114,105,100, +102,108, 97,103, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,112, 97,100, 50, 91, 50, + 93, 0, 97,102,116,101,114,100,114, 97,119, 95,116,114, 97,110,115,112, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97, +121, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121,116,114, 97,110,115,112, 0,122, 98,117,102, 0,120,114, 97,121, + 0,112, 97,100, 51, 91, 50, 93, 0, 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114, +116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, + 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111, +116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105, +110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116, + 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0,114,112,116, 95,109, 97,115,107, 0,118, 50,100, 0, 42, 97,100,115, + 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0, +109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0, +112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101, 95, 99,111,110,116,101,120,116, 0,112, 97,116,104,102,108, 97,103, + 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0, 42,116,101,120,117,115,101,114, 0,114,101,110,100,101,114, + 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101, + 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,102, +105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,101,100,105,116, 91, 50, 53, 54, 93, 0,102,105,108,116,101,114, 95, +103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108, 95,102,105,114,115,116, 0,115, +101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0,102, 95,102,112, 0,102,112, 95,115,116,114, + 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, + 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112, + 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99, +101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, 0,116,114,101,101, 0, 42, +116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, + 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0,115,101, 97,114, + 99,104, 95,102,108, 97,103,115, 0, 42, 99,117,109, 97,112, 0,115, 99,111,112,101,115, 0,115, 97,109,112,108,101, 95,108,105, +110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 99,117, +114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117, +118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,109,101,110, +117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108, +101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121, +110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104,116, 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95, +101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, + 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53, + 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0,109, 97,114,103,105,110, 95, 99,111,108,117,109,110, + 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42, +112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112, +121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109, +101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, + 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115, +112,108, 97,121, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0,112, 97,100,102, 0,109,120, 0,109,121, 0, 42,101,100,105,116, +116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,115,104, 97,100,101,114,102,114,111,109, + 0,108,105,110,107,100,114, 97,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,115, 99,114,111,108, +108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97, +103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91, + 54, 52, 93, 0,120,108,111, 99,107,111,102, 0,121,108,111, 99,107,111,102, 0,117,115,101,114, 0,112, 97,116,104, 95,108,101, +110,103,116,104, 0,108,111, 99, 91, 50, 93, 0,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,117,110,105,115,116, 97, + 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,116,112,114,111, 99, 95,102,108, 97,103, 0, 42,100,114, 97,119, 95, 99, +111,110,116,101,120,116, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0, 98,108,102, 95,105,100, 0,117,105,102, +111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97, +108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100, +111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103, +114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110, +101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, + 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111, +120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, + 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,111,117,116,108,105,110,101, 91, 52, + 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, 91, 52, 93, 0, +116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,104, 97,100,101, +116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,110,110,101,114, 95, + 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95, +107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,100,114, +105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,104,101, 97,100, +101,114, 91, 52, 93, 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111,108, 95,114,101,103,117,108, 97,114, 0,119, + 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,105,111, 0,119, 99, +111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,110,117,109, 0,119, + 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,108, 95,112,117,108, +108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,101,110,117, 95,105, +116,101,109, 0,119, 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,115, + 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,115,116, 95,105,116, +101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, 99,111,110,102,105,108,101, 91, 50, 53, 54, + 93, 0,105, 99,111,110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105,116,108,101, 91, 52, 93, 0,116,101, +120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95, +116,101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, + 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, + 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115, +116, 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120, +116, 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0, +112, 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115, +104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105, +100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0,115, +112,101, 97,107,101,114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97,109,101,114, 97, 91, 52, 93, 0,112, 97,100, + 91, 56, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116, +105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101, +114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, + 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, + 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, 95, 99,114,101, 97,115,101, 91, 52, 93, 0, +102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91, + 52, 93, 0,101,120,116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, + 97,110,103,108,101, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,114,101, 97, 91, 52, 93, 0,112, 97,100, 51, + 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,110,111,114,109, 97,108, 91, 52, 93, 0, 98, +111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, + 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,110,117,114, + 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, 91, 52, 93, 0, 97, 99,116, 95,115,112,108, +105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101, +108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111,105,110,116, 91, 52, 93, 0,104, 97,110,100, +108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, + 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95, + 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,102,114,101,101, 91, + 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, + 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110, +100,108,101, 95,115,101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110, +101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,111, +117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108, +101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0, 99,111,110,115,111, +108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,111,117,116,108,105,110,101, + 95,119,105,100,116,104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110,111,111,100,108,101, 95, 99,117,114,118,105, +110,103, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, + 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, + 52, 93, 0,109,111,118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52, + 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116, +114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99, +116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95, +118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115, +105,122,101, 0,109, 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, 0,109, 97,114,107,101,114, 91, 52, 93, 0, + 97, 99,116, 95,109, 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114,107,101,114, 91, 52, 93, 0,100,105,115, 95, +109, 97,114,107,101,114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, 91, 52, 93, 0, 98,117,110,100,108,101, 95, +115,111,108,105,100, 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, 52, 93, 0,112, 97,116,104, 95, 97,102,116, +101,114, 91, 52, 93, 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0,104,112, 97,100, 91, 55, 93, 0,112,114,101, +118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,102, 97, 99,101, + 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100,103,101, 91, 52, 93, 0,112,114,101,118,105, +101,119, 95,115,116,105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, + 95,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,117,110, +115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95, 97, 99,116, +105,118,101, 91, 52, 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99,116,101,100, 95,104,105,103,104,108,105,103, +104,116, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102, +105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105, +109, 97, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, + 0,116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 99,108,105,112, 0,116, 97,114,109, 91, 50, + 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0, +115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, + 91, 55, 54, 56, 93, 0,102,111,110,116,100,105,114, 91, 55, 54, 56, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 48, 50, + 52, 93, 0,116,101,120,116,117,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 55, 54, 56, 93, + 0,112,108,117,103,115,101,113,100,105,114, 91, 55, 54, 56, 93, 0,112,121,116,104,111,110,100,105,114, 91, 55, 54, 56, 93, 0, +115,111,117,110,100,100,105,114, 91, 55, 54, 56, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 49, 48, 50, 52, 93, + 0, 97,110,105,109, 95,112,108, 97,121,101,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112, +114,101,115,101,116, 0,118, 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95, +115,116,121,108,101, 0,118,101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97, +109,101,102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, + 97,110,103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102, +115,105,122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111, +102,111,114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110, +103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116, +104,114,101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101, +115, 0,107,101,121,109, 97,112,115, 0,117,115,101,114, 95,107,101,121,109, 97,112,115, 0, 97,100,100,111,110,115, 0,107,101, +121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109, +111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97, +110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115, 0,116, 98, 95,108, +101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0, +116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, + 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97, +116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,103,116,104,114,101,115,104,111,108,100, 0,109,101, +109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101, +115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101, +114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102, +105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0, 99,117, +114,115,115,105,122,101, 0, 99,111,108,111,114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119, + 0,107,101,121,104, 97,110,100,108,101,115, 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97, +115,116,119, 97,105,116, 0,119,105,100,103,101,116, 95,117,110,105,116, 0, 97,110,105,115,111,116,114,111,112,105, 99, 95,102, +105,108,116,101,114, 0,117,115,101, 95, 49, 54, 98,105,116, 95,116,101,120,116,117,114,101,115, 0,112, 97,100, 56, 0,110,100, +111,102, 95,115,101,110,115,105,116,105,118,105,116,121, 0,110,100,111,102, 95,102,108, 97,103, 0,103,108, 97,108,112,104, 97, + 99,108,105,112, 0,116,101,120,116, 95,114,101,110,100,101,114, 0,112, 97,100, 57, 0, 99,111, 98, 97, 95,119,101,105,103,104, +116, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91, 51, 93, 0,116,119, +101, 97,107, 95,116,104,114,101,115,104,111,108,100, 0, 97,117,116,104,111,114, 91, 56, 48, 93, 0, 99,111,109,112,117,116,101, + 95,100,101,118,105, 99,101, 95,116,121,112,101, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,105,100, 0,102, + 99,117, 95,105,110, 97, 99,116,105,118,101, 95, 97,108,112,104, 97, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, + 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,114,101,100,114, 97,119,115, 95,102, +108, 97,103, 0,102,117,108,108, 0,116,101,109,112, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114, +101,102,114,101,115,104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, + 97,105,110,116, 99,117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105, +110,119,105,110, 0,115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111, +110,116,101,120,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42, +118, 50, 0, 42,116,121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, + 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0, +115,105,122,101,121, 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116, +114,111,108, 0,115,110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99, +116,105,118,101,100, 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108, +105,115,116, 95,108, 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, + 95,115,101, 97,114, 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, + 99,101,116,121,112,101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100, +108,101,114,115, 0, 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0, +115,119,105,110,105,100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100, +114, 97,119, 95,111,118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97, +100,101,114,115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, + 98,118,101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118, +101,114,115,105,111,110, 0,119,105,110,112,111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101, +110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,111,110, 0,110, 97, +109,101, 91, 50, 53, 54, 93, 0,111,114,105,103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,103,104,116, 0, 98, +111,116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97, +109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0, 98,117,105,108,100, + 95,115,105,122,101, 95,102,108, 97,103,115, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,100,111,110,101, 0, +115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0, 42, + 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42, +105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95, +112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102, +115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,115, 97,116, 0, +109,117,108, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0,115,116,114,101, 97,109, +105,110,100,101,120, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105,112, 95,102,108, 97,103, 0, + 42,115,116,114,105,112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101, +114, 0,115,112,101,101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0, +115,101,113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100, 0,112,105,116, 99, +104, 0,112, 97,110, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, + 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108, +101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115, +101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105, +109, 97,103,101,100,105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 49, 48, 50, 52, 93, + 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108, 97,103, 0,111,118, +101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101, +116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, + 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, + 73,110,105, 0,120, 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101,114,112,111,108, 97,116,105, +111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97, +108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115, +101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0, +114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, + 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, + 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97, +112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101, +120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0, +118,103,114,111,117,112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 54, 52, 93, 0, + 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112, +111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, + 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116,111,103,103,108,101, 78, 97, +109,101, 91, 54, 52, 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, 91, 54, 52, 93, 0,100,101, +108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 54, 52, 93, 0,100, 97, +109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, 97,109,101, 91, 54, 52, 93, + 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, 0, 99,111,110,115,116,114, + 97,105,110,116, 91, 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 54, 52, 93, + 0, 98,111,100,121, 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105, +110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105, +110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105, +115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115, +108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, + 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105, +116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101, +110,103,116,104, 0,108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, + 97,105,110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97, +110, 99,101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110, +103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, +103, 97,105,110, 0,115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108, +105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, + 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, + 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99, +105,116,121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114, +101,110, 99,101, 0,109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, + 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116, +112,114,111,112, 91, 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116, +105,111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114, +103, 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 54, 52, 93, 0, 42, +116,111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108, +111, 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, + 0,105,110,102,108,117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99,105,110,103, 97,120,105,115, + 0,118,101,108,111, 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117,114,110,115,112,101,101,100, + 0,117,112,100, 97,116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42,110,101,119,112, 97, 99,107, +101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99, +104,101, 0, 42,119, 97,118,101,102,111,114,109, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42,108, + 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111, +112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, + 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95, +116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 97,114,109, 95,114,111,108,108, 0,120, +119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97, +100, 0,114, 97,100, 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, + 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, + 0, 42,115,107,101,116, 99,104, 0,103,101,118,101,114,116,100,101,102,111,114,109,101,114, 0,108, 97,121,101,114, 95,117,115, +101,100, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116, +115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0, +103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116, +104, 97, 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109, +101, 0,103,104,111,115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111, +115,116, 95, 97, 99, 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115, +116, 95,102,108, 97,103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95, +118,105,101,119,102,108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, + 97,116,104, 95,101,102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0,105,107,102,108, 97,103, 0, 97,103, +114,112, 95,105,110,100,101,120, 0, 99,111,110,115,116,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0,112, 97, +100, 48, 91, 54, 93, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0,115,105,107,116,114,101, +101, 0, 42, 99,117,115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, + 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104, +101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0, +108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, + 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42,116,101,109,112, + 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0, +115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, + 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, + 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91, + 54, 52, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115, +116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, + 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, + 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0,105,100,114, +111,111,116, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,115,101, 97,114, 99,104,115,116, +114, 91, 54, 52, 93, 0,102,105,108,116,101,114,102,108, 97,103, 0,114,101,110, 97,109,101, 73,110,100,101,120, 0, 97,100,115, + 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99, +101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95, +101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, + 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0, +105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, + 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112,111,108,101, + 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, + 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0, +114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115, +116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97, +103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0, +112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105, +109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97, +116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, + 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, + 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, + 0,116,114, 97, 99,107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, 91, 54, 52, 93, 0, 42,100,101,112,116,104, 95,111, 98, 0, + 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97, +120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102, +102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110, +110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, + 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0,105,115, 95, + 99,111,112,121, 0,101,120,116,101,114,110, 97,108, 0, 42,110,101,119, 95,115,111, 99,107, 0, 42,115,116,111,114, 97,103,101, + 0,108,105,109,105,116, 0,115,116,114,117, 99,116, 95,116,121,112,101, 0,108,111, 99,120, 0,108,111, 99,121, 0, 42,100,101, +102, 97,117,108,116, 95,118, 97,108,117,101, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,115,116, 97, 99,107, 95,116,121, +112,101, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107, + 0, 42,108,105,110,107, 0,110,115, 0, 42,114,101, 99,116, 0,120,115,105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119, + 95,110,111,100,101, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, 0,117,112, +100, 97,116,101, 0,108, 97, 98,101,108, 91, 54, 52, 93, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99, +117,115,116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116, +104,114,101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, + 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111, +109,115,111, 99,107, 0, 42,116,111,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0,105,110,105,116, 0, 99, +117,114, 95,105,110,100,101,120, 0,110,111,100,101,116,121,112,101, 0, 42,101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114, +111,103,114,101,115,115, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, + 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51, + 93, 0,118, 97,108,117,101, 91, 52, 93, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,109, 97,120,115,112,101,101,100, + 0,109,105,110,115,112,101,101,100, 0, 99,117,114,118,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110, +116,121, 0, 98,111,107,101,104, 0,103, 97,109,109, 97, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, + 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0, +115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99, +101, 0,104,117,101, 0, 98, 97,115,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111,114,109, 97,116, 0, 97, 99,116, +105,118,101, 95,105,110,112,117,116, 0,117,115,101, 95,114,101,110,100,101,114, 95,102,111,114,109, 97,116, 0,117,115,101, 95, +110,111,100,101, 95,102,111,114,109, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102, + 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,101,108, 0,120, + 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, 97, 99, 95,120, 50, 0,102, 97, 99, 95,121, 49, 0, +102, 97, 99, 95,121, 50, 0, 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, 98,107,116,121,112,101, 0,112, 97,100, 95, 99, 49, + 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104, +114,101,115,104, 0,114,111,116, 97,116,105,111,110, 0,112, 97,100, 95,102, 49, 0, 42,100,105, 99,116, 0, 42,110,111,100,101, + 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0,109, 0, 99, 0,106, +105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, 93, 0,108,105, +102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, 99,104, 97,110, 0,117, +110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115,112,105,108,108,103, 0, +117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112,105,110,103, 0, 99,111,108,111,114, 95,109, 97,112,112,105,110, +103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, 51, 93, 0,116,117,114, 98,105,100,105,116,121, 0, 99,111,108, +111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116,105,111,110, 0,103,114, 97,100,105,101,110,116, 95,116,121,112, +101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, 97,118,101, 95,116,121,112,101, 0,119, 97,118,101, 95,116,121, +112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95, +105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42, +112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,100, 95,116,105,109,101,115, +116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119, +104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,120, 95,114,101,115, +111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50, 53, 54, 93, 0, +100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115, 97,109,112,108, +101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, 99,121, 0,119, 97,118, +101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97,118,101,102,114,109, 95, +121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111,112,101, 95, 97,108,112, +104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, 51, 93, 91, 50, 93, 0, +104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, 95, 50, 0, 42,119, 97, +118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114,109, 95,116,111,116, 0, +111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,105, 99,111,110, 95,105,109, 98,117,102, + 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97,108, 95,119,101,105,103, +104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95, +114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101, + 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,112,108, 97,110,101, 0,112,108, 97,110,101, 95,111,102,102,115,101, +116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,112, 97,105,110,116, 95,116,111,111,108, 0,105, +109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116,104, 95,102, 97, 99,116,111,114, + 0, 99,114,101, 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97,110,101, 95,116,114,105,109, 0, +116,101,120,116,117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116,117,114,101, 95,111,118,101,114, +108, 97,121, 95, 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0, + 97, 99,116,105,118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, + 97,115,107, 0, 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97,112, 91, 51, 52, 93, 0,116,111,116,108, 97,121,101,114, + 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97, +108, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, + 93, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116,105, 99,108,101, 95,105,110,100,101,120, 91, 50, 93, 0, +100,101,108,101,116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, + 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105, +114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, + 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110,103, 95,107, 0,112,108, 97,115,116,105, 99,105,116,121, + 95, 99,111,110,115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97,116,105,111, 0,112,108, 97,115,116,105, 99,105,116,121, + 95, 98, 97,108, 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, 97,110, 99,101, 0,118,105,115, 99,111,115,105,116,121, + 95,111,109,101,103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95, +107, 0,115,116,105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98, +117,111,121, 97,110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97,109,101,115, 0, 42, 98,111,105,100,115, 0, 42,102,108, +117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116, +101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105, +108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114, 97,109,101,115, 0,100,114, 97,119, 95, 99,111,108, + 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, + 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101, +103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97, +110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, + 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0, 98, 98, 95,115,105,122,101, 91, 50, 93, + 0, 98, 98, 95,118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101,108, 95,116, 97,105,108, 0, 99,111,108,111,114, 95,118, +101, 99, 95,109, 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, + 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105, +102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0, 99,111,117,114, 97,110,116, 95,116, 97, +114,103,101,116, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114, 97,110,100, 0,112, +115, 95,111,102,102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114,101,115, 0,101,102,102,101, 99,116,111,114, 95, 97,109, +111,117,110,116, 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109,101, 95,112, 97,100, 91, 51, 93, 0,112, 97,114,116,102, + 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118, +101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, + 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, + 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95, +110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115, +105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100, +102,108, 97,116, 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, 95,102,108, 97,116, 0,107,105,110,107, 95, 97,109,112, + 95, 99,108,117,109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, + 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95, +101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110, +103,116,104, 95,116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95,102, 97, 99, 0,112, 97,114,116,105,110,103, 95,109,105, +110, 0,112, 97,114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95, +108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105, +108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115, + 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, + 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99, +104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99, +104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111, +117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102, +114, 97,109,101, 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, 0, 99,104,105,108,100, 95,115,101,101,100, 0,116,111, +116,117,110,101,120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99, +104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, + 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 54, 52, 93, 0,118,103,114,111,117,112, + 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102, +101, 99,116,111,114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105,110,103,115, 0,116,111,116, 95,102,108,117,105,100,115, +112,114,105,110,103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 42,116,114,101,101, 0, + 42,112,100,100, 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, 99, 0, 95,112, 97,100, 0, 67,100,105,115, 0, 67,118, +105, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97, +120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101, +110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95, +119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, + 95,115,109,111,111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,118,101,108, 95,100, 97, +109,112,105,110,103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115, +112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100, + 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101, +107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111, +110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108, +102,101,112,115,105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, 99,101, 0,100,105,115,116, 97,110, 99,101, 95,114,101, +112,101,108, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112, +114,101,115,115,117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110, +117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117, +102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, + 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,108, 0, 42,114,101,112, +111,114,116,116,105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, + 0,119,105,110,100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0, +111,112, 95,117,110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101, +112,111,114,116,115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101, +121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0, 42, 97,100,100,111,110, 99,111,110,102, + 0, 42,117,115,101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114, + 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,115, 99,114,101,101,110, 0, 42,110, +101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 54, 52, 93, 0,112,111,115,120, 0,112,111,115, +121, 0,119,105,110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, + 0,109,111,100, 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116, +115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, + 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114, +115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0, +112,114,111,112,118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102, +116, 0, 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112, +116,121,112,101, 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95,105,116,101,109, 0, 42, 97,100,100, 95,105,116,101,109, + 0,105,116,101,109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110, +105,100, 0,107,109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, + 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, + 97,116, 97, 0, 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, + 42,111,112,109, 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115, +105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109, +117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102, +115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100, +101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99, +116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,115,105,122,101, 0, 42, +114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114, 97,110,115, 67,104, 97, +110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,114,103,101,116,115, 0, +118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0, 42,101,120,112,114, 95, + 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0, 99,111,108, +111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, + 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101, +115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100, +101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117, +112,109,111,100,101, 0,107,101,121,105,110,103,102,108, 97,103, 0,112, 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105, +111,110, 91, 50, 52, 48, 93, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, + 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114, +105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99, +116, 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0, +111,112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111, +111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100, +101,114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, + 0,114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101, +116, 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, + 95,105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97, +103,103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, +115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105, +114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, + 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110, +100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97, +110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105, +100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, + 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0, +100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112, +108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100, +105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, + 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104, +105,103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101, +115, 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108, +101, 0,118,111,114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116, +105, 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, + 0,118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105, +110,116,115, 95,111,108,100, 0, 42,118,101,108, 0, 42,116,114,105,100,105,118,115, 0,109, 97,116, 95,111,108,100, 91, 52, 93, + 91, 52, 93, 0,110,117,109,116,114,105,115, 0,118,111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105, +110, 0,100,105,115,116, 97,110, 99,101, 95,109, 97,120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99, +101, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110, +110,101,114, 0, 99,111,110,101, 95,118,111,108,117,109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97, +103, 0, 98,117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0, +108, 97,115,116,115,105,122,101, 91, 50, 93, 0,116,114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99, +111,110,116,101,120,116, 0,112,114,111,120,121, 0,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104, +116, 0, 42,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114, + 97, 99,107, 95,100,105,115, 97, 98,108,101,100, 0, 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101, + 91, 50, 93, 0,101,114,114,111,114, 0, 42,105,110,116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100, +116,104, 0,112,105,120,101,108, 95, 97,115,112,101, 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110, + 99,105,112, 97,108, 91, 50, 93, 0,107, 49, 0,107, 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110, + 91, 50, 93, 0,112, 97,116, 95,109, 97,120, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97, +114, 99,104, 95,109, 97,120, 91, 50, 93, 0,109, 97,114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114, + 0, 42,109, 97,114,107,101,114,115, 0, 98,117,110,100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103, + 0,115,101, 97,114, 99,104, 95,102,108, 97,103, 0,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114, +110, 95,109, 97,116, 99,104, 0,116,114, 97, 99,107,101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109, +105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107, +101,114, 0,100,101,102, 97,117,108,116, 95,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108, +116, 95,109,105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97, +116,116,101,114,110, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100, +101,102, 97,117,108,116, 95,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103, +105,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116, + 95,102,108, 97,103, 0,109,111,116,105,111,110, 95,102,108, 97,103, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102, +114, 97,109,101, 50, 0,114,101,102,105,110,101, 95, 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0, 99, +108,101, 97,110, 95,102,114, 97,109,101,115, 0, 99,108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101, +114,114,111,114, 0,111, 98,106,101, 99,116, 95,100,105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97, + 99,116, 95,116,114, 97, 99,107, 0,109, 97,120,115, 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99, +105,110,102, 0,115, 99, 97,108,101,105,110,102, 0,114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108, + 97,115,116, 95, 99, 97,109,101,114, 97, 0, 99, 97,109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115, + 0,114,101, 99,111,110,115,116,114,117, 99,116,105,111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,116,111,116, + 95, 99,104, 97,110,110,101,108, 0,115,101,116,116,105,110,103,115, 0, 99, 97,109,101,114, 97, 0,115,116, 97, 98,105,108,105, +122, 97,116,105,111,110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, 0,111, 98,106,101, 99,116,115, 0,111, 98,106,101, 99,116, +110,114, 0,116,111,116, 95,111, 98,106,101, 99,116, 0,100,111,112,101,115,104,101,101,116, 0, 42, 98,114,117,115,104, 95,103, +114,111,117,112, 0, 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116,121,112,101, 0,105,109, 97, +103,101, 95,102,105,108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112,114,101,118,105,101,119, 95, +105,100, 0,105,110,105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0,105,109, 97,103,101, 95,114, +101,115,111,108,117,116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99,111,108,111,114, 91, 52, 93, + 0, 42,105,110,105,116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114,110, 97,109,101, 91, 54, 52, + 93, 0,100,114,121, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114,101,115,104,111,108,100, 0, +100,101,112,116,104, 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115,112,114,101, 97,100, 95,115, +112,101,101,100, 0, 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115,104,114,105,110,107, 95,115, +112,101,101,100, 0,100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110,102,108,117,101,110, 99,101, + 95,115, 99, 97,108,101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95,100, 97,109,112,105,110,103, + 0,119, 97,118,101, 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108,101, 0,119, 97,118,101, 95, +115,112,114,105,110,103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,111, +117,116,112,117,116, 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 50, 91, 54, 52, 93, 0, + 42,112,109,100, 0,115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0,101,114,114,111,114, 91, 54, + 52, 93, 0, 99,111,108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116,105, 99,108,101, 95,114, 97, +100,105,117,115, 0,112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110,116, 95,100,105,115,116, 97, +110, 99,101, 0, 42,112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, 0,112,114,111,120,105,109, +105,116,121, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95,102, 97, 99,116,111,114, 0, +119, 97,118,101, 95, 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115,109,117,100,103,101, 95,115, +116,114,101,110,103,116,104, 0, 84, 89, 80, 69, 18, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116, + 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116, 0,100,111,117, + 98,108,101, 0,105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105,100, 0, 76,105,110,107, 0, 76, +105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,102, 0,118,101, 99, + 51,102, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,114, +111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,105, +101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,118, +101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107, 0, + 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,107,101,114, + 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,101, +114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101, +110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67, 66, + 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110, +116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 86,111,120,101,108, 68, 97,116, 97, 0, + 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 67,111, +108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 71, + 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, + 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, + 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 69,100,105,116, + 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105, +116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101,108,101, 99,116, 0, 77, 80,111,108,121, 0, 77, 84,101,120, 80,111,108, +121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70, 97, 99,101, 0, 77, + 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86, +101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 66, 77, 69,100,105,116, 77,101,115,104, 0, 67,117,115,116, +111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 70, +108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110, +103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 79,114,105,103, 83,112, 97, 99, +101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101, +115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100, +103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77, 82,101, 99, 97,115,116, 0, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 77, 97,112,112,105,110,103, 73,110,102,111, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117, + 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100, +105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, + 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, + 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 77, +111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105,110, 83,101,116,116,105,110,103,115, 0, + 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 67,111,108,108, 83,101,116,116,105, +110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101, + 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68, + 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114, +101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, +111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111, +116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115, +105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, 83,117,114,102, 97, 99,101, 77, +111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115,104, 0, 66, 86, 72, 84,114,101,101, 70, +114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 68,101,102, + 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,109, 77,111,100, +105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,102,105,101,114, + 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, + 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, + 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115, +105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, + 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102, +111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114, + 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, 99,114,101,119, 77, +111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99, +101, 97,110, 0, 79, 99,101, 97,110, 67, 97, 99,104,101, 0, 87, 97,114,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, + 87,101,105,103,104,116, 86, 71, 69,100,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, + 71, 77,105,120, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 80,114,111,120,105,109,105, +116,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 67, 97,110,118, 97,115, 83,101,116,116,105,110, +103,115, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 66,114,117,115,104, 83,101,116,116,105,110,103,115, 0, 82,101,109, +101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,105,116, 76, 97,116,116, 0, 76, 97,116,116,105, 99,101, + 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116, +105,111,110, 0, 98, 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110, +103,115, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97, +114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, + 98,106,101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104, +101, 69,120,116,114, 97, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, + 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99, +114, 97,116, 99,104, 0, 70,108,117,105,100, 86,101,114,116,101,120, 86,101,108,111, 99,105,116,121, 0, 87,111,114,108,100, 0, + 66, 97,115,101, 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, + 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112, +101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101, +114, 76, 97,121,101,114, 0, 73,109, 97,103,101, 70,111,114,109, 97,116, 68, 97,116, 97, 0, 82,101,110,100,101,114, 68, 97,116, + 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97, +109,105,110,103, 0, 82,101, 99, 97,115,116, 68, 97,116, 97, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114, +107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110, +103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105, +116, 83,101,116,116,105,110,103,115, 0, 83, 99,117,108,112,116, 0, 85,118, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, + 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 85,110,105,102,105,101,100, 80, 97,105, +110,116, 83,101,116,116,105,110,103,115, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85, +110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116, +105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 77,111,118,105,101, 67,108, +105,112, 0, 66, 71,112,105, 99, 0, 77,111,118,105,101, 67,108,105,112, 85,115,101,114, 0, 82,101,103,105,111,110, 86,105,101, +119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,110,100,101,114, 69,110,103,105,110,101, 0, 86,105,101,119, + 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86, +105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, + 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83, +112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105, +108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117, +116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69, +108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, + 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, + 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83, +112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, + 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101, + 67,108,105,112, 0, 77,111,118,105,101, 67,108,105,112, 83, 99,111,112,101,115, 0,117,105, 70,111,110,116, 0,117,105, 70,111, +110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117, +105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0,117,105, 80, 97,110,101,108, 67,111,108,111,114,115, + 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108, +111,114, 0, 98, 84,104,101,109,101, 0, 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, + 68,101,102, 0, 98, 83, 99,114,101,101,110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101, +108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, + 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71, +108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84, +114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, + 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, + 83,111,117,110,100, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114, +115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83, +112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, + 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114, +116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, + 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114, +116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83, +101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110, +115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114, +109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110, +115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, + 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116, +117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, + 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, + 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116, +111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, + 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111, +114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, + 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116, +117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, + 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114, +101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97, +116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116,101,101,114,105,110,103, 65, 99,116,117, 97,116,111,114, 0, 71, +114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111, +110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, + 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, + 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101, +108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, + 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115, +116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99, +107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97, +105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76, +105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, 97,109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97, +105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, + 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, + 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115, +116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116, +114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110, +116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, + 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115, +116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105, +116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, + 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67, +111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, + 98, 70,111,108,108,111,119, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67, 97,109,101,114, 97, 83,111, +108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 79, 98,106,101, 99,116, 83,111,108,118,101,114, 67,111,110,115, +116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116, +114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, + 76,105,110,107, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 0,117,105, 66,108,111, 99,107, 0, + 98, 78,111,100,101, 84,121,112,101, 0, 98, 78,111,100,101, 84,114,101,101, 69,120,101, 99, 0, 98, 78,111,100,101, 83,111, 99, +107,101,116, 86, 97,108,117,101, 73,110,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 70,108,111, 97, +116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 66,111,111,108,101, 97,110, 0, 98, 78,111,100,101, 83, +111, 99,107,101,116, 86, 97,108,117,101, 86,101, 99,116,111,114, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117, +101, 82, 71, 66, 65, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,117,114, 68, 97,116, 97, + 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108,117,114, + 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, 78,111, +100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70, +105,108,101, 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0, + 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86, +101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68, +105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101, +110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,111, +114,115,112,105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84,101,120, 83,107,121, 0, 78,111, +100,101, 84,101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101,114, 0, 78,111,100,101, 84,101, +120, 69,110,118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100,105,101,110,116, 0, 78,111,100, +101, 84,101,120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, 0, 78,111,100,101, 84,101,120, + 77,117,115,103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100,101, 84,101,120, 77, 97,103,105, + 99, 0, 78,111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101,120, 78,111,100,101, 79,117,116, +112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104, + 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97,116, 97, + 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105, +100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,112,114,105,110, +103, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, + 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, + 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103, +115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, + 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101, + 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101, + 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, 77, 97, +110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101, +110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97, +112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 68,105,102,102, 73,116,101, +109, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,102, +105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110, + 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95, + 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110, + 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83,116,101, +112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, 97,110, +110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80, + 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107, + 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0, + 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71, +111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0, + 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101, +114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116, +101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83,112,101, 97,107,101,114, 0, 77, +111,118,105,101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, 97, 99,104,101, 0, 77,111,118, +105,101, 84,114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 84,114, 97, 99,107, 0, 77,111, +118,105,101, 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82,101, 99,111,110,115,116,114,117, + 99,116,101,100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 67, 97,109,101,114, 97, 0, 77, +111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105, +110,103, 83,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 82,101, 99, +111,110,115,116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 79, 98,106,101, 99,116, 0, + 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, + 68,111,112,101,115,104,101,101,116, 67,104, 97,110,110,101,108, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 68,111, +112,101,115,104,101,101,116, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97,105,110, +116, 83,117,114,102, 97, 99,101, 68, 97,116, 97, 0, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 8, 0, 8, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 12, 0, 16, 0, 16, 0, 32, 0,128, 0, +120, 0,152, 8, 0, 0, 40, 0,144, 0,112, 5,112, 0, 36, 0, 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0, + 16, 0,200, 0, 40, 0,216, 11, 48, 5, 0, 0, 0, 0, 0, 0, 56, 1,168, 1,216, 4, 24, 0, 8, 3,200, 0, 0, 0,104, 0, + 64, 1, 56, 4, 80, 0, 24, 1,144, 0, 56, 3, 16, 2, 88, 0, 16, 0,128, 3,152, 0,136, 4, 0, 0,104, 0,104, 0, 0, 1, + 80, 0, 8, 0, 16, 0, 32, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0,232, 4, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0, + 20, 0, 48, 0, 64, 0, 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, 0, 0,176, 0,144, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, + 8, 0, 24, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 4, 0,112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0,192, 0, +128, 0,120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,200, 0, 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0, 88, 1, +112, 0,168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0,152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1,144, 0, +152, 2,136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0,112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1,104, 1, +160, 1,104, 1,136, 0,104, 0,112, 0,128, 0, 16, 0, 96, 1, 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0,120, 0, +152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2, 40, 0, +184, 0,152, 0, 64, 0, 72, 0, 32, 0,128, 0, 24, 0, 56, 9, 64, 0, 24, 0, 16, 0, 56, 0,168, 0, 96, 0, 24, 0, 88, 6, + 48, 0, 16, 0,168, 0, 96, 0, 24, 0, 56, 0,120, 0, 24, 0,240, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0,216, 8, +104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 56, 0,144, 0, 64, 0,240, 0,112, 0,248, 0,240, 0, +160, 7,104, 0, 0, 0,168, 0, 0, 0, 24, 1, 16, 0, 16, 0, 40, 33,128, 16, 24, 16,216, 0,160, 2,168, 5, 64, 0, 24, 0, +208, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 48, 1, 56, 0, 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3,224, 1, + 16, 0,168, 36, 80, 0, 56, 0,112, 38, 8, 1, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 48, 4, + 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3,200, 4, 80, 1,208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0, 24, 0, + 32, 0,136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0,136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0,204, 0, +136, 0,136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0,112, 0, +148, 0, 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1, 0, 1, + 16, 0, 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0,120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0, 80, 0, + 80, 0, 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0, 28, 0, + 28, 0, 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, 48, 0,208, 0, 56, 0, 16, 0, 88, 1, 0, 0, 0, 0, 0, 0, + 16, 0, 16, 0, 4, 0, 24, 0, 16, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 32, 4, 40, 4, 32, 0, 44, 0, 24, 0, 8, 0, +128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, 20, 0,200, 3,216, 3,208, 3,200, 3,208, 3,208, 3,200, 3, +208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, 24, 0,104, 0, 0, 4, 24, 0, 56, 0, 56, 0, 20, 0, 16, 0, + 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, + 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, 32, 0,136, 0, 0, 0,120, 0, 24, 0, 24, 0, 16, 0, 24, 0, + 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, 16, 0,104, 0, 0, 1, 40, 0,208, 0,104, 0,112, 0,216, 1, + 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0,184, 0, 8, 3, 0, 0, 16, 1,192, 0, + 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, 32, 0, 24, 0, 16, 6, 0, 0, 83, 84, 82, 67,209, 1, 0, 0, + 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, 13, 0, 0, 0, 13, 0, 1, 0, 11, 0, 2, 0, 14, 0, 2, 0, + 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 16, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 18, 0, 4, 0, 4, 0, 8, 0, 4, 0, 9, 0, 4, 0, 10, 0, + 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 20, 0, 4, 0, 11, 0, 12, 0, + 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, 21, 0, 0, 0, 21, 0, 1, 0, 0, 0, 16, 0, 0, 0, 17, 0, + 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, 4, 0, 22, 0, 4, 0, 23, 0, 22, 0, 11, 0, 11, 0, 0, 0, + 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, 2, 0, 27, 0, 2, 0, 28, 0, 2, 0, 18, 0, 4, 0, 29, 0, + 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 8, 0, 22, 0, 32, 0, 22, 0, 33, 0, 24, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, + 4, 0, 37, 0, 4, 0, 27, 0, 23, 0, 38, 0, 25, 0, 5, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, + 4, 0, 43, 0, 26, 0, 6, 0, 27, 0, 44, 0, 2, 0, 45, 0, 2, 0, 46, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 47, 0, + 28, 0, 21, 0, 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 48, 0, 30, 0, 49, 0, 19, 0, 50, 0, 19, 0, 51, 0, 2, 0, 45, 0, + 2, 0, 46, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 18, 0, 2, 0, 56, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 4, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 26, 0, 61, 0, 31, 0, 7, 0, 22, 0, 32, 0, + 14, 0, 62, 0, 19, 0, 63, 0, 2, 0, 45, 0, 2, 0, 64, 0, 2, 0, 65, 0, 2, 0, 27, 0, 32, 0, 16, 0, 32, 0, 0, 0, + 32, 0, 1, 0, 7, 0, 66, 0, 7, 0, 60, 0, 2, 0, 16, 0, 2, 0, 67, 0, 2, 0, 68, 0, 2, 0, 18, 0, 4, 0, 69, 0, + 4, 0, 70, 0, 11, 0, 2, 0, 7, 0, 71, 0, 0, 0, 19, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 33, 0, 15, 0, + 22, 0, 32, 0, 34, 0, 75, 0, 32, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 4, 0, 27, 0, 14, 0, 79, 0, 31, 0, 80, 0, + 22, 0, 81, 0, 2, 0, 16, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 18, 0, 7, 0, 84, 0, 4, 0, 85, 0, 35, 0, 6, 0, + 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 86, 0, 0, 0, 87, 0, 4, 0, 22, 0, 4, 0, 88, 0, 36, 0, 10, 0, 36, 0, 0, 0, + 36, 0, 1, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 91, 0, 4, 0, 67, 0, 4, 0, 13, 0, 4, 0, 92, 0, 0, 0, 93, 0, + 0, 0, 94, 0, 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 95, 0, 4, 0, 92, 0, 4, 0, 96, 0, 14, 0, 97, 0, 35, 0, 98, 0, + 35, 0, 99, 0, 4, 0,100, 0, 4, 0,101, 0, 14, 0,102, 0, 0, 0,103, 0, 4, 0,104, 0, 4, 0,105, 0, 11, 0,106, 0, + 8, 0,107, 0, 38, 0, 3, 0, 4, 0,108, 0, 4, 0,109, 0, 11, 0, 2, 0, 39, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0, + 0, 0, 16, 0, 0, 0,110, 0, 2, 0, 18, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, + 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, 7, 0,121, 0, 31, 0, 80, 0, 27, 0,122, 0, + 0, 0,123, 0, 0, 0,124, 0, 40, 0, 14, 0, 41, 0,125, 0, 4, 0,126, 0, 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, 0, + 0, 0,130, 0, 0, 0,131, 0, 0, 0,132, 0, 0, 0, 27, 0, 2, 0,133, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0, 18, 0, + 4, 0, 30, 0, 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,136, 0, 43, 0,137, 0, 44, 0,138, 0, 45, 0,139, 0, + 45, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,132, 0, 2, 0, 18, 0, 2, 0,143, 0, 2, 0, 16, 0, 4, 0,144, 0, + 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, 2, 0,150, 0, 4, 0,151, 0, 4, 0,152, 0, + 38, 0,153, 0, 25, 0,154, 0, 7, 0,155, 0, 4, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 0, 0,160, 0, + 0, 0,161, 0, 7, 0,162, 0, 7, 0,163, 0, 46, 0, 65, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, + 27, 0,168, 0, 47, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 7, 0,175, 0, + 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, + 0, 0,184, 0, 0, 0,124, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0, 56, 0, + 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, + 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, + 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, + 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0, + 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 48, 0, 15, 0, 0, 0, 35, 0, 11, 0,227, 0, + 0, 0,228, 0, 0, 0,229, 0, 4, 0,230, 0, 4, 0,231, 0, 11, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, + 4, 0,236, 0, 11, 0,237, 0, 11, 0,238, 0, 4, 0,239, 0, 4, 0, 27, 0, 49, 0, 6, 0, 7, 0,185, 0, 7, 0,186, 0, + 7, 0,187, 0, 7, 0,240, 0, 7, 0, 66, 0, 4, 0, 63, 0, 50, 0, 5, 0, 2, 0, 18, 0, 2, 0, 37, 0, 2, 0, 63, 0, + 2, 0,241, 0, 49, 0,235, 0, 51, 0, 17, 0, 27, 0,168, 0, 42, 0,242, 0, 52, 0,243, 0, 7, 0,244, 0, 7, 0,245, 0, + 2, 0, 16, 0, 2, 0,246, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,247, 0, 4, 0,248, 0, 2, 0,249, 0, 2, 0,250, 0, + 4, 0,132, 0, 4, 0,144, 0, 2, 0,251, 0, 2, 0,252, 0, 53, 0, 25, 0, 2, 0, 18, 0, 2, 0,253, 0, 7, 0,254, 0, + 7, 0,255, 0, 2, 0,143, 0, 2, 0, 0, 1, 4, 0, 1, 1, 4, 0, 2, 1, 27, 0,168, 0, 4, 0, 3, 1, 2, 0, 4, 1, + 2, 0, 5, 1, 11, 0, 6, 1, 7, 0, 7, 1, 7, 0, 8, 1, 2, 0, 9, 1, 2, 0, 10, 1, 2, 0, 11, 1, 2, 0, 12, 1, + 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 50, 0, 17, 1, 54, 0, 18, 1, 55, 0, 13, 0, 4, 0, 19, 1, + 4, 0, 20, 1, 2, 0, 21, 1, 2, 0, 18, 0, 2, 0, 22, 1, 2, 0, 23, 1, 27, 0,168, 0, 7, 0, 24, 1, 4, 0, 25, 1, + 0, 0, 26, 1, 7, 0, 27, 1, 4, 0, 28, 1, 4, 0,132, 0, 56, 0, 4, 0, 27, 0,168, 0, 0, 0, 29, 1, 4, 0, 30, 1, + 4, 0, 27, 0, 47, 0, 64, 0, 22, 0, 32, 0, 34, 0, 75, 0, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, + 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 30, 0, 7, 0, 40, 1, 7, 0, 41, 1, + 7, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, + 7, 0, 50, 1, 7, 0, 51, 1, 2, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 55, 1, 2, 0, 56, 1, 2, 0, 57, 1, + 2, 0, 58, 1, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, + 4, 0, 63, 1, 4, 0, 64, 1, 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 22, 1, 2, 0,130, 0, 4, 0, 22, 0, 4, 0,127, 0, + 4, 0,128, 0, 4, 0,129, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 67, 0, 40, 0, 69, 1, 57, 0, 70, 1, 31, 0, 80, 0, + 42, 0,242, 0, 48, 0, 71, 1, 50, 0, 17, 1, 51, 0, 72, 1, 25, 0,154, 0, 53, 0, 73, 1, 55, 0, 74, 1, 56, 0, 75, 1, + 0, 0, 76, 1, 0, 0,124, 0, 58, 0, 13, 0, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0,176, 0, 4, 0, 18, 0, 0, 0,171, 0, + 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 4, 0, 27, 0, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 27, 0, 44, 0, + 59, 0, 9, 0, 50, 0, 82, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 4, 0, 18, 0, 7, 0, 83, 1, 7, 0, 84, 1, + 4, 0, 85, 1, 4, 0, 86, 1, 60, 0, 74, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 87, 1, + 2, 0,179, 0, 2, 0, 88, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 89, 1, 7, 0, 90, 1, + 7, 0, 91, 1, 7, 0, 92, 1, 7, 0, 93, 1, 7, 0, 94, 1, 7, 0, 95, 1, 7, 0, 96, 1, 7, 0, 97, 1, 7, 0, 98, 1, + 7, 0, 99, 1, 54, 0,100, 1, 2, 0,253, 0, 2, 0, 30, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,101, 1, 7, 0,102, 1, + 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, 2, 0,109, 1, 0, 0,110, 1, + 0, 0,111, 1, 2, 0,112, 1, 2, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 2, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, + 7, 0,119, 1, 7, 0,120, 1, 2, 0,121, 1, 2, 0, 67, 0, 2, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, + 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, + 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, 7, 0,137, 1, 2, 0,138, 1, 0, 0,139, 1, 31, 0, 80, 0, 46, 0,140, 1, + 2, 0,141, 1, 2, 0, 76, 1, 0, 0,142, 1, 25, 0,154, 0, 57, 0, 70, 1, 61, 0, 18, 0, 7, 0,143, 1, 7, 0,144, 1, + 7, 0,145, 1, 7, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, + 2, 0,153, 1, 2, 0,154, 1, 2, 0,155, 1, 2, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, + 62, 0, 4, 0, 4, 0, 18, 0, 4, 0,161, 1, 4, 0,162, 1, 4, 0, 67, 0, 63, 0,126, 0, 22, 0, 32, 0, 34, 0, 75, 0, + 2, 0,163, 1, 2, 0, 18, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, + 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, + 7, 0,175, 1, 7, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, + 7, 0,183, 1, 61, 0,184, 1, 62, 0,185, 1, 7, 0,186, 1, 7, 0,187, 1, 7, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, + 7, 0,191, 1, 7, 0,192, 1, 2, 0,193, 1, 2, 0,194, 1, 2, 0,195, 1, 0, 0,196, 1, 0, 0,197, 1, 7, 0,198, 1, + 7, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, 7, 0,202, 1, 7, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 2, 0,206, 1, + 2, 0,207, 1, 4, 0, 87, 1, 4, 0,208, 1, 2, 0,209, 1, 2, 0,210, 1, 2, 0,211, 1, 2, 0,212, 1, 7, 0,213, 1, + 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, + 7, 0,222, 1, 0, 0,223, 1, 7, 0,224, 1, 7, 0,225, 1, 7, 0,226, 1, 4, 0,227, 1, 0, 0,228, 1, 0, 0,122, 1, + 0, 0,229, 1, 0, 0, 76, 1, 2, 0,230, 1, 2, 0,231, 1, 2, 0,141, 1, 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1, + 7, 0,235, 1, 7, 0,236, 1, 7, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 2, 0,164, 0, 2, 0,165, 0, 50, 0,240, 1, + 50, 0,241, 1, 0, 0,242, 1, 0, 0,243, 1, 0, 0,244, 1, 0, 0,245, 1, 2, 0,246, 1, 2, 0,247, 1, 7, 0,248, 1, + 7, 0,249, 1, 46, 0,140, 1, 57, 0, 70, 1, 31, 0, 80, 0, 64, 0,250, 1, 25, 0,154, 0, 7, 0,251, 1, 7, 0,252, 1, + 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, 2, 0, 0, 2, 2, 0, 30, 0, 7, 0, 1, 2, 7, 0, 2, 2, 7, 0, 3, 2, + 7, 0, 4, 2, 7, 0, 5, 2, 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 2, 0, 10, 2, 2, 0, 11, 2, + 4, 0, 12, 2, 2, 0, 13, 2, 2, 0, 14, 2, 14, 0, 15, 2, 65, 0, 4, 0, 22, 0, 32, 0, 0, 0, 35, 0, 66, 0, 2, 0, + 38, 0,153, 0, 67, 0, 20, 0, 67, 0, 0, 0, 67, 0, 1, 0, 68, 0, 16, 2, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 17, 2, + 2, 0, 18, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 22, 2, + 7, 0, 23, 2, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0, 22, 0, 7, 0, 26, 2, 7, 0, 27, 2, 69, 0, 20, 0, 22, 0, 32, 0, + 34, 0, 75, 0, 68, 0, 16, 2, 14, 0, 28, 2, 14, 0, 29, 2, 14, 0, 30, 2, 31, 0, 80, 0, 63, 0, 31, 2, 0, 0, 18, 0, + 0, 0, 32, 2, 2, 0, 33, 2, 2, 0,178, 0, 2, 0, 27, 0, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, 7, 0, 34, 2, + 7, 0, 35, 2, 7, 0, 36, 2, 67, 0, 37, 2, 30, 0, 11, 0, 7, 0, 38, 2, 7, 0, 39, 2, 7, 0, 40, 2, 7, 0,255, 0, + 2, 0, 54, 0, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 43, 2, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 46, 2, 29, 0, 7, 0, + 7, 0, 47, 2, 7, 0, 39, 2, 7, 0, 40, 2, 2, 0, 43, 2, 2, 0, 46, 2, 7, 0,255, 0, 7, 0, 27, 0, 70, 0, 21, 0, + 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 16, 0, 2, 0, 48, 2, 2, 0, 46, 2, 2, 0, 18, 0, 2, 0, 49, 2, 2, 0, 50, 2, + 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 53, 2, 2, 0, 54, 2, 2, 0, 55, 2, 2, 0, 56, 2, 7, 0, 57, 2, 7, 0, 58, 2, + 29, 0, 48, 0, 30, 0, 49, 0, 2, 0, 59, 2, 2, 0, 60, 2, 4, 0, 61, 2, 71, 0, 5, 0, 2, 0, 62, 2, 2, 0, 48, 2, + 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 72, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 63, 2, 7, 0, 64, 2, + 73, 0, 4, 0, 14, 0, 65, 2, 74, 0, 66, 2, 4, 0, 67, 2, 0, 0, 94, 0, 75, 0, 68, 0, 22, 0, 32, 0, 34, 0, 75, 0, + 68, 0, 16, 2, 14, 0, 68, 2, 14, 0, 29, 2, 73, 0, 69, 2, 27, 0, 70, 2, 27, 0, 71, 2, 27, 0, 72, 2, 31, 0, 80, 0, + 76, 0, 73, 2, 33, 0, 74, 2, 63, 0, 31, 2, 14, 0, 75, 2, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, 2, 0, 16, 0, + 2, 0,178, 0, 2, 0, 76, 2, 2, 0, 77, 2, 7, 0, 78, 2, 7, 0, 79, 2, 4, 0, 80, 2, 2, 0, 27, 0, 2, 0, 33, 2, + 2, 0, 18, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 85, 2, + 2, 0, 86, 2, 4, 0, 87, 2, 11, 0, 88, 2, 2, 0, 22, 0, 2, 0, 97, 0, 2, 0, 66, 0, 2, 0, 89, 2, 7, 0, 90, 2, + 7, 0, 91, 2, 7, 0, 92, 2, 7, 0, 93, 2, 7, 0, 94, 2, 7, 0, 95, 2, 7, 0, 96, 2, 7, 0, 97, 2, 7, 0, 98, 2, + 7, 0, 99, 2, 0, 0,100, 2, 77, 0,101, 2, 78, 0,102, 2, 0, 0,103, 2, 65, 0,104, 2, 65, 0,105, 2, 65, 0,106, 2, + 65, 0,107, 2, 4, 0,108, 2, 7, 0, 84, 0, 4, 0,109, 2, 4, 0,110, 2, 72, 0,111, 2, 4, 0,112, 2, 4, 0,113, 2, + 71, 0,114, 2, 71, 0,115, 2, 79, 0, 47, 0, 22, 0, 32, 0, 34, 0, 75, 0, 68, 0, 16, 2, 31, 0, 80, 0, 33, 0, 74, 2, + 63, 0, 31, 2, 80, 0,116, 2, 81, 0,117, 2, 82, 0,118, 2, 83, 0,119, 2, 84, 0,120, 2, 85, 0,121, 2, 86, 0,122, 2, + 87, 0,123, 2, 88, 0,124, 2, 89, 0,125, 2, 90, 0,126, 2, 91, 0,127, 2, 92, 0,128, 2, 93, 0,129, 2, 79, 0,130, 2, + 94, 0,131, 2, 95, 0,132, 2, 95, 0,133, 2, 95, 0,134, 2, 95, 0,135, 2, 95, 0,136, 2, 4, 0, 53, 0, 4, 0,137, 2, + 4, 0,138, 2, 4, 0,139, 2, 4, 0,140, 2, 4, 0,141, 2, 4, 0,142, 2, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, + 2, 0,178, 0, 2, 0, 76, 2, 2, 0,143, 2, 2, 0, 18, 0, 2, 0,144, 2, 2, 0,145, 2, 0, 0,146, 2, 0, 0,147, 2, + 2, 0, 33, 2, 96, 0,148, 2, 88, 0, 8, 0, 11, 0,149, 2, 7, 0,150, 2, 4, 0,151, 2, 0, 0, 18, 0, 0, 0,152, 2, + 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 86, 0, 7, 0, 4, 0,155, 2, 4, 0,156, 2, 4, 0,157, 2, 4, 0,158, 2, + 2, 0, 48, 2, 0, 0,159, 2, 0, 0, 18, 0, 90, 0, 5, 0, 4, 0,155, 2, 4, 0,156, 2, 0, 0,160, 2, 0, 0,161, 2, + 2, 0, 18, 0, 97, 0, 2, 0, 4, 0,162, 2, 7, 0, 40, 2, 91, 0, 3, 0, 97, 0,163, 2, 4, 0,164, 2, 4, 0, 18, 0, + 89, 0, 4, 0, 7, 0,165, 2, 2, 0,166, 2, 0, 0, 18, 0, 0, 0,161, 2, 92, 0, 4, 0, 0, 0,240, 0, 0, 0,185, 0, + 0, 0,186, 0, 0, 0,187, 0, 81, 0, 5, 0, 4, 0,167, 2, 4, 0,141, 2, 2, 0, 48, 2, 0, 0, 18, 0, 0, 0, 27, 0, + 83, 0, 2, 0, 4, 0,168, 2, 4, 0,169, 2, 82, 0, 6, 0, 42, 0,149, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, + 2, 0,153, 2, 2, 0,154, 2, 84, 0, 2, 0, 7, 0,170, 2, 4, 0, 18, 0, 85, 0, 4, 0, 0, 0,185, 0, 0, 0,186, 0, + 0, 0,187, 0, 0, 0,240, 0, 93, 0, 1, 0, 7, 0,171, 2, 80, 0, 2, 0, 4, 0, 14, 2, 4, 0, 16, 0, 87, 0, 7, 0, + 7, 0,150, 2, 42, 0,149, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 98, 0, 1, 0, + 7, 0,172, 2, 99, 0, 1, 0, 4, 0,173, 2,100, 0, 1, 0, 0, 0,174, 2,101, 0, 1, 0, 7, 0,150, 2,102, 0, 1, 0, + 7, 0,170, 2,103, 0, 4, 0, 4, 0,175, 2, 4, 0,176, 2, 7, 0,177, 2, 4, 0,178, 2,104, 0, 4, 0, 7, 0,240, 0, + 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,105, 0, 1, 0,104, 0,151, 2,106, 0, 5, 0, 4, 0,179, 2, 4, 0,180, 2, + 0, 0, 18, 0, 0, 0, 48, 2, 0, 0,181, 2,107, 0, 2, 0, 4, 0,182, 2, 4, 0,180, 2,108, 0, 10, 0,108, 0, 0, 0, +108, 0, 1, 0,106, 0,183, 2,105, 0,184, 2,107, 0,185, 2, 4, 0, 53, 0, 4, 0,138, 2, 4, 0,137, 2, 4, 0, 27, 0, + 89, 0,186, 2, 96, 0, 14, 0, 14, 0,187, 2, 89, 0,186, 2, 0, 0,188, 2, 0, 0,189, 2, 0, 0,190, 2, 0, 0,191, 2, + 0, 0,192, 2, 0, 0,193, 2, 0, 0,194, 2, 0, 0, 18, 0, 95, 0,132, 2, 95, 0,134, 2, 2, 0,195, 2, 0, 0,196, 2, +109, 0, 1, 0, 4, 0,173, 2,110, 0, 9, 0,110, 0, 0, 0,110, 0, 1, 0, 4, 0, 16, 0, 4, 0, 87, 1, 4, 0,197, 2, + 4, 0, 27, 0, 0, 0, 19, 0, 41, 0,125, 0, 0, 0,198, 2,111, 0, 6, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, + 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2,112, 0, 7, 0,110, 0,199, 2, 2, 0,205, 2, 2, 0,187, 2, 2, 0,206, 2, + 2, 0, 92, 0, 11, 0,207, 2, 11, 0,208, 2,113, 0, 5, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 19, 0, 7, 0,209, 2, + 0, 0, 94, 0,114, 0, 5, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 19, 0, 2, 0,210, 2, 0, 0,211, 2,115, 0, 5, 0, +110, 0,199, 2, 7, 0, 90, 0, 7, 0,212, 2, 4, 0,213, 2, 4, 0,214, 2,116, 0, 5, 0,110, 0,199, 2, 27, 0,215, 2, + 0, 0, 72, 0, 4, 0, 87, 1, 4, 0, 18, 0,117, 0, 13, 0,110, 0,199, 2, 27, 0,216, 2, 27, 0,217, 2, 27, 0,218, 2, + 27, 0,219, 2, 7, 0,220, 2, 7, 0,221, 2, 7, 0,212, 2, 7, 0,222, 2, 4, 0,223, 2, 4, 0,224, 2, 4, 0, 92, 0, + 4, 0,225, 2,118, 0, 5, 0,110, 0,199, 2, 2, 0,226, 2, 2, 0, 18, 0, 7, 0,227, 2, 27, 0,228, 2,119, 0, 3, 0, +110, 0,199, 2, 7, 0,229, 2, 4, 0, 92, 0,120, 0, 10, 0,110, 0,199, 2, 7, 0,230, 2, 4, 0,231, 2, 4, 0, 27, 0, + 2, 0, 92, 0, 2, 0,232, 2, 2, 0,233, 2, 2, 0,234, 2, 7, 0,235, 2, 0, 0,236, 2,121, 0, 3, 0,110, 0,199, 2, + 7, 0, 27, 0, 4, 0, 16, 0,122, 0, 6, 0,110, 0,199, 2,123, 0,237, 2,124, 0,238, 2,125, 0,239, 2, 7, 0,240, 2, + 4, 0, 16, 0,126, 0, 11, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, + 7, 0,209, 2, 4, 0,241, 2, 0, 0,236, 2, 7, 0,242, 2, 4, 0, 27, 0,127, 0, 12, 0,110, 0,199, 2, 27, 0,243, 2, + 42, 0,244, 2, 4, 0, 92, 0, 4, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 0, 0,202, 2, + 4, 0,203, 2, 4, 0, 27, 0,128, 0, 3, 0,110, 0,199, 2, 7, 0,250, 2, 4, 0,251, 2,129, 0, 5, 0,110, 0,199, 2, + 7, 0,252, 2, 0, 0,236, 2, 2, 0, 18, 0, 2, 0,253, 2,130, 0, 8, 0,110, 0,199, 2, 27, 0,168, 0, 7, 0,252, 2, + 7, 0,255, 0, 7, 0,108, 0, 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 16, 0,131, 0, 21, 0,110, 0,199, 2, 47, 0,200, 2, + 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 27, 0,254, 2, 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 27, 0, + 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2, 7, 0, 2, 3, 7, 0, 3, 3, 7, 0, 4, 3, 7, 0, 5, 3, + 7, 0, 6, 3, 7, 0, 7, 3, 7, 0, 67, 0,132, 0, 7, 0,110, 0,199, 2, 2, 0, 8, 3, 2, 0, 9, 3, 4, 0, 30, 0, + 27, 0,168, 0, 7, 0, 10, 3, 0, 0,236, 2,133, 0, 10, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 11, 3, 7, 0, 12, 3, + 7, 0, 13, 3, 7, 0, 5, 3, 4, 0, 14, 3, 4, 0, 15, 3, 7, 0, 16, 3, 0, 0, 19, 0,134, 0, 1, 0,110, 0,199, 2, +135, 0, 7, 0,110, 0,199, 2, 41, 0,125, 0,136, 0, 17, 3,137, 0, 18, 3,138, 0, 19, 3,139, 0, 20, 3, 14, 0, 21, 3, +140, 0, 13, 0,110, 0,199, 2, 89, 0, 22, 3, 89, 0, 23, 3, 89, 0, 24, 3, 89, 0, 25, 3, 89, 0, 26, 3, 89, 0, 27, 3, + 86, 0, 28, 3, 4, 0, 29, 3, 4, 0, 30, 3, 7, 0, 31, 3, 7, 0, 32, 3,141, 0, 33, 3,142, 0, 7, 0,110, 0,199, 2, + 89, 0, 22, 3, 89, 0, 34, 3,143, 0, 35, 3,144, 0, 33, 3, 4, 0, 36, 3, 4, 0, 29, 3,145, 0, 4, 0,110, 0,199, 2, + 27, 0,168, 0, 4, 0, 37, 3, 4, 0, 27, 0,146, 0, 2, 0, 4, 0, 38, 3, 7, 0, 40, 2,147, 0, 2, 0, 4, 0,128, 0, + 4, 0, 39, 3,148, 0, 24, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0,236, 2, 2, 0, 40, 3, 2, 0, 18, 0, 2, 0, 87, 1, + 2, 0, 27, 0,146, 0, 41, 3, 4, 0, 42, 3, 7, 0, 43, 3, 4, 0, 53, 0, 4, 0, 44, 3,147, 0, 45, 3,146, 0, 46, 3, + 4, 0, 47, 3, 4, 0, 48, 3, 4, 0, 49, 3, 4, 0, 39, 3, 7, 0, 50, 3, 7, 0, 51, 3, 7, 0, 52, 3, 7, 0, 53, 3, + 7, 0, 54, 3, 11, 0, 55, 3,149, 0, 8, 0,110, 0,199, 2,150, 0, 56, 3,143, 0, 35, 3, 4, 0, 57, 3, 4, 0, 58, 3, + 4, 0, 59, 3, 2, 0, 18, 0, 2, 0, 56, 0,151, 0, 8, 0,110, 0,199, 2, 27, 0, 44, 0, 2, 0, 3, 1, 2, 0, 18, 0, + 2, 0,226, 2, 2, 0, 56, 0, 7, 0, 60, 3, 7, 0, 61, 3,152, 0, 6, 0,110, 0,199, 2, 4, 0, 62, 3, 2, 0, 18, 0, + 2, 0, 63, 3, 7, 0, 64, 3, 0, 0,170, 0,153, 0, 8, 0,110, 0,199, 2, 0, 0, 65, 3, 0, 0, 66, 3, 0, 0,193, 2, + 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 92, 0, 0, 0,181, 2,154, 0, 3, 0,110, 0,199, 2,155, 0, 69, 3,139, 0, 20, 3, +156, 0, 10, 0,110, 0,199, 2, 27, 0, 70, 3, 27, 0, 71, 3, 0, 0, 72, 3, 7, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, + 0, 0, 76, 3, 0, 0, 77, 3, 0, 0,211, 2,157, 0, 9, 0,110, 0,199, 2, 27, 0, 78, 3, 0, 0, 72, 3, 7, 0, 79, 3, + 7, 0, 80, 3, 0, 0, 87, 1, 0, 0,226, 2, 0, 0, 81, 3, 0, 0, 27, 0,158, 0, 1, 0,110, 0,199, 2,159, 0, 11, 0, +110, 0,199, 2, 0, 0,236, 2, 7, 0,128, 0, 7, 0, 82, 3, 7, 0, 83, 3, 7, 0, 84, 3, 7, 0, 85, 3, 7, 0, 86, 3, + 4, 0, 18, 0, 2, 0, 87, 3, 2, 0, 88, 3,160, 0, 9, 0,110, 0,199, 2, 27, 0, 89, 3, 4, 0, 90, 3, 4, 0, 91, 3, + 4, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 2, 0,226, 2, 2, 0, 18, 0,161, 0, 29, 0,110, 0,199, 2,162, 0, 95, 3, +163, 0, 96, 3, 4, 0, 97, 3, 4, 0, 98, 3, 7, 0, 99, 3, 7, 0, 4, 3, 7, 0,100, 3, 7, 0,250, 0, 7, 0,101, 3, + 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,240, 2, 4, 0,106, 3, 4, 0,107, 3, 0, 0,108, 3, + 0, 0,109, 3, 0, 0,110, 3, 0, 0,111, 3, 0, 0, 18, 0, 0, 0,112, 3, 2, 0,113, 3, 2, 0,114, 3, 4, 0,214, 2, + 7, 0,108, 0, 7, 0,115, 3, 4, 0, 27, 0,164, 0, 15, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, + 4, 0,203, 2, 4, 0,204, 2, 27, 0,116, 3, 27, 0,117, 3, 54, 0,100, 1, 0, 0,236, 2, 7, 0,209, 2, 7, 0,118, 3, + 0, 0, 18, 0, 0, 0,253, 0, 0, 0,211, 2,165, 0, 16, 0,110, 0,199, 2, 0, 0,236, 2, 2, 0,119, 3, 2, 0,253, 0, + 7, 0,120, 3, 54, 0,121, 3, 7, 0,122, 3, 7, 0,123, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3, + 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3,166, 0, 16, 0,110, 0,199, 2, 0, 0,132, 3, 0, 0,133, 3, + 7, 0,134, 3, 7, 0,135, 3, 0, 0,136, 3, 0, 0,137, 3, 0, 0,138, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, + 47, 0,127, 3, 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3,167, 0, 16, 0,110, 0,199, 2, 0, 0,236, 2, + 4, 0,139, 3, 4, 0,140, 3, 27, 0,141, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3, 27, 0,128, 3, + 4, 0,129, 3, 0, 0,130, 3, 7, 0,142, 3, 7, 0,143, 3, 2, 0,253, 0, 2, 0,144, 3,168, 0, 5, 0,110, 0,199, 2, +169, 0,145, 3,170, 0,146, 3, 4, 0, 16, 0, 4, 0, 27, 0,171, 0, 8, 0,110, 0,199, 2, 7, 0,147, 3, 7, 0,148, 3, + 7, 0,149, 3, 0, 0,250, 0, 0, 0, 18, 0, 0, 0, 87, 1, 0, 0, 27, 0,172, 0, 3, 0,173, 0,150, 3, 4, 0, 67, 2, + 0, 0, 94, 0,173, 0, 29, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0,151, 3, 2, 0, 18, 0, + 2, 0,152, 3, 2, 0,153, 3, 2, 0,154, 3, 2, 0, 30, 0, 0, 0,155, 3, 0, 0,156, 3, 0, 0,157, 3, 0, 0,247, 1, + 4, 0, 27, 0, 7, 0,158, 3, 7, 0,159, 3, 7, 0,160, 3, 7, 0,161, 3, 7, 0,162, 3, 7, 0,163, 3, 29, 0,164, 3, + 31, 0, 80, 0, 33, 0, 74, 2, 91, 0,127, 2, 0, 0, 72, 0, 7, 0,165, 3, 7, 0,166, 3,172, 0,167, 3,174, 0, 5, 0, +174, 0, 0, 0,174, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,124, 0, 68, 0, 3, 0, 7, 0,168, 3, 4, 0, 18, 0, + 4, 0, 27, 0, 27, 0,128, 0, 22, 0, 32, 0, 34, 0, 75, 0,175, 0,169, 3, 2, 0, 16, 0, 2, 0,170, 3, 4, 0,171, 3, + 4, 0,172, 3, 4, 0,173, 3, 0, 0,174, 3, 27, 0, 38, 0, 27, 0,175, 3, 27, 0,176, 3, 27, 0,177, 3, 27, 0,178, 3, + 31, 0, 80, 0, 68, 0, 16, 2,176, 0,179, 3,176, 0,180, 3,177, 0,181, 3, 11, 0, 2, 0,178, 0,182, 3,179, 0,183, 3, +180, 0,184, 3, 14, 0,185, 3, 14, 0,186, 3, 14, 0, 29, 2, 14, 0,187, 3, 14, 0,188, 3, 4, 0, 87, 1, 4, 0,189, 3, + 63, 0, 31, 2, 0, 0,190, 3, 4, 0, 33, 2, 4, 0,191, 3, 7, 0, 77, 1, 7, 0,192, 3, 7, 0,193, 3, 7, 0,176, 0, + 7, 0,194, 3, 7, 0,195, 3, 7, 0, 78, 1, 7, 0,196, 3, 7, 0, 19, 2, 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, + 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3, 7, 0, 12, 3, 7, 0,203, 3, 7, 0,244, 0, 7, 0,204, 3, 4, 0,205, 3, + 4, 0,206, 3, 2, 0, 18, 0, 2, 0,207, 3, 2, 0,208, 3, 2, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 2, 0,212, 3, + 2, 0,213, 3, 2, 0,214, 3, 0, 0,215, 3, 0, 0,216, 3, 4, 0,217, 3, 4, 0,218, 3, 4, 0,219, 3, 4, 0,220, 3, + 7, 0,221, 3, 7, 0, 84, 0, 7, 0,222, 3, 7, 0,223, 3, 7, 0,224, 3, 7, 0,225, 3, 7, 0,226, 3, 7, 0,220, 0, + 7, 0,227, 3, 7, 0,228, 3, 7, 0,229, 3, 7, 0,230, 3, 7, 0,231, 3, 2, 0,232, 3, 0, 0,233, 3, 0, 0,234, 3, + 0, 0,235, 3, 0, 0,236, 3, 0, 0,110, 0, 0, 0,237, 3, 7, 0,238, 3, 7, 0,239, 3, 14, 0,240, 3, 14, 0,241, 3, + 14, 0,242, 3, 14, 0,243, 3, 7, 0,244, 3, 2, 0, 14, 2, 2, 0,245, 3, 7, 0,151, 2, 4, 0,246, 3, 4, 0,247, 3, +181, 0,248, 3, 2, 0,249, 3, 2, 0,251, 0, 7, 0,250, 3, 14, 0,251, 3, 14, 0,252, 3, 14, 0,253, 3, 14, 0,254, 3, +182, 0, 73, 1,183, 0,255, 3, 64, 0, 0, 4, 0, 0, 1, 4, 0, 0, 2, 4, 2, 0, 67, 2, 7, 0,143, 2,155, 0, 3, 4, +143, 0, 4, 4,143, 0, 5, 4, 10, 0, 6, 4, 10, 0, 7, 4, 4, 0, 8, 4, 4, 0, 9, 4, 14, 0, 10, 4, 14, 0, 11, 4, + 14, 0, 12, 4, 7, 0, 13, 4,184, 0, 14, 0,184, 0, 0, 0,184, 0, 1, 0, 27, 0, 38, 0, 7, 0, 12, 3, 7, 0, 79, 1, + 7, 0, 13, 3, 7, 0, 5, 3, 0, 0, 19, 0, 4, 0, 14, 3, 4, 0, 15, 3, 4, 0, 14, 4, 2, 0, 16, 0, 2, 0, 15, 4, + 7, 0, 16, 3,185, 0, 12, 0,185, 0, 0, 0,185, 0, 1, 0, 27, 0, 44, 0, 4, 0, 16, 4, 4, 0, 14, 2, 7, 0, 79, 1, + 7, 0, 17, 4, 7, 0, 18, 4, 7, 0,170, 2, 2, 0, 16, 0, 0, 0, 19, 4, 0, 0, 20, 4,182, 0, 40, 0, 4, 0, 18, 0, + 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 5, 3, 2, 0, 23, 4, 2, 0, 24, 4, 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 27, 4, + 7, 0, 28, 4, 7, 0, 29, 4, 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4, + 7, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, 7, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, + 7, 0, 44, 4, 7, 0, 45, 4, 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4, + 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, 47, 0,169, 0,186, 0, 55, 4, 7, 0, 56, 4, 4, 0,214, 2,187, 0, 5, 0, + 64, 0,250, 1, 7, 0, 57, 4, 7, 0, 58, 4, 2, 0, 18, 0, 2, 0, 59, 4,188, 0, 5, 0,188, 0, 0, 0,188, 0, 1, 0, + 4, 0, 16, 0, 4, 0, 60, 4, 11, 0, 2, 0,189, 0, 9, 0,189, 0, 0, 0,189, 0, 1, 0, 4, 0, 61, 4, 4, 0, 62, 4, + 4, 0, 63, 4, 4, 0, 18, 0, 11, 0, 64, 4, 11, 0, 65, 4, 14, 0, 66, 4,139, 0, 23, 0,139, 0, 0, 0,139, 0, 1, 0, + 4, 0, 18, 0, 4, 0, 67, 4, 4, 0, 68, 4, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4, + 4, 0, 27, 0, 4, 0, 62, 4, 4, 0, 14, 2, 2, 0, 74, 4, 2, 0, 56, 0, 0, 0, 19, 0, 0, 0, 75, 4, 0, 0, 76, 4, + 0, 0, 77, 4, 0, 0, 78, 4, 14, 0, 79, 4,190, 0, 80, 4, 11, 0, 81, 4,191, 0, 1, 0, 7, 0, 47, 2,181, 0, 30, 0, + 4, 0, 18, 0, 7, 0, 82, 4, 7, 0, 83, 4, 7, 0, 84, 4, 4, 0, 85, 4, 4, 0, 86, 4, 4, 0, 87, 4, 4, 0, 88, 4, + 7, 0, 89, 4, 7, 0, 90, 4, 7, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, 7, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4, + 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 7, 0,103, 4, 7, 0,104, 4, + 7, 0,105, 4, 7, 0,106, 4, 4, 0,107, 4, 4, 0,108, 4, 7, 0,109, 4, 7, 0,227, 3,183, 0, 54, 0, 4, 0, 62, 4, + 4, 0,110, 4,192, 0,111, 4,193, 0,112, 4, 0, 0, 27, 0, 0, 0,113, 4, 2, 0,114, 4, 7, 0,115, 4, 0, 0,116, 4, + 7, 0,117, 4, 7, 0,118, 4, 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4, + 7, 0,125, 4, 2, 0,126, 4, 0, 0,127, 4, 2, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4, 0, 0,131, 4, 4, 0,129, 0, + 4, 0,132, 4, 4, 0,133, 4, 2, 0,134, 4, 2, 0,135, 4,191, 0,136, 4, 4, 0,137, 4, 4, 0, 82, 0, 7, 0,138, 4, + 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 2, 0,142, 4, 2, 0,143, 4, 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, + 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4,194, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4,139, 0,153, 4, 14, 0, 21, 3, +187, 0,154, 4, 7, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 4, 0,158, 4,195, 0, 1, 0, 7, 0,159, 4,155, 0, 52, 0, +154, 0,160, 4, 2, 0, 16, 0, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, 7, 0,164, 4, 2, 0,165, 4, 2, 0,166, 4, + 7, 0,167, 4, 2, 0,168, 4, 2, 0,169, 4, 7, 0,170, 4, 7, 0,171, 4, 7, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, + 4, 0,175, 4, 4, 0, 27, 0, 7, 0,176, 4, 4, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, 7, 0,180, 4, 79, 0,181, 4, + 79, 0,182, 4, 0, 0,183, 4, 7, 0,184, 4, 7, 0,185, 4, 31, 0, 80, 0, 2, 0,186, 4, 0, 0,187, 4, 0, 0,188, 4, + 7, 0,189, 4, 4, 0,190, 4, 7, 0,191, 4, 7, 0,192, 4, 4, 0,193, 4, 4, 0, 18, 0, 7, 0,194, 4, 7, 0,195, 4, + 7, 0,196, 4,195, 0,197, 4, 4, 0, 53, 0, 7, 0,198, 4, 7, 0,199, 4, 7, 0,200, 4, 7, 0,201, 4, 7, 0,202, 4, + 7, 0,203, 4, 7, 0,204, 4, 4, 0,205, 4, 7, 0,206, 4,196, 0, 78, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0,179, 0, + 2, 0, 88, 1, 2, 0,122, 1, 2, 0,207, 4, 7, 0,208, 4, 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, 7, 0,212, 4, + 7, 0,213, 4, 7, 0,170, 1, 7, 0,172, 1, 7, 0,171, 1, 7, 0, 30, 0, 4, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4, + 7, 0,217, 4, 7, 0,218, 4, 7, 0,219, 4, 7, 0,220, 4, 7, 0,221, 4, 2, 0,222, 4, 2, 0, 87, 1, 2, 0,223, 4, + 2, 0,224, 4, 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 7, 0,229, 4, 7, 0,230, 4, 7, 0,231, 4, + 7, 0,232, 4, 7, 0,233, 4, 7, 0,234, 4, 7, 0,235, 4, 7, 0,236, 4, 7, 0,237, 4, 7, 0,238, 4, 7, 0,239, 4, + 7, 0,240, 4, 2, 0,241, 4, 2, 0,242, 4, 2, 0,243, 4, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, + 7, 0,248, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, + 7, 0, 0, 5, 7, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, + 2, 0, 8, 5, 2, 0, 18, 0, 7, 0, 9, 5, 7, 0, 10, 5, 31, 0, 80, 0, 46, 0,140, 1, 2, 0,141, 1, 2, 0, 76, 1, + 2, 0,181, 2, 25, 0,154, 0, 57, 0, 70, 1,197, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 4, 0,205, 3, 4, 0, 11, 5, + 4, 0, 18, 0, 2, 0, 12, 5, 2, 0, 13, 5, 27, 0,168, 0,198, 0, 13, 0, 11, 0, 14, 5, 11, 0, 15, 5, 4, 0, 16, 5, + 4, 0, 17, 5, 4, 0, 18, 5, 4, 0, 19, 5, 4, 0, 20, 5, 4, 0, 21, 5, 4, 0, 22, 5, 4, 0, 23, 5, 4, 0, 24, 5, + 4, 0, 27, 0, 0, 0, 25, 5,199, 0, 5, 0, 11, 0, 26, 5, 11, 0, 27, 5, 4, 0, 28, 5, 4, 0, 30, 0, 0, 0, 29, 5, +200, 0, 17, 0, 4, 0, 30, 5, 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, 4, 0, 34, 5, 4, 0, 35, 5, 4, 0, 36, 5, + 4, 0, 37, 5, 4, 0, 38, 5, 4, 0, 39, 5, 4, 0, 40, 5, 4, 0, 41, 5, 2, 0, 42, 5, 2, 0, 43, 5, 4, 0, 44, 5, + 4, 0, 45, 5, 4, 0, 67, 0,201, 0, 17, 0, 4, 0, 16, 0, 4, 0, 32, 5, 4, 0, 46, 5, 4, 0, 47, 5, 4, 0, 48, 5, + 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 7, 0, 52, 5, 4, 0, 53, 5, 4, 0, 92, 0, 4, 0, 54, 5, 4, 0, 55, 5, + 4, 0, 56, 5, 4, 0, 57, 5, 4, 0, 58, 5, 21, 0, 31, 0,202, 0, 9, 0, 4, 0, 59, 5, 7, 0, 60, 5, 7, 0, 61, 5, + 7, 0, 62, 5, 4, 0, 63, 5, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 84, 4, 7, 0, 30, 0,203, 0, 13, 0,203, 0, 0, 0, +203, 0, 1, 0, 0, 0, 19, 0, 63, 0, 64, 5, 64, 0, 65, 5, 4, 0,205, 3, 4, 0, 66, 5, 4, 0, 67, 5, 4, 0, 68, 5, + 4, 0, 69, 5, 4, 0, 70, 5, 4, 0, 71, 5, 4, 0, 27, 0,204, 0, 13, 0, 0, 0, 72, 5, 0, 0,250, 0, 0, 0, 73, 5, + 0, 0, 18, 0, 0, 0, 74, 5, 0, 0, 75, 5, 0, 0, 76, 5, 0, 0, 77, 5, 2, 0, 78, 5, 2, 0, 79, 5, 7, 0, 80, 5, + 0, 0, 81, 5, 0, 0,124, 0,205, 0,106, 0,204, 0, 82, 5,198, 0, 83, 5,199, 0, 84, 5,200, 0, 85, 5,201, 0, 86, 5, + 4, 0, 36, 3, 4, 0,129, 0, 4, 0,132, 4, 7, 0, 87, 5, 4, 0, 88, 5, 4, 0, 89, 5, 4, 0, 90, 5, 4, 0, 91, 5, + 2, 0, 18, 0, 2, 0, 92, 5, 7, 0, 93, 5, 7, 0, 94, 5, 7, 0, 95, 5, 7, 0, 96, 5, 7, 0, 97, 5, 2, 0, 98, 5, + 2, 0, 99, 5, 2, 0,100, 5, 2, 0,101, 5, 2, 0,250, 0, 2, 0,102, 5, 4, 0,103, 5, 2, 0,104, 5, 2, 0,105, 5, + 2, 0,109, 1, 2, 0,108, 0, 2, 0,106, 5, 2, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5, 2, 0, 73, 5, + 2, 0, 72, 5, 2, 0,111, 5, 2, 0, 74, 5, 2, 0,112, 5, 4, 0,113, 5, 4, 0, 87, 1, 4, 0,114, 5, 2, 0,115, 5, + 2, 0, 67, 0, 2, 0,116, 5, 2, 0,117, 5, 2, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 2, 0,121, 5, 19, 0,122, 5, + 19, 0,123, 5, 18, 0,124, 5, 14, 0,125, 5, 2, 0,126, 5, 2, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5, + 7, 0,131, 5, 4, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, 7, 0,135, 5, 7, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, + 2, 0,139, 5, 2, 0,140, 5, 2, 0,141, 5, 2, 0,142, 5, 7, 0,143, 5, 7, 0,144, 5, 7, 0,145, 5, 0, 0,146, 5, + 4, 0,147, 5, 2, 0,148, 5, 2, 0,247, 1, 0, 0,149, 5, 7, 0,150, 5, 7, 0,151, 5, 0, 0,152, 5, 0, 0,153, 5, + 0, 0,154, 5, 0, 0,155, 5, 4, 0,156, 5, 2, 0,157, 5, 2, 0,158, 5, 7, 0,159, 5, 7, 0,160, 5, 2, 0,161, 5, + 2, 0,162, 5, 7, 0,163, 5, 2, 0,164, 5, 2, 0,165, 5, 4, 0,166, 5, 2, 0,167, 5, 2, 0,168, 5, 2, 0,169, 5, + 2, 0,170, 5, 7, 0,171, 5, 7, 0, 30, 0, 37, 0,172, 5, 0, 0,173, 5,206, 0, 9, 0,206, 0, 0, 0,206, 0, 1, 0, + 0, 0,174, 5, 2, 0,175, 5, 2, 0,176, 5, 2, 0,177, 5, 2, 0, 67, 0, 7, 0,178, 5, 7, 0, 30, 0,207, 0, 7, 0, + 2, 0,231, 2, 2, 0, 87, 1, 2, 0, 94, 3, 2, 0,179, 5, 7, 0,180, 5, 7, 0, 30, 0, 37, 0,181, 5,208, 0, 5, 0, + 7, 0,182, 5, 0, 0, 16, 0, 0, 0, 67, 0, 0, 0, 30, 0, 0, 0,247, 1,209, 0, 15, 0, 7, 0,183, 5, 7, 0,184, 5, + 7, 0,185, 5, 7, 0,186, 5, 7, 0,187, 5, 7, 0,188, 5, 7, 0,189, 5, 7, 0,190, 5, 7, 0,191, 5, 7, 0,192, 5, + 4, 0,193, 5, 7, 0,194, 5, 7, 0,195, 5, 2, 0, 67, 0, 2, 0, 30, 0,210, 0, 32, 0,208, 0,196, 5, 2, 0,197, 5, + 2, 0, 99, 5, 2, 0,100, 5, 2, 0,101, 5, 2, 0,250, 0, 2, 0,102, 5, 2, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, + 2, 0,201, 5,207, 0,202, 5, 2, 0,203, 5, 2, 0,104, 5, 7, 0,204, 5,209, 0,205, 5, 7, 0,220, 4, 7, 0,221, 4, + 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,206, 5, 2, 0,223, 4, 2, 0,224, 4, 2, 0,207, 5, 2, 0, 27, 0, 2, 0,225, 4, + 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 2, 0,208, 5, 2, 0, 67, 0, 7, 0,209, 5,211, 0, 6, 0,211, 0, 0, 0, +211, 0, 1, 0, 4, 0, 61, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,210, 5,212, 0, 4, 0,213, 0,146, 3, 11, 0,211, 5, + 0, 0,212, 5, 4, 0, 92, 0,214, 0, 8, 0,212, 0,213, 5, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0,214, 5, 2, 0,215, 5, + 2, 0,216, 5, 4, 0, 67, 0, 11, 0,217, 5,215, 0, 6, 0, 2, 0,108, 0, 2, 0, 67, 4, 2, 0,218, 5, 2, 0,225, 2, + 4, 0, 18, 0, 7, 0,209, 2,216, 0, 14, 0, 2, 0, 18, 0, 2, 0,219, 5, 2, 0,220, 5, 2, 0,221, 5,215, 0,222, 5, + 11, 0,217, 5, 7, 0,223, 5, 7, 0, 56, 0, 4, 0,224, 5, 4, 0,225, 5, 4, 0,226, 5, 4, 0,227, 5, 41, 0,125, 0, + 27, 0,168, 0,217, 0, 14, 0,212, 0,213, 5, 4, 0, 92, 0, 4, 0,228, 5, 7, 0,229, 5, 7, 0,230, 5, 7, 0,231, 5, + 4, 0,232, 5, 4, 0,233, 5, 7, 0,234, 5, 7, 0,235, 5, 4, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, 4, 0, 27, 0, +218, 0, 1, 0,212, 0,213, 5,219, 0, 7, 0,212, 0,213, 5, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0, 37, 0, 4, 0,239, 5, + 91, 0,240, 5, 11, 0,217, 5,220, 0, 5, 0,220, 0, 0, 0,220, 0, 1, 0, 0, 0, 19, 0, 7, 0,241, 5, 4, 0, 27, 0, +221, 0, 6, 0, 4, 0,108, 0, 7, 0,242, 5, 7, 0,178, 1, 7, 0, 40, 2, 4, 0, 18, 0, 4, 0, 27, 0,222, 0, 85, 0, +219, 0,243, 5,219, 0,244, 5,217, 0,169, 3,218, 0,245, 5, 7, 0,246, 5, 2, 0,247, 5, 2, 0,247, 1, 7, 0,248, 5, + 7, 0,249, 5, 2, 0, 67, 4, 2, 0,250, 5, 7, 0,251, 5, 7, 0,252, 5, 7, 0,253, 5, 2, 0,254, 5, 2, 0,224, 5, + 2, 0,255, 5, 2, 0, 0, 6, 2, 0, 1, 6, 2, 0, 2, 6, 7, 0, 3, 6, 7, 0, 4, 6, 7, 0, 5, 6, 2, 0, 6, 6, + 2, 0, 7, 6, 2, 0, 8, 6, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6, 2, 0, 12, 6, 2, 0, 13, 6,214, 0, 14, 6, +216, 0, 15, 6, 7, 0, 16, 6, 7, 0, 17, 6, 7, 0, 18, 6, 2, 0, 19, 6, 2, 0, 20, 6, 0, 0, 21, 6, 0, 0, 22, 6, + 2, 0, 23, 6, 7, 0, 24, 6, 7, 0, 25, 6, 7, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, 7, 0, 30, 6, + 7, 0, 31, 6, 7, 0, 32, 6, 7, 0, 33, 6, 2, 0, 34, 6, 0, 0, 35, 6, 0, 0, 36, 6, 0, 0, 37, 6, 0, 0, 38, 6, + 27, 0, 39, 6, 0, 0, 40, 6, 0, 0, 41, 6, 0, 0, 42, 6, 0, 0, 43, 6, 0, 0, 44, 6, 0, 0, 45, 6, 0, 0, 46, 6, + 0, 0, 47, 6, 0, 0, 48, 6, 0, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 52, 6, 2, 0, 53, 6, 0, 0, 54, 6, + 0, 0, 55, 6, 0, 0, 56, 6, 0, 0, 57, 6, 4, 0, 58, 6, 4, 0, 59, 6, 4, 0, 60, 6, 4, 0, 61, 6, 2, 0, 62, 6, + 2, 0, 67, 0, 4, 0, 63, 6, 7, 0, 64, 6, 7, 0, 65, 6,221, 0, 66, 6,223, 0, 8, 0, 4, 0, 67, 6, 4, 0, 68, 6, + 4, 0, 69, 6, 4, 0, 70, 6, 4, 0, 71, 6, 4, 0, 72, 6, 4, 0, 53, 0, 4, 0,138, 2,224, 0, 4, 0, 7, 0, 73, 6, + 0, 0, 74, 6, 0, 0, 75, 6, 2, 0, 18, 0,225, 0, 4, 0, 7, 0, 76, 6, 4, 0, 18, 0, 4, 0, 77, 6, 4, 0, 56, 0, + 41, 0, 46, 0, 22, 0, 32, 0, 34, 0, 75, 0, 27, 0,210, 5,196, 0, 78, 6, 41, 0, 79, 6, 14, 0, 80, 6,197, 0, 81, 6, + 27, 0, 82, 6, 7, 0, 83, 6, 7, 0, 84, 6, 7, 0, 85, 6, 7, 0, 86, 6, 4, 0,205, 3, 4, 0, 87, 6, 4, 0, 88, 6, + 2, 0, 18, 0, 2, 0, 76, 1, 57, 0, 70, 1,226, 0, 89, 6,222, 0, 90, 6,227, 0, 91, 6,205, 0,185, 0,202, 0, 92, 6, + 14, 0,102, 0, 14, 0, 93, 6, 11, 0, 94, 6, 11, 0, 95, 6, 11, 0, 96, 6, 11, 0, 97, 6, 11, 0, 98, 6,228, 0, 99, 6, + 2, 0,100, 6, 2, 0,101, 6, 2, 0,251, 0, 2, 0,206, 3, 4, 0,216, 3, 4, 0,102, 6, 14, 0,103, 6,208, 0,196, 5, +210, 0,104, 6,224, 0,105, 6,178, 0,182, 3,225, 0,106, 6,229, 0,107, 6, 10, 0, 7, 4, 10, 0,108, 6,230, 0, 14, 0, +230, 0, 0, 0,230, 0, 1, 0, 42, 0,242, 0, 40, 0, 69, 1,229, 0,107, 6,231, 0,109, 6, 7, 0, 97, 2, 7, 0, 98, 2, + 7, 0,108, 0, 7, 0,110, 6, 2, 0,111, 6, 2, 0, 18, 0, 2, 0,143, 0, 2, 0, 27, 0,232, 0, 39, 0, 7, 0,112, 6, + 7, 0,113, 6, 7, 0,114, 6, 7, 0,115, 6, 7, 0,116, 6, 7, 0,117, 6, 7, 0,118, 6, 7, 0,119, 6, 7, 0,120, 6, + 68, 0,121, 6,178, 0,182, 3,232, 0,122, 6,233, 0,123, 6,234, 0,124, 6,235, 0,125, 6,236, 0,126, 6,237, 0,127, 6, + 7, 0,128, 6, 7, 0,129, 6, 7, 0, 94, 1, 7, 0,130, 6, 7, 0,131, 6, 7, 0,132, 6, 7, 0,133, 6, 7, 0,175, 0, + 7, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,111, 6, 0, 0,137, 6, 2, 0,138, 6, 2, 0,139, 6, 7, 0,140, 6, + 2, 0,141, 6, 2, 0,142, 6, 7, 0,143, 6, 7, 0,144, 6, 7, 0,145, 6, 7, 0,146, 6,238, 0, 51, 0,239, 0, 0, 0, +239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 7, 0,129, 6, 7, 0, 94, 1, 7, 0,151, 6, + 2, 0,152, 6, 0, 0,211, 2, 4, 0,153, 6, 2, 0,136, 6, 2, 0,111, 6, 27, 0,210, 5, 27, 0,154, 6, 14, 0,155, 6, +230, 0,156, 6,238, 0,122, 6, 0, 0,157, 6, 4, 0,205, 3, 4, 0, 87, 6, 2, 0,158, 6, 2, 0,159, 6, 2, 0,160, 6, + 2, 0,161, 6, 2, 0, 18, 0, 2, 0, 32, 2, 7, 0,114, 0, 7, 0,162, 6, 7, 0,163, 6, 7, 0,164, 6, 7, 0,175, 0, + 7, 0, 83, 6, 2, 0,165, 6, 2, 0,166, 6, 2, 0,167, 6, 0, 0,168, 6, 0, 0,169, 6, 0, 0,170, 6, 0, 0,171, 6, + 0, 0,172, 6, 14, 0,173, 6, 14, 0,174, 6, 14, 0,175, 6, 2, 0,176, 6, 2, 0,152, 2, 2, 0,177, 6, 0, 0,178, 6, + 11, 0,179, 6,178, 0,182, 3,240, 0, 24, 0, 19, 0, 37, 0, 19, 0, 63, 0, 18, 0,180, 6, 18, 0,181, 6, 18, 0,182, 6, + 7, 0,183, 6, 7, 0,184, 6, 7, 0,185, 6, 7, 0,186, 6, 2, 0,187, 6, 2, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6, + 2, 0,191, 6, 2, 0, 18, 0, 2, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 2, 0,161, 6, + 7, 0,197, 6, 4, 0,198, 6, 4, 0,199, 6,239, 0, 6, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, + 7, 0,149, 6, 2, 0,150, 6,241, 0, 8, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, + 2, 0,150, 6, 0, 0,200, 6, 0, 0,124, 0,242, 0, 14, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, + 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6,243, 0,202, 6, 14, 0,203, 6, 2, 0, 87, 1, 2, 0,204, 6, 4, 0, 18, 0, + 7, 0,205, 6, 4, 0,161, 6,244, 0, 21, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, + 2, 0,150, 6,240, 0,201, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, 2, 0,209, 6, 2, 0,192, 6, 2, 0,210, 6, + 2, 0,211, 6, 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 73, 2, 4, 0,212, 6, 4, 0,213, 6, 22, 0,214, 6, 11, 0,215, 6, +245, 0, 18, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6, + 7, 0, 97, 2, 7, 0, 98, 2, 2, 0,206, 6, 2, 0,216, 6, 2, 0,217, 6, 2, 0,218, 6, 4, 0, 18, 0, 7, 0,219, 6, + 4, 0,111, 6, 4, 0, 27, 0,178, 0,182, 3,246, 0, 16, 0, 0, 0,220, 6, 0, 0,221, 6, 0, 0,222, 6, 0, 0,223, 6, + 0, 0,224, 6, 0, 0,225, 6, 4, 0,226, 6, 4, 0,227, 6, 4, 0,228, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,229, 6, + 2, 0,230, 6, 2, 0,190, 1, 2, 0,231, 6, 0, 0,232, 6,247, 0, 16, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, + 4, 0,148, 6, 4, 0,233, 6,246, 0,234, 6,248, 0,235, 6, 14, 0,236, 6, 14, 0,237, 6,249, 0,238, 6,237, 0,239, 6, +250, 0,240, 6, 2, 0,241, 6, 2, 0,242, 6, 2, 0,243, 6, 2, 0, 30, 0,251, 0, 15, 0,239, 0, 0, 0,239, 0, 1, 0, + 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6, 14, 0,244, 6,252, 0,245, 6, 0, 0,246, 6, +253, 0,247, 6, 2, 0, 18, 0, 2, 0,248, 6, 2, 0,249, 6, 2, 0,250, 6,254, 0, 25, 0,239, 0, 0, 0,239, 0, 1, 0, + 14, 0,147, 6, 4, 0,148, 6, 4, 0, 18, 0, 42, 0,244, 2, 40, 0, 69, 1, 54, 0,251, 6,255, 0,252, 6, 0, 1,253, 6, +178, 0,182, 3, 7, 0,254, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,219, 6, 7, 0,255, 6, 7, 0, 0, 7, 2, 0, 1, 7, + 2, 0, 27, 0, 2, 0, 2, 7, 2, 0, 3, 7, 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0,161, 6, 1, 1, 11, 0, +239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 2, 0,204, 6, 2, 0, 18, 0, + 4, 0, 27, 0,243, 0,202, 6,240, 0,201, 6, 2, 1, 31, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, + 7, 0,149, 6, 2, 0,150, 6, 37, 0, 7, 7, 4, 0, 8, 7, 4, 0, 9, 7, 2, 0, 92, 0, 2, 0, 10, 7, 2, 0, 11, 7, + 0, 0, 12, 7, 0, 0, 13, 7, 4, 0, 14, 7, 4, 0, 15, 7, 4, 0, 16, 7, 2, 0, 17, 7, 2, 0, 18, 7, 2, 0, 19, 7, + 2, 0, 20, 7, 7, 0, 21, 7, 18, 0, 22, 7, 18, 0, 23, 7, 4, 0, 24, 7, 4, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7, + 2, 0, 28, 7, 0, 0,211, 2, 11, 0, 29, 7, 3, 1, 10, 0, 22, 0, 32, 0, 11, 0, 30, 7, 11, 0, 31, 7, 11, 0, 32, 7, + 11, 0, 33, 7, 11, 0, 34, 7, 4, 0, 92, 0, 4, 0, 35, 7, 0, 0, 36, 7, 0, 0, 37, 7, 4, 1, 10, 0,239, 0, 0, 0, +239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 3, 1, 38, 7, 2, 0, 92, 0, 2, 0, 10, 7, 4, 0, 67, 0, + 11, 0, 39, 7, 5, 1, 3, 0, 5, 1, 0, 0, 5, 1, 1, 0, 7, 0, 40, 7, 6, 1, 9, 0,239, 0, 0, 0,239, 0, 1, 0, + 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6,240, 0,201, 6, 14, 0, 41, 7, 4, 0, 42, 7, 4, 0, 18, 0, 7, 1, 27, 0, +239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6, 22, 0, 43, 7, + 22, 0, 81, 0, 2, 0, 18, 0, 2, 0, 67, 0, 7, 0, 44, 7, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,219, 6, 7, 0, 45, 7, + 7, 0, 46, 7, 7, 0, 47, 7, 57, 0, 70, 1, 57, 0, 48, 7, 4, 0, 49, 7, 2, 0, 50, 7, 2, 0, 51, 7, 2, 0,251, 0, + 2, 0, 86, 1, 14, 0, 52, 7,178, 0,182, 3, 8, 1, 10, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, + 7, 0,149, 6, 2, 0,150, 6, 2, 0, 18, 0, 2, 0,214, 3, 4, 0, 27, 0,178, 0,182, 3, 9, 1, 7, 0, 9, 1, 0, 0, + 9, 1, 1, 0, 4, 0, 53, 7, 4, 0, 22, 0, 0, 0, 86, 0, 4, 0, 54, 7, 4, 0, 16, 0, 10, 1, 14, 0,239, 0, 0, 0, +239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 4, 0, 11, 7, 4, 0, 27, 0, 14, 0, 55, 7, + 14, 0, 56, 7, 0, 0, 57, 7, 0, 0, 58, 7, 4, 0, 59, 7, 4, 0, 60, 7, 11, 1, 6, 0,239, 0, 0, 0,239, 0, 1, 0, + 14, 0,147, 6, 4, 0,148, 6, 4, 0, 27, 0, 0, 0, 61, 7, 12, 1, 25, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, + 4, 0,148, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0, 62, 7, 7, 0, 63, 7, 7, 0,219, 6,231, 0, 64, 7,229, 0,107, 6, + 13, 1,252, 6, 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,111, 6, 4, 0, 65, 7, 7, 0, 66, 7, 7, 0,148, 3, 7, 0, 94, 3, + 4, 0, 27, 0, 7, 0, 67, 7, 7, 0, 68, 7, 4, 0, 69, 7, 4, 0, 30, 0, 11, 0, 70, 7, 14, 1, 7, 0, 14, 1, 0, 0, + 14, 1, 1, 0, 0, 0, 71, 7, 2, 0, 72, 7, 2, 0, 73, 7, 2, 0, 74, 7, 2, 0, 27, 0, 15, 1, 12, 0, 2, 0, 73, 7, + 2, 0, 75, 7, 2, 0, 76, 7, 0, 0,211, 2, 2, 0, 77, 7, 2, 0, 78, 7, 2, 0, 79, 7, 2, 0, 80, 7, 2, 0, 81, 7, + 2, 0,192, 6, 7, 0, 82, 7, 7, 0, 83, 7, 16, 1, 18, 0, 16, 1, 0, 0, 16, 1, 1, 0, 0, 0, 19, 0, 15, 1, 84, 7, + 15, 1, 85, 7, 15, 1, 86, 7, 15, 1, 87, 7, 7, 0, 88, 7, 2, 0, 89, 7, 2, 0, 90, 7, 2, 0, 91, 7, 2, 0, 92, 7, + 2, 0, 93, 7, 2, 0, 94, 7, 2, 0, 95, 7, 2, 0, 96, 7, 2, 0, 97, 7, 2, 0, 27, 0, 17, 1, 10, 0, 0, 0, 98, 7, + 0, 0, 99, 7, 0, 0,100, 7, 0, 0,101, 7, 0, 0,102, 7, 0, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 2, 0,106, 7, + 2, 0,107, 7, 18, 1, 8, 0, 0, 0,108, 7, 0, 0,109, 7, 0, 0,110, 7, 0, 0,111, 7, 0, 0,112, 7, 0, 0,113, 7, + 7, 0,110, 6, 7, 0, 27, 0, 19, 1, 3, 0, 0, 0,114, 7, 2, 0,115, 7, 2, 0, 27, 0, 20, 1, 22, 0, 17, 1,116, 7, 17, 1,117, 7, 17, 1,118, 7, 17, 1,119, 7, 17, 1,120, 7, 17, 1,121, 7, 17, 1,122, 7, 17, 1,123, 7, 17, 1,124, 7, - 17, 1,125, 7, 17, 1,126, 7, 17, 1,127, 7, 17, 1,128, 7, 17, 1,129, 7, 17, 1,130, 7, 18, 1,131, 7, 19, 1,132, 7, - 0, 0,133, 7, 7, 0,134, 7, 7, 0, 27, 0, 21, 1,122, 0, 0, 0,135, 7, 0, 0,136, 7, 0, 0,100, 7, 0, 0,137, 7, - 0, 0,112, 7, 0, 0,138, 7, 0, 0,139, 7, 0, 0,140, 7, 0, 0,141, 7, 0, 0,142, 7, 0, 0,143, 7, 0, 0,144, 7, + 17, 1,125, 7, 17, 1,126, 7, 17, 1,127, 7, 17, 1,128, 7, 17, 1,129, 7, 17, 1,130, 7, 17, 1,131, 7, 17, 1,132, 7, + 18, 1,133, 7, 19, 1,134, 7, 0, 0,135, 7, 7, 0,136, 7, 7, 0, 27, 0, 21, 1,122, 0, 0, 0,137, 7, 0, 0,138, 7, + 0, 0,102, 7, 0, 0,139, 7, 0, 0,114, 7, 0, 0,140, 7, 0, 0,141, 7, 0, 0,142, 7, 0, 0,143, 7, 0, 0,144, 7, 0, 0,145, 7, 0, 0,146, 7, 0, 0,147, 7, 0, 0,148, 7, 0, 0,149, 7, 0, 0,150, 7, 0, 0,151, 7, 0, 0,152, 7, 0, 0,153, 7, 0, 0,154, 7, 0, 0,155, 7, 0, 0,156, 7, 0, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, 0, 0,160, 7, 0, 0,161, 7, 0, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, 0, 0,165, 7, 0, 0,166, 7, 0, 0,167, 7, 0, 0,168, 7, @@ -10842,361 +11303,363 @@ char datatoc_startup_blend[] = { 0, 0,225, 7, 0, 0,226, 7, 0, 0,227, 7, 0, 0,228, 7, 0, 0,229, 7, 0, 0,230, 7, 0, 0,231, 7, 0, 0,232, 7, 0, 0,233, 7, 0, 0,234, 7, 0, 0,235, 7, 0, 0,236, 7, 0, 0,237, 7, 0, 0,238, 7, 0, 0,239, 7, 0, 0,240, 7, 0, 0,241, 7, 0, 0,242, 7, 0, 0,243, 7, 0, 0,244, 7, 0, 0,245, 7, 0, 0,246, 7, 0, 0,247, 7, 0, 0,248, 7, - 0, 0,249, 7, 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7, 0, 0,254, 7, 22, 1, 5, 0, 0, 0,255, 7, - 0, 0,158, 7, 0, 0,164, 7, 2, 0, 18, 0, 2, 0, 27, 0, 23, 1, 24, 0, 23, 1, 0, 0, 23, 1, 1, 0, 0, 0,172, 5, - 20, 1, 0, 8, 21, 1, 1, 8, 21, 1, 2, 8, 21, 1, 3, 8, 21, 1, 4, 8, 21, 1, 5, 8, 21, 1, 6, 8, 21, 1, 7, 8, + 0, 0,249, 7, 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7, 0, 0,254, 7, 0, 0,255, 7, 0, 0, 0, 8, + 22, 1, 5, 0, 0, 0, 1, 8, 0, 0,160, 7, 0, 0,166, 7, 2, 0, 18, 0, 2, 0, 27, 0, 23, 1, 24, 0, 23, 1, 0, 0, + 23, 1, 1, 0, 0, 0,174, 5, 20, 1, 2, 8, 21, 1, 3, 8, 21, 1, 4, 8, 21, 1, 5, 8, 21, 1, 6, 8, 21, 1, 7, 8, 21, 1, 8, 8, 21, 1, 9, 8, 21, 1, 10, 8, 21, 1, 11, 8, 21, 1, 12, 8, 21, 1, 13, 8, 21, 1, 14, 8, 21, 1, 15, 8, - 21, 1, 16, 8, 21, 1, 17, 8, 22, 1, 18, 8, 4, 0, 19, 8, 4, 0, 27, 0, 24, 1, 3, 0, 24, 1, 0, 0, 24, 1, 1, 0, - 0, 0, 20, 8, 25, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0,151, 2, 7, 0, 21, 8, 7, 0, 47, 2, 26, 1, 95, 0, - 4, 0, 18, 0, 4, 0, 22, 8, 4, 0, 23, 8, 0, 0, 24, 8, 0, 0, 25, 8, 0, 0, 26, 8, 0, 0, 27, 8, 0, 0, 28, 8, - 0, 0, 29, 8, 0, 0, 30, 8, 0, 0, 31, 8, 0, 0, 32, 8, 0, 0, 33, 8, 4, 0, 34, 8, 2, 0, 35, 8, 2, 0, 36, 8, - 2, 0, 37, 8, 2, 0, 38, 8, 4, 0, 39, 8, 4, 0, 40, 8, 4, 0, 41, 8, 4, 0, 42, 8, 2, 0, 43, 8, 2, 0, 44, 8, - 4, 0, 45, 8, 4, 0, 46, 8, 4, 0, 47, 8, 4, 0, 48, 8, 4, 0, 49, 8, 4, 0, 53, 7, 4, 0, 50, 8, 2, 0, 51, 8, - 2, 0, 52, 8, 2, 0, 53, 8, 2, 0, 54, 8, 14, 0, 55, 8, 14, 0, 56, 8, 14, 0, 57, 8, 14, 0, 58, 8, 14, 0, 59, 8, - 14, 0, 60, 8, 0, 0, 61, 8, 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 2, 0, 65, 8, 2, 0, 66, 8, 2, 0, 67, 8, - 2, 0, 68, 8, 2, 0, 69, 8, 25, 1, 70, 8, 2, 0, 71, 8, 2, 0, 72, 8, 2, 0, 73, 8, 2, 0, 74, 8, 2, 0, 75, 8, - 2, 0, 76, 8, 2, 0, 77, 8, 2, 0, 78, 8, 4, 0, 79, 8, 4, 0, 80, 8, 2, 0, 81, 8, 2, 0, 82, 8, 2, 0, 83, 8, + 21, 1, 16, 8, 21, 1, 17, 8, 21, 1, 18, 8, 21, 1, 19, 8, 22, 1, 20, 8, 4, 0, 21, 8, 4, 0, 27, 0, 24, 1, 3, 0, + 24, 1, 0, 0, 24, 1, 1, 0, 0, 0, 22, 8, 25, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0,151, 2, 7, 0, 23, 8, + 7, 0, 47, 2, 26, 1, 95, 0, 4, 0, 18, 0, 4, 0, 24, 8, 4, 0, 25, 8, 0, 0, 26, 8, 0, 0, 27, 8, 0, 0, 28, 8, + 0, 0, 29, 8, 0, 0, 30, 8, 0, 0, 31, 8, 0, 0, 32, 8, 0, 0, 33, 8, 0, 0, 34, 8, 0, 0, 35, 8, 4, 0, 36, 8, + 2, 0, 37, 8, 2, 0, 38, 8, 2, 0, 39, 8, 2, 0, 40, 8, 4, 0, 41, 8, 4, 0, 42, 8, 4, 0, 43, 8, 4, 0, 44, 8, + 2, 0, 45, 8, 2, 0, 46, 8, 4, 0, 47, 8, 4, 0, 48, 8, 4, 0, 49, 8, 4, 0, 50, 8, 4, 0, 51, 8, 4, 0, 55, 7, + 4, 0, 52, 8, 2, 0, 53, 8, 2, 0, 54, 8, 2, 0, 55, 8, 2, 0, 56, 8, 14, 0, 57, 8, 14, 0, 58, 8, 14, 0, 59, 8, + 14, 0, 60, 8, 14, 0, 61, 8, 14, 0, 62, 8, 0, 0, 63, 8, 2, 0, 64, 8, 2, 0, 65, 8, 2, 0, 66, 8, 2, 0, 67, 8, + 2, 0, 68, 8, 2, 0, 69, 8, 2, 0, 70, 8, 2, 0, 71, 8, 25, 1, 72, 8, 2, 0, 73, 8, 2, 0, 74, 8, 2, 0, 75, 8, + 2, 0, 76, 8, 2, 0, 77, 8, 2, 0, 78, 8, 2, 0, 79, 8, 2, 0, 80, 8, 4, 0, 81, 8, 4, 0, 82, 8, 2, 0, 83, 8, 2, 0, 84, 8, 2, 0, 85, 8, 2, 0, 86, 8, 2, 0, 87, 8, 2, 0, 88, 8, 2, 0, 89, 8, 2, 0, 90, 8, 2, 0, 91, 8, - 2, 0, 92, 8, 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8, 2, 0, 97, 8, 2, 0, 98, 8, 7, 0, 99, 8, - 4, 0,100, 8, 7, 0,101, 8, 2, 0, 17, 6, 2, 0, 18, 6, 2, 0,102, 8, 2, 0,103, 8, 50, 0,104, 8, 7, 0,105, 8, - 2, 0,106, 8, 2, 0,247, 1, 0, 0,107, 8, 4, 0,108, 8, 4, 0,109, 8, 7, 0,110, 8, 7, 0, 27, 0, 27, 1, 24, 0, - 22, 0, 32, 0, 14, 0,111, 8, 14, 0,112, 8, 14, 0,113, 8, 14, 0,145, 6, 41, 0,125, 0, 41, 0,114, 8, 4, 0,115, 8, - 4, 0, 67, 0, 2, 0,116, 8, 2, 0,117, 8, 2, 0,118, 8, 2, 0,119, 8, 2, 0,120, 8, 2, 0,121, 8, 2, 0,122, 8, - 2, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, 2, 0,126, 8, 2, 0, 27, 0,237, 0,127, 8, 11, 0,128, 8, 2, 0,129, 8, - 28, 1, 5, 0, 28, 1, 0, 0, 28, 1, 1, 0, 28, 1,130, 8, 15, 0,131, 8, 4, 0, 18, 0, 29, 1, 7, 0, 29, 1, 0, 0, - 29, 1, 1, 0, 28, 1,132, 8, 28, 1,133, 8, 2, 0,121, 5, 2, 0, 18, 0, 4, 0, 27, 0, 30, 1, 25, 0, 30, 1, 0, 0, - 30, 1, 1, 0, 31, 1,134, 8, 32, 1,238, 6, 0, 0,135, 8, 0, 0,136, 8, 0, 0,137, 8, 2, 0,138, 8, 2, 0,139, 8, - 2, 0,140, 8, 2, 0,141, 8, 2, 0,142, 8, 2, 0, 27, 0, 2, 0, 18, 0, 2, 0, 68, 7, 2, 0,143, 8, 2, 0,144, 8, - 4, 0,145, 8, 30, 1,146, 8, 11, 0,147, 8, 4, 0,148, 8, 4, 0,149, 8, 4, 0,150, 8, 4, 0,151, 8, 0, 0,152, 8, - 33, 1, 22, 0, 33, 1, 0, 0, 33, 1, 1, 0, 28, 1,132, 8, 28, 1,133, 8, 28, 1,153, 8, 28, 1,154, 8, 27, 1,155, 8, - 18, 0, 51, 0, 0, 0,146, 6, 0, 0,156, 8, 2, 0,191, 6, 2, 0,192, 6, 2, 0,157, 8, 2, 0, 27, 0, 2, 0,120, 8, - 2, 0, 52, 7, 2, 0, 18, 0, 34, 1,134, 8, 14, 0,158, 8, 14, 0,145, 6, 14, 0,159, 8, 14, 0,160, 8, 35, 1, 24, 0, - 35, 1, 0, 0, 35, 1, 1, 0,240, 0,199, 6, 18, 0,161, 8, 18, 0,162, 8, 2, 0,191, 6, 2, 0,192, 6, 2, 0,163, 8, - 2, 0,164, 8, 2, 0,165, 8, 2, 0, 18, 0, 7, 0, 93, 2, 2, 0,140, 8, 2, 0,141, 8, 2, 0,119, 8, 2, 0,166, 8, - 2, 0,124, 8, 2, 0, 86, 1, 36, 1,134, 8, 14, 0,167, 8, 14, 0,168, 8, 14, 0,159, 8, 0, 0,169, 8, 11, 0,170, 8, - 37, 1, 14, 0, 0, 0,171, 8, 2, 0,172, 8, 2, 0,173, 8, 2, 0,174, 8, 2, 0,175, 8, 2, 0,110, 5, 2, 0,176, 8, - 27, 1,177, 8, 41, 0,178, 8, 4, 0,179, 8, 4, 0,180, 8, 4, 0,181, 8, 4, 0, 27, 0, 0, 0, 69, 7, 38, 1, 3, 0, - 0, 0,182, 8, 4, 0,183, 8, 4, 0,184, 8, 39, 1, 4, 0, 4, 0, 6, 7, 4, 0,185, 8, 4, 0, 12, 7, 4, 0,186, 8, - 40, 1, 2, 0, 4, 0,187, 8, 4, 0,188, 8, 41, 1, 5, 0, 7, 0,189, 8, 7, 0,190, 8, 7, 0,191, 8, 4, 0, 18, 0, - 4, 0, 27, 0, 42, 1, 7, 0, 0, 0,192, 8, 0, 0,220, 6, 44, 0,138, 0, 2, 0,193, 8, 2, 0, 72, 5, 2, 0,194, 8, - 2, 0,195, 8, 43, 1, 12, 0, 43, 1, 0, 0, 43, 1, 1, 0, 4, 0, 28, 0, 4, 0,196, 8, 4, 0,197, 8, 4, 0,198, 8, - 38, 1,199, 8, 0, 0,192, 8, 42, 1,176, 3, 39, 1,200, 8, 40, 1,201, 8, 41, 1,202, 8, 44, 1, 12, 0, 0, 0, 35, 0, - 11, 0,227, 0, 0, 0,228, 0, 4, 0,231, 0, 4, 0,239, 0, 11, 0,232, 0, 7, 0,234, 0, 7, 0,235, 0, 11, 0,203, 8, - 11, 0,204, 8, 11, 0,236, 0, 11, 0,238, 0, 45, 1, 50, 0, 45, 1, 0, 0, 45, 1, 1, 0, 11, 0,205, 8, 11, 0, 25, 0, - 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0, 4, 0, 90, 0, 4, 0,206, 8, 4, 0,207, 8, 4, 0,197, 8, - 4, 0,198, 8, 4, 0,208, 8, 4, 0,250, 0, 4, 0,209, 8, 4, 0,210, 8, 7, 0,211, 8, 7, 0,212, 8, 7, 0,213, 8, - 2, 0,214, 8, 2, 0,215, 8, 4, 0,216, 8, 4, 0,217, 8, 43, 1,218, 8, 31, 0, 80, 0, 41, 0,125, 0, 27, 0,219, 8, - 44, 0,138, 0,229, 0,105, 6, 7, 0,220, 8, 7, 0,221, 8, 44, 1, 71, 1, 45, 1,222, 8, 45, 1,223, 8, 45, 1,224, 8, - 14, 0,225, 8, 46, 1,226, 8, 11, 0,227, 8, 7, 0, 84, 4, 7, 0,228, 8, 7, 0,229, 8, 7, 0,230, 8, 11, 0,231, 8, - 4, 0,232, 8, 4, 0,233, 8, 4, 0,234, 8, 7, 0,235, 8, 4, 0,129, 0, 4, 0, 27, 0, 47, 1, 4, 0, 47, 1, 0, 0, - 47, 1, 1, 0, 14, 0,236, 8, 45, 1,237, 8,226, 0, 11, 0, 14, 0,238, 8, 14, 0,225, 8, 14, 0,239, 8, 45, 1,240, 8, - 0, 0,241, 8, 0, 0,242, 8, 4, 0,243, 8, 4, 0,244, 8, 4, 0,245, 8, 4, 0, 27, 0, 19, 0,246, 8, 48, 1, 4, 0, - 7, 0,247, 8, 7, 0, 94, 3, 2, 0,248, 8, 2, 0,249, 8, 49, 1, 6, 0, 7, 0,250, 8, 7, 0,251, 8, 7, 0,252, 8, - 7, 0,253, 8, 4, 0,254, 8, 4, 0,255, 8, 50, 1, 8, 0, 7, 0, 0, 9, 7, 0, 1, 9, 7, 0, 2, 9, 7, 0, 3, 9, - 7, 0, 4, 9, 4, 0,250, 2, 4, 0, 5, 9, 4, 0, 6, 9, 51, 1, 2, 0, 7, 0,180, 5, 7, 0, 27, 0, 52, 1, 5, 0, - 7, 0, 7, 9, 7, 0, 8, 9, 4, 0, 92, 0, 4, 0,212, 2, 4, 0, 9, 9, 53, 1, 6, 0, 53, 1, 0, 0, 53, 1, 1, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 10, 9, 2, 0, 56, 0, 54, 1, 8, 0, 54, 1, 0, 0, 54, 1, 1, 0, 2, 0, 16, 0, - 2, 0, 18, 0, 2, 0, 10, 9, 2, 0, 56, 0, 7, 0, 22, 0, 7, 0,129, 0, 55, 1, 45, 0, 55, 1, 0, 0, 55, 1, 1, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 10, 9, 2, 0,246, 0, 2, 0,126, 4, 2, 0, 11, 9, 7, 0, 12, 9, 7, 0, 91, 0, - 7, 0, 7, 3, 4, 0, 13, 9, 4, 0, 82, 0, 4, 0,214, 2, 7, 0, 14, 9, 7, 0, 15, 9, 7, 0, 16, 9, 7, 0, 17, 9, - 7, 0, 18, 9, 7, 0, 19, 9, 7, 0, 4, 3, 7, 0, 68, 1, 7, 0, 20, 9, 7, 0, 21, 9, 7, 0, 27, 0, 7, 0, 22, 9, - 7, 0, 23, 9, 7, 0, 24, 9, 2, 0, 25, 9, 2, 0, 26, 9, 2, 0, 27, 9, 2, 0, 28, 9, 2, 0, 29, 9, 2, 0, 30, 9, - 2, 0, 31, 9, 2, 0, 32, 9, 2, 0, 32, 2, 2, 0, 33, 9, 2, 0, 29, 2, 2, 0, 34, 9, 0, 0, 35, 9, 0, 0, 36, 9, - 7, 0,244, 0, 56, 1, 37, 9, 64, 0,250, 1, 57, 1, 16, 0, 57, 1, 0, 0, 57, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, - 2, 0, 10, 9, 2, 0,246, 0, 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2, 7, 0, 2, 3, 7, 0, 3, 3, - 7, 0, 38, 9, 7, 0, 4, 3, 7, 0, 6, 3, 7, 0, 7, 3,253, 0, 5, 0, 2, 0, 16, 0, 2, 0, 39, 9, 2, 0, 18, 0, - 2, 0, 40, 9, 22, 0, 41, 7,252, 0, 3, 0, 4, 0, 69, 0, 4, 0, 41, 9,253, 0, 2, 0, 58, 1, 7, 0, 58, 1, 0, 0, - 58, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 21, 0, 11, 0, 42, 9, 59, 1, 5, 0, 0, 0, 19, 0, - 7, 0, 94, 1, 7, 0, 43, 9, 4, 0, 44, 9, 4, 0, 27, 0, 60, 1, 4, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 67, 0, - 2, 0, 30, 0, 61, 1, 4, 0, 0, 0, 19, 0, 63, 0, 45, 9, 7, 0, 94, 1, 7, 0, 27, 0, 62, 1, 6, 0, 2, 0, 46, 9, - 2, 0, 47, 9, 2, 0, 16, 0, 2, 0, 48, 9, 0, 0, 49, 9, 0, 0, 50, 9, 63, 1, 5, 0, 4, 0, 16, 0, 4, 0, 27, 0, - 0, 0, 19, 0, 0, 0, 51, 9, 0, 0, 52, 9, 64, 1, 3, 0, 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 65, 1, 4, 0, - 2, 0, 53, 9, 2, 0, 54, 9, 2, 0, 18, 0, 2, 0, 27, 0, 66, 1, 6, 0, 0, 0, 19, 0, 0, 0, 55, 9, 2, 0, 56, 9, - 2, 0, 4, 3, 2, 0, 87, 1, 2, 0, 30, 0, 67, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 3, 7, 0,217, 4, 2, 0, 18, 0, - 2, 0,226, 2, 68, 1, 3, 0, 0, 0, 19, 0, 4, 0,214, 2, 4, 0, 53, 9, 69, 1, 7, 0, 0, 0, 19, 0, 7, 0,217, 4, - 0, 0, 57, 9, 0, 0, 58, 9, 2, 0, 87, 1, 2, 0, 67, 0, 4, 0, 59, 9, 70, 1, 4, 0, 0, 0, 60, 9, 0, 0, 61, 9, - 4, 0, 16, 0, 7, 0,230, 2, 71, 1, 3, 0, 27, 0, 62, 9, 0, 0, 63, 9, 0, 0, 64, 9, 72, 1, 18, 0, 72, 1, 0, 0, - 72, 1, 1, 0, 2, 0, 16, 0, 2, 0, 65, 9, 2, 0, 18, 0, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 68, 9, 2, 0, 67, 0, - 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 73, 1, 69, 9, 27, 0, 44, 0, 2, 0,216, 5, 2, 0,176, 2, 2, 0, 70, 9, - 2, 0, 27, 0, 74, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 71, 9, 2, 0, 18, 0, 2, 0,226, 2, 2, 0, 72, 9, - 4, 0, 73, 9, 4, 0, 74, 9, 4, 0, 75, 9, 4, 0, 76, 9, 4, 0, 77, 9, 75, 1, 1, 0, 0, 0, 78, 9, 76, 1, 4, 0, - 37, 0, 5, 7, 0, 0, 20, 8, 4, 0, 87, 1, 4, 0, 18, 0, 73, 1, 18, 0, 73, 1, 0, 0, 73, 1, 1, 0, 73, 1, 79, 9, - 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 80, 9, 2, 0, 68, 9, 2, 0, 65, 9, 2, 0, 81, 9, 2, 0, 30, 0, 2, 0,247, 1, - 0, 0, 19, 0, 11, 0, 2, 0, 77, 1, 69, 9, 72, 1, 82, 9, 2, 0, 14, 0, 2, 0, 83, 9, 4, 0, 84, 9, 78, 1, 3, 0, - 4, 0,240, 2, 4, 0, 27, 0, 27, 0, 44, 0, 79, 1, 15, 0,176, 0, 85, 9, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0, 12, 9, - 7, 0, 91, 0, 0, 0, 19, 0, 0, 0, 86, 9, 2, 0, 87, 9, 2, 0, 88, 9, 2, 0,134, 0, 2, 0, 89, 9, 2, 0, 90, 9, - 2, 0, 27, 0, 7, 0, 91, 9, 7, 0, 92, 9, 80, 1, 8, 0, 7, 0, 93, 9, 7, 0, 94, 9, 7, 0, 95, 9, 7, 0, 96, 9, - 7, 0, 97, 9, 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 81, 1, 13, 0, 2, 0, 18, 0, 2, 0,101, 9, 4, 0, 67, 0, - 4, 0, 30, 0, 2, 0,176, 6, 7, 0, 84, 4, 7, 0,228, 8, 46, 1,226, 8, 80, 1,102, 9, 2, 0, 16, 0, 2, 0,115, 5, - 2, 0,216, 3, 2, 0,103, 9, 82, 1, 11, 0, 4, 0,240, 2, 2, 0, 16, 0, 2, 0, 18, 0, 27, 0, 44, 0, 79, 0,104, 9, - 0, 0, 19, 0, 7, 0,105, 9, 7, 0,106, 9, 7, 0,222, 3, 2, 0,107, 9, 2, 0,108, 9, 83, 1, 5, 0, 2, 0, 16, 0, - 2, 0, 67, 0, 4, 0, 27, 0, 41, 0,125, 0, 27, 0,208, 5, 84, 1, 5, 0, 4, 0, 27, 0, 4, 0, 16, 0, 0, 0, 19, 0, - 0, 0, 51, 9, 27, 0, 44, 0, 85, 1, 13, 0, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 65, 9, 2, 0,223, 3, 7, 0,109, 9, - 7, 0,110, 9, 7, 0, 86, 1, 7, 0,111, 9, 7, 0,192, 3, 7, 0,196, 3, 7, 0,112, 9, 7, 0,113, 9, 27, 0,114, 9, - 86, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 12, 9, 7, 0, 91, 0, 0, 0, 19, 0, 0, 0, 86, 9, 2, 0, 67, 0, - 2, 0, 30, 0, 2, 0,247, 1, 2, 0,115, 5, 87, 1, 8, 0, 27, 0, 44, 0, 7, 0, 1, 3, 7, 0,115, 9, 7, 0,116, 9, - 7, 0,223, 3, 2, 0, 67, 0, 2, 0,226, 2, 7, 0, 30, 0, 88, 1, 12, 0, 2, 0, 16, 0, 2, 0, 87, 1, 2, 0, 18, 0, - 2, 0, 4, 3, 2, 0,240, 2, 2, 0,117, 9, 4, 0, 27, 0, 7, 0,118, 9, 7, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, - 0, 0,122, 9, 89, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 12, 9, 4, 0, 91, 0, 0, 0, 19, 0, 2, 0, 86, 1, - 2, 0, 63, 0, 2, 0,123, 9, 2, 0,124, 9, 90, 1, 7, 0, 4, 0,214, 2, 4, 0,125, 9, 4, 0,126, 9, 4, 0,127, 9, - 7, 0,128, 9, 7, 0,129, 9, 0, 0, 57, 9, 91, 1, 7, 0, 0, 0,130, 9, 27, 0,131, 9, 0, 0, 63, 9, 2, 0,132, 9, - 2, 0, 67, 0, 4, 0, 30, 0, 0, 0, 64, 9, 92, 1, 6, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 12, 9, 4, 0, 91, 0, - 0, 0,133, 9, 0, 0,134, 9, 93, 1, 1, 0, 4, 0, 18, 0, 94, 1, 6, 0, 0, 0, 94, 0, 2, 0, 16, 0, 2, 0, 18, 0, - 4, 0,135, 9, 7, 0,136, 9, 37, 0, 5, 7, 95, 1, 4, 0, 0, 0,181, 2, 2, 0, 18, 0, 4, 0, 16, 0, 27, 0, 44, 0, - 96, 1, 2, 0, 4, 0, 16, 0, 4, 0,180, 6, 97, 1, 8, 0, 0, 0, 60, 9, 0, 0, 61, 9, 4, 0, 16, 0, 7, 0, 40, 2, - 7, 0,137, 9, 7, 0, 27, 0, 27, 0, 70, 3, 27, 0,138, 9, 98, 1, 11, 0, 0, 0, 53, 6, 0, 0, 18, 0, 2, 0,139, 9, - 4, 0, 16, 0, 7, 0, 94, 1, 7, 0,140, 9, 7, 0,141, 9, 7, 0,142, 9, 4, 0,143, 9, 27, 0, 70, 3, 27, 0,144, 9, - 77, 1, 10, 0, 77, 1, 0, 0, 77, 1, 1, 0, 77, 1, 79, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 65, 9, 2, 0,145, 9, - 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 44, 0, 46, 1, 17, 0, 22, 0, 32, 0, 0, 0, 35, 0, 38, 0,153, 0, 11, 0,227, 0, - 38, 0,146, 9, 31, 0, 80, 0, 7, 0, 84, 4, 7, 0,147, 9, 7, 0,228, 8, 7, 0, 93, 9, 7, 0, 94, 9, 7, 0,148, 9, - 4, 0, 92, 0, 4, 0, 27, 0, 11, 0,149, 9, 11, 0,150, 9, 11, 0,151, 9, 99, 1, 6, 0, 99, 1, 0, 0, 99, 1, 1, 0, - 27, 0, 44, 0, 11, 0,152, 9, 2, 0,251, 0, 0, 0,211, 2, 64, 0, 4, 0, 22, 0, 32, 0, 14, 0,153, 9, 4, 0,134, 0, - 7, 0,154, 9,100, 1, 28, 0,100, 1, 0, 0,100, 1, 1, 0, 21, 0,155, 9,100, 1, 38, 0, 14, 0,156, 9, 0, 0, 19, 0, - 7, 0,157, 9, 7, 0,158, 9, 7, 0,159, 9, 7, 0,160, 9, 4, 0, 18, 0, 7, 0,161, 9, 7, 0,162, 9, 7, 0,163, 9, - 7, 0,164, 9, 7, 0, 94, 1, 7, 0, 40, 2, 7, 0,165, 9, 7, 0,212, 2, 7, 0,166, 9, 7, 0,167, 9, 7, 0,168, 9, - 7, 0,169, 9, 7, 0,170, 9, 7, 0,176, 0, 4, 0,134, 0, 2, 0,253, 5, 2, 0,171, 9,101, 1, 27, 0, 22, 0, 32, 0, - 34, 0, 75, 0, 14, 0,172, 9, 14, 0,173, 9, 14, 0,174, 9,100, 1,175, 9, 11, 0,176, 9, 11, 0,177, 9, 4, 0, 18, 0, - 4, 0,156, 6, 4, 0,178, 9, 4, 0, 27, 0, 2, 0, 8, 3, 2, 0,210, 6, 4, 0,179, 9, 4, 0,134, 0, 4, 0,180, 9, - 2, 0,181, 9, 2, 0,182, 9, 2, 0,183, 9, 2, 0,184, 9, 4, 0,185, 9, 4, 0,186, 9, 4, 0,187, 9, 4, 0,188, 9, - 4, 0,189, 9, 4, 0,190, 9,102, 1, 2, 0, 7, 0,165, 2, 4, 0, 18, 0,180, 0, 5, 0,102, 1,191, 9, 4, 0,212, 2, - 4, 0,192, 9, 4, 0,193, 9, 4, 0, 18, 0,179, 0, 16, 0, 4, 0,194, 9, 4, 0,195, 9, 4, 0,196, 9, 4, 0,197, 9, - 2, 0,198, 9, 2, 0,199, 9, 2, 0,200, 9, 2, 0,251, 0, 2, 0,201, 9, 2, 0,202, 9, 2, 0,203, 9, 2, 0,204, 9, - 4, 0,205, 9, 4, 0,206, 9, 4, 0,207, 9, 4, 0,208, 9,103, 1, 40, 0,103, 1, 0, 0,103, 1, 1, 0, 21, 0,155, 9, - 14, 0,251, 3, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,209, 9, 2, 0,209, 3, 2, 0,210, 9, 0, 0,211, 9, 0, 0,212, 9, - 0, 0,213, 9,100, 1,214, 9,103, 1, 38, 0,103, 1,215, 9, 14, 0,216, 9, 14, 0,217, 9,180, 0,184, 3, 27, 0,218, 9, -103, 1,219, 9, 7, 0, 77, 1, 7, 0,176, 0, 7, 0,220, 9, 7, 0, 19, 2, 7, 0,198, 3, 7, 0,200, 3, 2, 0,232, 3, - 2, 0, 27, 0, 7, 0,221, 9, 7, 0,222, 9, 7, 0,203, 3, 7, 0,223, 9, 7, 0,224, 9, 7, 0,225, 9, 7, 0,226, 9, - 7, 0,227, 9, 7, 0,228, 9, 7, 0,229, 9, 7, 0,230, 9, 11, 0,231, 9,177, 0, 16, 0, 14, 0,232, 9, 74, 0,233, 9, - 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,234, 9, 4, 0, 67, 0, 7, 0, 84, 0, 7, 0,235, 9, 7, 0,236, 9, 14, 0,237, 9, - 4, 0,238, 9, 4, 0,239, 9, 11, 0,240, 9, 11, 0,241, 9,179, 0,183, 3, 0, 0,242, 9,104, 1, 1, 0, 4, 0,239, 9, -105, 1, 12, 0, 4, 0,239, 9, 7, 0, 77, 9, 2, 0,243, 9, 2, 0,244, 9, 7, 0,245, 9, 7, 0,246, 9, 2, 0,247, 9, - 2, 0, 18, 0, 7, 0,248, 9, 7, 0,249, 9, 7, 0,250, 9, 7, 0,251, 9,106, 1, 7, 0,106, 1, 0, 0,106, 1, 1, 0, - 14, 0,252, 9, 4, 0, 18, 0, 4, 0,253, 9, 0, 0, 19, 0, 22, 1,254, 9,176, 0, 9, 0, 22, 0, 32, 0, 14, 0,255, 9, - 14, 0,232, 9, 14, 0, 0, 10, 14, 0,102, 0, 4, 0, 18, 0, 4, 0, 1, 10, 4, 0, 2, 10, 4, 0, 27, 0,243, 0, 8, 0, - 22, 0, 3, 10, 14, 0,232, 9, 64, 0, 4, 10, 0, 0, 5, 10, 4, 0, 6, 10, 4, 0, 18, 0, 4, 0, 7, 10, 4, 0, 27, 0, -107, 1, 13, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,145, 6, 4, 0,146, 6, 7, 0,147, 6, 2, 0,148, 6,240, 0,199, 6, -176, 0,179, 3,243, 0, 8, 10, 0, 0, 87, 1, 0, 0,202, 6, 2, 0, 18, 0, 7, 0, 9, 10,108, 1, 8, 0,108, 1, 0, 0, -108, 1, 1, 0,106, 1, 10, 10, 31, 0, 80, 0, 14, 0,185, 3, 4, 0, 18, 0, 0, 0, 19, 0, 4, 0,117, 8,109, 1, 5, 0, -109, 1, 0, 0,109, 1, 1, 0, 31, 0, 80, 0, 2, 0, 18, 0, 0, 0, 11, 10,110, 1, 14, 0,110, 1, 0, 0,110, 1, 1, 0, - 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 12, 10, 0, 0, 13, 10, 0, 0, 19, 0, 2, 0, 27, 0, 7, 0, 14, 10, - 7, 0, 15, 10, 31, 0, 80, 0, 7, 0, 16, 10, 7, 0, 17, 10,111, 1, 9, 0,111, 1, 0, 0,111, 1, 1, 0, 27, 0, 18, 10, - 0, 0, 11, 3, 7, 0, 19, 10, 2, 0, 20, 10, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 21, 10,112, 1, 7, 0, 37, 0, 5, 7, - 21, 0,155, 9, 4, 0, 18, 0, 4, 0, 22, 10, 14, 0, 23, 10, 27, 0, 18, 10, 0, 0, 11, 3,113, 1, 15, 0, 27, 0, 18, 10, - 2, 0, 24, 10, 2, 0, 18, 0, 2, 0, 25, 10, 2, 0, 26, 10, 0, 0, 11, 3, 27, 0, 27, 10, 0, 0, 28, 10, 7, 0, 29, 10, - 7, 0, 40, 2, 7, 0, 30, 10, 7, 0, 31, 10, 2, 0, 16, 0, 2, 0, 87, 1, 7, 0, 94, 1,114, 1, 6, 0, 27, 0, 18, 10, - 7, 0,191, 9, 2, 0, 32, 10, 2, 0, 33, 10, 2, 0, 18, 0, 2, 0, 34, 10,115, 1, 6, 0, 27, 0, 18, 10, 4, 0, 35, 10, - 4, 0, 36, 10, 4, 0, 92, 0, 4, 0, 27, 0, 0, 0, 11, 3,116, 1, 4, 0, 27, 0, 18, 10, 4, 0, 18, 0, 4, 0, 35, 10, - 0, 0, 11, 3,117, 1, 4, 0, 27, 0, 18, 10, 4, 0, 18, 0, 4, 0, 35, 10, 0, 0, 11, 3,118, 1, 4, 0, 27, 0, 18, 10, - 4, 0, 18, 0, 4, 0, 35, 10, 0, 0, 11, 3,119, 1, 2, 0, 4, 0, 18, 0, 7, 0, 84, 4,120, 1, 2, 0, 27, 0, 18, 10, - 0, 0, 11, 3,121, 1, 10, 0, 27, 0, 18, 10, 4, 0, 37, 10, 7, 0,128, 0, 4, 0, 18, 0, 2, 0, 3, 7, 2, 0, 38, 10, - 2, 0, 67, 0, 2, 0, 30, 0, 7, 0, 39, 10, 0, 0, 11, 3,122, 1, 10, 0, 27, 0, 18, 10, 2, 0, 16, 0, 2, 0,134, 4, - 4, 0, 90, 0, 4, 0, 91, 0, 7, 0,115, 9, 7, 0,116, 9, 4, 0, 27, 0,176, 0, 85, 9, 0, 0, 11, 3,123, 1, 4, 0, - 27, 0, 18, 10, 4, 0,210, 3, 4, 0, 40, 10, 0, 0, 11, 3,124, 1, 4, 0, 27, 0, 18, 10, 4, 0,210, 3, 4, 0, 27, 0, - 0, 0, 11, 3,125, 1, 6, 0, 27, 0, 18, 10, 7, 0,128, 0, 7, 0, 82, 3, 4, 0, 41, 10, 2, 0,210, 3, 2, 0,211, 3, -126, 1, 6, 0, 27, 0, 18, 10, 4, 0, 42, 10, 4, 0, 43, 10, 7, 0, 44, 10, 7, 0, 45, 10, 0, 0, 11, 3,127, 1, 16, 0, - 27, 0, 18, 10, 27, 0,215, 9, 4, 0, 16, 0, 7, 0, 46, 10, 7, 0, 47, 10, 7, 0, 48, 10, 7, 0, 49, 10, 7, 0, 50, 10, - 7, 0, 51, 10, 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0, 67, 0, 2, 0, 30, 0, -128, 1, 3, 0, 27, 0, 18, 10, 4, 0, 18, 0, 4, 0, 32, 2,129, 1, 5, 0, 27, 0, 18, 10, 4, 0, 18, 0, 4, 0, 27, 0, - 7, 0, 55, 10, 0, 0, 11, 3,130, 1, 10, 0, 27, 0, 18, 10, 0, 0, 11, 3, 2, 0, 56, 10, 2, 0, 57, 10, 0, 0, 58, 10, - 0, 0, 59, 10, 7, 0, 60, 10, 7, 0, 61, 10, 7, 0, 62, 10, 7, 0, 63, 10,131, 1, 5, 0, 27, 0, 18, 10, 0, 0, 11, 3, - 7, 0,220, 2, 2, 0, 64, 10, 2, 0, 18, 0,132, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, - 7, 0, 65, 10, 7, 0, 66, 10, 2, 0, 18, 0, 2, 0, 32, 2,133, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 7, 0, 65, 10, 7, 0, 66, 10, 2, 0, 18, 0, 2, 0, 32, 2,134, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, - 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 65, 10, 7, 0, 66, 10, 2, 0, 18, 0, 2, 0, 32, 2,135, 1, 7, 0, 27, 0, 18, 10, - 0, 0, 11, 3, 7, 0, 94, 1, 7, 0,103, 1, 2, 0, 18, 0, 2, 0, 87, 1, 4, 0, 27, 0,136, 1, 5, 0, 27, 0, 70, 3, - 7, 0, 94, 1, 2, 0, 74, 3, 0, 0, 76, 3, 0, 0, 67, 10,137, 1, 7, 0,229, 0,105, 6, 0, 0, 68, 10, 4, 0, 18, 0, - 4, 0, 27, 0, 0, 0, 69, 10, 27, 0,208, 5, 27, 0, 70, 10,138, 1, 3, 0,229, 0,105, 6, 4, 0, 18, 0, 4, 0, 27, 0, -139, 1, 6, 0,229, 0,105, 6, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 69, 10, 7, 0, 55, 10, 27, 0,208, 5,140, 1, 10, 0, -140, 1, 0, 0,140, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 71, 10, 7, 0, 31, 1, 7, 0, 32, 1, 2, 0,252, 9, - 2, 0, 72, 10, 27, 0, 44, 0,141, 1, 22, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 18, 0, 2, 0, 87, 1, 2, 0, 73, 10, - 2, 0, 74, 10, 31, 0, 80, 0,176, 0, 85, 9, 27, 0,168, 0, 7, 0, 90, 0, 7, 0, 91, 0, 7, 0, 75, 10, 7, 0, 76, 10, - 7, 0, 77, 10, 7, 0, 78, 10, 7, 0,253, 2, 7, 0,148, 3, 7, 0, 87, 9, 7, 0, 79, 10, 0, 0, 80, 10, 0, 0, 81, 10, - 14, 0,188, 3,142, 1, 11, 0, 7, 0, 47, 2, 7, 0,115, 9, 7, 0,116, 9, 11, 0, 2, 0, 2, 0, 82, 10, 2, 0, 83, 10, - 2, 0, 84, 10, 2, 0, 85, 10, 2, 0, 86, 10, 2, 0, 87, 10, 2, 0,181, 2,143, 1, 21, 0,143, 1, 0, 0,143, 1, 1, 0, -143, 1, 88, 10, 0, 0, 19, 0, 11, 0, 89, 10, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 90, 10, 2, 0, 91, 10, 7, 0, 92, 10, - 7, 0, 93, 10, 11, 0, 94, 10, 2, 0, 95, 10, 2, 0, 96, 10, 4, 0,247, 1, 11, 0,149, 9, 4, 0, 97, 10, 4, 0, 98, 10, -143, 1, 99, 10,144, 1,100, 10,142, 1,101, 10,145, 1, 4, 0, 0, 0,102, 10, 2, 0,103, 10, 2, 0,104, 10, 4, 0, 27, 0, -146, 1, 37, 0,146, 1, 0, 0,146, 1, 1, 0,146, 1,105, 10, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,196, 8, - 2, 0,176, 2, 2, 0,106, 10, 2, 0, 8, 7, 2, 0, 95, 10, 2, 0, 39, 9, 14, 0, 80, 9, 14, 0,107, 10,146, 1, 38, 0, - 22, 0, 41, 7, 11, 0, 89, 10, 7, 0, 92, 10, 7, 0, 93, 10, 7, 0, 82, 2, 7, 0, 1, 3, 7, 0,108, 10, 4, 0,109, 10, - 0, 0,110, 10, 2, 0,111, 10, 2, 0,112, 10, 7, 0,113, 10, 7, 0,114, 10, 2, 0,115, 10, 2, 0,116, 10, 11, 0,117, 10, - 19, 0,118, 10, 19, 0,119, 10, 19, 0,120, 10,145, 1,154, 0,147, 1,121, 10,148, 1,122, 10,144, 1, 8, 0,144, 1, 0, 0, -144, 1, 1, 0,146, 1,123, 10,146, 1,124, 10,143, 1,125, 10,143, 1,126, 10, 4, 0, 18, 0, 4, 0, 27, 0, 57, 0, 20, 0, - 22, 0, 32, 0, 34, 0, 75, 0,178, 0,182, 3, 14, 0,127, 10, 14, 0,128, 10, 4, 0, 16, 0, 4, 0,129, 10, 4, 0,130, 10, - 4, 0, 18, 0, 4, 0,109, 10, 4, 0,131, 10, 14, 0, 80, 9, 14, 0,107, 10,149, 1,132, 10, 11, 0,133, 10, 11, 0,134, 10, - 4, 0,135, 10, 11, 0,136, 10, 11, 0,137, 10, 11, 0,138, 10,150, 1, 4, 0, 4, 0, 17, 0, 4, 0,230, 2, 4, 0,115, 9, - 4, 0,116, 9,151, 1, 4, 0, 4, 0, 17, 0, 7, 0,230, 2, 7, 0,115, 9, 7, 0,116, 9,152, 1, 2, 0, 0, 0,230, 2, - 0, 0, 86, 1,153, 1, 4, 0, 4, 0, 17, 0, 7, 0,139, 10, 7, 0,115, 9, 7, 0,116, 9,154, 1, 1, 0, 7, 0,140, 10, -155, 1, 6, 0, 4, 0,127, 0, 4, 0,129, 0, 4, 0, 39, 9, 0, 0,141, 10, 0, 0,142, 10, 2, 0, 27, 0,156, 1, 16, 0, - 2, 0,140, 8, 2, 0,141, 8, 2, 0,143, 10, 2, 0,144, 10, 2, 0,145, 10, 2, 0, 68, 0, 2, 0, 42, 7, 2, 0,146, 10, - 7, 0,252, 2, 7, 0,147, 10, 7, 0,148, 10, 2, 0,109, 1, 0, 0,149, 10, 0, 0,150, 10, 4, 0,151, 10, 4, 0,152, 10, -157, 1, 9, 0, 7, 0,153, 10, 7, 0,154, 10, 7, 0,148, 9, 7, 0, 94, 3, 7, 0,155, 10, 7, 0,217, 6, 2, 0, 92, 3, - 0, 0,156, 10, 0, 0, 27, 0,158, 1, 4, 0, 7, 0,157, 10, 7, 0,158, 10, 2, 0, 92, 3, 2, 0, 27, 0,159, 1, 3, 0, - 7, 0,159, 10, 7, 0,211, 8, 7, 0, 14, 0,160, 1, 4, 0, 0, 0, 35, 0,204, 0, 80, 5, 4, 0,129, 0, 4, 0,132, 4, -161, 1, 6, 0, 0, 0,160, 10,204, 0,161, 10, 4, 0,129, 0, 4, 0,132, 4, 4, 0,162, 10, 4, 0, 27, 0,162, 1, 4, 0, - 2, 0,163, 10, 2, 0,164, 10, 4, 0, 30, 0,204, 0,161, 10,163, 1, 9, 0, 7, 0,165, 10, 7, 0,166, 10, 7, 0,167, 10, - 7, 0, 93, 2, 7, 0,168, 10, 7, 0,169, 10, 7, 0,170, 10, 2, 0,171, 10, 2, 0,172, 10,164, 1, 8, 0, 2, 0,173, 10, - 2, 0,174, 10, 2, 0,175, 10, 2, 0,176, 10, 7, 0,177, 10, 7, 0,178, 10, 7, 0,179, 10, 7, 0,180, 10,165, 1, 2, 0, - 7, 0, 5, 0, 7, 0, 6, 0,166, 1, 2, 0, 0, 0,170, 0, 0, 0,181, 10,167, 1, 1, 0, 0, 0, 19, 0,168, 1, 12, 0, - 0, 0,182, 10, 0, 0,183, 10, 0, 0,208, 6, 0, 0,184, 10, 2, 0,143, 10, 2, 0,185, 10, 7, 0,186, 10, 7, 0,187, 10, - 7, 0,188, 10, 7, 0,148, 3, 7, 0,189, 10, 7, 0,190, 10,169, 1, 2, 0, 11, 0,191, 10, 11, 0,192, 10,170, 1, 13, 0, - 0, 0, 72, 5, 0, 0, 16, 0, 0, 0, 92, 3, 0, 0, 94, 3, 0, 0,183, 10, 0, 0,108, 0, 0, 0,181, 2, 7, 0,193, 10, - 7, 0,194, 10, 7, 0,147, 3, 7, 0,195, 10, 7, 0,196, 10, 7, 0,190, 10,171, 1, 8, 0, 7, 0, 46, 9, 7, 0,128, 0, - 7, 0,150, 10, 7, 0,172, 2, 7, 0,197, 10, 7, 0,240, 0, 7, 0,198, 10, 4, 0, 16, 0,172, 1, 4, 0, 2, 0,199, 10, - 2, 0,200, 10, 2, 0,201, 10, 2, 0, 27, 0,173, 1, 8, 0, 7, 0,202, 10, 7, 0,220, 2, 7, 0,203, 10, 7, 0,189, 8, - 7, 0,190, 8, 7, 0,191, 8, 7, 0,204, 10, 7, 0,205, 10,174, 1, 6, 0, 2, 0,206, 10, 2, 0,207, 10, 7, 0,208, 10, - 7, 0,209, 10, 7, 0,210, 10, 7, 0,211, 10,175, 1, 2, 0, 58, 0,212, 10, 59, 0,213, 10,176, 1, 3, 0,175, 1, 78, 6, - 7, 0,214, 10, 7, 0,215, 10,177, 1, 3, 0,175, 1, 78, 6, 4, 0,216, 10, 4, 0, 27, 0,178, 1, 1, 0,175, 1, 78, 6, -179, 1, 3, 0,175, 1, 78, 6, 4, 0,216, 10, 4, 0,217, 10,180, 1, 3, 0,175, 1, 78, 6, 4, 0,218, 10, 4, 0, 27, 0, -181, 1, 1, 0,175, 1, 78, 6,182, 1, 3, 0,175, 1, 78, 6, 4, 0,219, 10, 4, 0, 27, 0,183, 1, 3, 0,175, 1, 78, 6, - 4, 0,220, 10, 4, 0, 27, 0,184, 1, 3, 0,175, 1, 78, 6, 4, 0,221, 10, 4, 0, 27, 0,185, 1, 3, 0,175, 1, 78, 6, - 4, 0,250, 0, 4, 0, 27, 0,186, 1, 1, 0, 0, 0, 19, 0,187, 1, 1, 0, 0, 0, 19, 0,188, 1, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,222, 10,189, 1, 10, 0, 2, 0, 62, 4, 2, 0, 18, 0, 7, 0,217, 4, 7, 0,223, 10, - 7, 0,224, 10, 7, 0,225, 10, 7, 0,226, 10,188, 1,227, 10,188, 1,228, 10,188, 1,229, 10, 54, 0, 11, 0, 4, 0, 18, 0, - 4, 0, 63, 0, 4, 0,230, 10, 4, 0,231, 10, 19, 0,232, 10, 19, 0,233, 10,189, 1,234, 10, 7, 0,235, 10, 7, 0,236, 10, - 7, 0,237, 10, 7, 0,238, 10, 0, 1, 10, 0, 4, 0,252, 9, 4, 0,239, 10, 7, 0,240, 10, 7, 0,241, 10, 7, 0,242, 10, - 7, 0,243, 10, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 87, 1, 4, 0, 1, 3,255, 0, 18, 0, 4, 0,132, 0, 4, 0,244, 10, - 4, 0,245, 10, 7, 0,246, 10, 4, 0,247, 10, 7, 0,248, 10, 7, 0,249, 10, 4, 0,250, 10, 7, 0,251, 10, 4, 0,252, 10, - 7, 0,253, 10, 0, 1,254, 10, 7, 0,255, 10, 7, 0, 0, 11, 7, 0, 1, 11, 7, 0, 2, 11, 4, 0, 3, 11, 4, 0, 27, 0, -190, 1, 4, 0, 42, 0,244, 2, 7, 0, 4, 11, 7, 0,178, 1, 7, 0, 27, 0,213, 0, 34, 0, 22, 0, 32, 0,190, 1, 5, 11, - 54, 0,227, 10, 46, 0, 6, 11, 52, 0, 7, 11, 25, 0,154, 0, 0, 0, 8, 11, 7, 0, 9, 11, 2, 0,108, 6, 2, 0, 10, 11, - 4, 0,108, 0, 4, 0, 18, 0, 7, 0, 11, 11, 4, 0, 90, 2, 4, 0, 12, 11, 7, 0, 13, 11, 7, 0, 14, 11, 7, 0, 15, 11, - 7, 0,178, 1, 4, 0, 16, 11, 7, 0, 17, 11, 0, 0, 18, 11, 0, 0, 19, 11, 0, 0, 20, 11, 0, 0, 21, 11, 7, 0, 22, 11, - 7, 0, 23, 11, 7, 0, 24, 11, 7, 0, 1, 3, 7, 0, 25, 11, 4, 0, 26, 11, 7, 0,240, 5, 7, 0, 27, 11, 7, 0, 28, 11, -191, 1, 10, 0, 4, 0, 16, 0, 4, 0,128, 0, 4, 0, 18, 0, 4, 0, 15, 4, 4, 0, 29, 11, 4, 0, 30, 11, 4, 0, 31, 11, - 4, 0, 70, 0, 0, 0, 19, 0, 11, 0, 2, 0,192, 1, 1, 0, 0, 0, 69, 7, 95, 0, 8, 0,191, 1, 32, 11, 4, 0, 33, 11, - 4, 0, 34, 11, 4, 0, 35, 11, 4, 0, 36, 11, 4, 0, 30, 0, 11, 0, 37, 11,192, 1, 38, 11,193, 1, 5, 0, 7, 0,165, 2, - 7, 0,240, 2, 7, 0, 40, 2, 2, 0,147, 2, 2, 0, 27, 0,194, 1, 5, 0, 7, 0,165, 2, 7, 0,159, 4, 7, 0, 39, 11, - 7, 0, 40, 11, 7, 0,240, 2,195, 1, 5, 0, 27, 0, 41, 11,196, 1, 21, 0, 7, 0, 74, 6, 7, 0, 42, 11, 7, 0, 56, 0, -197, 1, 3, 0, 7, 0, 43, 11, 4, 0, 44, 11, 4, 0, 45, 11,198, 1, 7, 0, 4, 0, 46, 11, 4, 0, 47, 11, 4, 0, 48, 11, - 7, 0, 49, 11, 7, 0, 50, 11, 7, 0, 51, 11, 7, 0, 56, 0,199, 1, 8, 0,199, 1, 0, 0,199, 1, 1, 0, 27, 0, 44, 0, - 4, 0, 3, 1, 2, 0, 18, 0, 2, 0, 87, 1, 7, 0,240, 2, 7, 0, 54, 9,200, 1, 7, 0,200, 1, 0, 0,200, 1, 1, 0, - 27, 0, 44, 0, 2, 0,225, 2, 2, 0, 18, 0, 2, 0, 14, 2, 2, 0, 56, 0,201, 1, 17, 0,194, 1, 8, 4,194, 1, 52, 11, -193, 1, 53, 11,194, 1, 37, 9,195, 1, 54, 11, 4, 0, 82, 0, 7, 0,240, 2, 7, 0, 7, 3, 7, 0, 55, 11, 4, 0, 46, 11, - 4, 0, 56, 11, 7, 0, 50, 11, 7, 0, 51, 11, 7, 0,108, 0, 4, 0, 57, 11, 2, 0, 18, 0, 2, 0, 58, 11,202, 1, 15, 0, - 7, 0,255, 0, 7, 0, 59, 11, 7, 0, 43, 11, 7, 0, 60, 11, 7, 0, 61, 11, 7, 0, 62, 11, 7, 0, 63, 11, 7, 0, 64, 11, - 7, 0, 65, 11, 7, 0, 66, 11, 7, 0, 67, 11, 7, 0, 68, 11, 7, 0, 69, 11, 4, 0, 18, 0, 4, 0, 70, 11,203, 1,128, 0, - 22, 0, 32, 0, 34, 0, 75, 0,204, 1, 71, 11,202, 1, 72, 11,187, 0,154, 4, 4, 0, 18, 0, 4, 0, 56, 0, 2, 0, 16, 0, - 2, 0, 56, 10, 2, 0, 73, 11, 2, 0,122, 1, 2, 0, 74, 11, 2, 0,232, 3, 2, 0, 75, 11, 2, 0, 76, 11, 2, 0, 77, 11, - 2, 0, 78, 11, 2, 0, 79, 11, 2, 0, 80, 11, 2, 0, 81, 11, 2, 0, 82, 11, 2, 0, 83, 11, 2, 0,224, 5, 2, 0, 84, 11, - 2, 0, 85, 11, 2, 0, 86, 11, 2, 0, 87, 11, 2, 0, 88, 11, 2, 0, 29, 2, 2, 0, 30, 9, 2, 0, 5, 9, 2, 0, 89, 11, - 2, 0, 90, 11, 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 91, 11, 2, 0, 92, 11, 2, 0, 93, 11, 2, 0, 94, 11, 7, 0, 95, 11, - 7, 0, 96, 11, 7, 0, 97, 11, 7, 0, 98, 11, 7, 0, 99, 11, 7, 0,100, 11, 7, 0,101, 11, 2, 0,154, 5, 2, 0,102, 11, - 7, 0,103, 11, 7, 0,104, 11, 7, 0,105, 11, 7, 0, 12, 9, 7, 0, 91, 0, 7, 0, 7, 3, 7, 0, 18, 9, 7, 0,106, 11, - 7, 0,107, 11, 7, 0,108, 11, 7, 0,109, 11, 7, 0,110, 11, 7, 0,111, 11, 4, 0, 13, 9, 4, 0, 11, 9, 4, 0,112, 11, - 4, 0,113, 11, 2, 0,114, 11, 2, 0,115, 11, 7, 0, 14, 9, 7, 0, 15, 9, 7, 0, 16, 9, 7, 0,116, 11, 7, 0,117, 11, - 7, 0,118, 11, 7, 0,119, 11, 7, 0,120, 11, 7, 0,121, 11, 7, 0,122, 11, 7, 0,123, 11, 7, 0,124, 11, 7, 0,222, 3, - 7, 0,108, 0, 7, 0,125, 11, 7, 0,126, 11, 7, 0,127, 11, 7, 0,128, 11, 7, 0,214, 0, 7, 0,129, 11, 4, 0,130, 11, - 4, 0,131, 11, 7, 0,132, 11, 7, 0,133, 11, 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11, 7, 0,213, 0, 7, 0,137, 11, - 7, 0, 52, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0,138, 11, 7, 0,139, 11, 7, 0,140, 11, 7, 0,141, 11, 7, 0,142, 11, - 7, 0,143, 11, 7, 0,144, 11, 7, 0,145, 11, 7, 0,146, 11, 7, 0,147, 11, 7, 0,148, 11, 7, 0,149, 11, 7, 0,150, 11, - 7, 0,151, 11, 7, 0,152, 11, 7, 0,153, 11, 7, 0,154, 11, 7, 0,155, 11, 4, 0,156, 11, 4, 0,157, 11, 46, 0,140, 1, - 64, 0, 0, 4, 14, 0,158, 11, 64, 0,159, 11, 27, 0,160, 11, 27, 0,161, 11, 31, 0, 80, 0,182, 0, 73, 1,182, 0,162, 11, -150, 0, 52, 0,150, 0, 0, 0,150, 0, 1, 0,203, 1,163, 11,201, 1,164, 11,198, 1,215, 9,190, 0, 80, 4, 11, 0, 81, 4, -205, 1,165, 11,205, 1,166, 11, 14, 0,167, 11, 14, 0,168, 11,135, 0,169, 11,143, 0,170, 11,143, 0,171, 11, 27, 0,172, 11, - 27, 0,173, 11, 27, 0, 38, 0, 14, 0, 23, 10, 0, 0, 19, 0, 7, 0,244, 0, 7, 0, 36, 3, 7, 0,174, 11, 7, 0,175, 11, - 4, 0,214, 2, 4, 0,176, 11, 4, 0, 18, 0, 4, 0, 13, 9, 4, 0,177, 11, 4, 0,178, 11, 4, 0,179, 11, 4, 0,180, 11, - 2, 0,251, 0, 2, 0,181, 11, 2, 0,182, 11, 2, 0,183, 11, 0, 0,184, 11, 2, 0,185, 11, 2, 0,186, 11, 2, 0,187, 11, - 11, 0,188, 11,139, 0,153, 4, 14, 0, 21, 3, 14, 0,189, 11,197, 1,190, 11, 4, 0,191, 11, 4, 0,192, 11,206, 1,193, 11, -141, 0, 33, 3,207, 1,194, 11, 7, 0,195, 11, 7, 0,196, 11, 7, 0,197, 11,137, 0, 38, 0,208, 1,149, 9, 7, 0,123, 4, - 7, 0,198, 11, 7, 0,199, 11, 7, 0, 74, 6, 7, 0,236, 3, 7, 0,222, 3, 7, 0,200, 11, 7, 0, 92, 2, 7, 0,201, 11, - 7, 0,202, 11, 7, 0,203, 11, 7, 0,204, 11, 7, 0,205, 11, 7, 0,206, 11, 7, 0,124, 4, 7, 0,207, 11, 7, 0,208, 11, - 7, 0,209, 11, 7, 0,125, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,210, 11, 7, 0,211, 11, 7, 0,212, 11, 4, 0,213, 11, - 4, 0, 92, 0, 4, 0,214, 11, 4, 0,215, 11, 2, 0,216, 11, 2, 0,217, 11, 2, 0,218, 11, 2, 0,219, 11, 2, 0,220, 11, - 2, 0,221, 11, 2, 0,222, 11, 2, 0, 27, 0,187, 0,154, 4,138, 0, 11, 0,208, 1,223, 11, 7, 0,224, 11, 7, 0,225, 11, - 7, 0,251, 1, 7, 0,226, 11, 7, 0,227, 11, 7, 0,228, 11, 4, 0, 92, 0, 2, 0,229, 11, 2, 0,230, 11, 64, 0,250, 1, -209, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,231, 11,210, 1, 6, 0,210, 1, 0, 0,210, 1, 1, 0, -209, 1,191, 9, 4, 0, 1, 1, 2, 0,232, 11, 2, 0, 18, 0,211, 1, 5, 0,211, 1, 0, 0,211, 1, 1, 0, 14, 0,233, 11, - 4, 0,234, 11, 4, 0, 18, 0,212, 1, 9, 0,212, 1, 0, 0,212, 1, 1, 0, 14, 0,127, 0,211, 1,235, 11, 4, 0, 18, 0, - 2, 0,232, 11, 2, 0,236, 11, 7, 0, 93, 0, 0, 0,237, 11,178, 0, 6, 0, 22, 0, 32, 0, 14, 0,123, 5, 4, 0, 18, 0, - 2, 0,238, 11, 2, 0,239, 11, 11, 0,240, 11,213, 1, 6, 0, 14, 0,241, 11, 4, 0,242, 11, 4, 0,243, 11, 4, 0, 18, 0, - 4, 0, 27, 0,237, 0,244, 11,214, 1, 19, 0, 22, 0, 32, 0,215, 1,245, 11,215, 1,246, 11, 14, 0,247, 11, 4, 0,248, 11, - 2, 0,249, 11, 2, 0,250, 11, 14, 0,251, 11, 14, 0,252, 11,213, 1,253, 11, 14, 0,254, 11, 14, 0,255, 11, 14, 0, 0, 12, - 14, 0, 1, 12,216, 1, 2, 12,216, 1, 3, 12,216, 1, 4, 12, 14, 0, 5, 12,237, 0, 6, 12,215, 1, 32, 0,215, 1, 0, 0, -215, 1, 1, 0, 11, 0, 7, 12, 4, 0,118, 8, 2, 0, 8, 12, 2, 0, 27, 0, 27, 1, 9, 12, 27, 1, 10, 12, 0, 0, 11, 12, - 2, 0, 12, 12, 2, 0, 13, 12, 2, 0,140, 8, 2, 0,141, 8, 2, 0, 14, 12, 2, 0, 15, 12, 2, 0, 15, 4, 2, 0, 52, 7, - 2, 0, 16, 12, 2, 0, 17, 12, 2, 0, 18, 12, 2, 0, 30, 0,217, 1, 19, 12,218, 1, 20, 12,219, 1, 21, 12, 4, 0, 22, 12, - 4, 0, 23, 12, 11, 0, 24, 12, 14, 0,252, 11, 14, 0,159, 8, 14, 0, 25, 12, 14, 0, 26, 12, 14, 0, 27, 12,220, 1, 18, 0, -220, 1, 0, 0,220, 1, 1, 0, 0, 0, 28, 12, 21, 0, 31, 0, 0, 0, 29, 12, 2, 0, 30, 12, 2, 0, 16, 0, 2, 0, 14, 0, - 2, 0, 31, 12, 2, 0, 32, 12, 2, 0, 33, 12, 2, 0, 34, 12, 2, 0, 35, 12, 2, 0, 18, 0, 2, 0, 36, 12, 2, 0, 32, 0, - 2, 0, 27, 0,221, 1, 37, 12,222, 1, 4, 0,222, 1, 0, 0,222, 1, 1, 0,220, 1, 38, 12,220, 1, 39, 12,223, 1, 11, 0, -223, 1, 0, 0,223, 1, 1, 0, 14, 0, 40, 12, 14, 0, 41, 12, 0, 0, 28, 12, 2, 0, 42, 12, 2, 0, 43, 12, 2, 0, 18, 0, - 2, 0, 44, 12, 4, 0, 45, 12, 11, 0, 46, 12,216, 1, 7, 0,216, 1, 0, 0,216, 1, 1, 0, 0, 0, 28, 12, 0, 0, 47, 12, - 14, 0, 58, 8, 4, 0, 48, 12, 4, 0, 18, 0,249, 0, 14, 0,249, 0, 0, 0,249, 0, 1, 0, 0, 0, 28, 12, 21, 0, 31, 0, -224, 1,134, 8, 11, 0, 49, 12, 11, 0, 50, 12,221, 1, 37, 12,213, 1, 51, 12, 14, 0, 52, 12,249, 0, 53, 12, 32, 1,238, 6, - 2, 0, 18, 0, 2, 0, 86, 1,225, 1, 12, 0,225, 1, 0, 0,225, 1, 1, 0, 11, 0, 2, 0, 11, 0, 54, 12, 0, 0, 19, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,137, 9, 7, 0,129, 0, 7, 0,132, 4, 7, 0, 87, 9, 7, 0, 79, 10,226, 1, 5, 0, - 7, 0, 55, 12, 4, 0, 56, 12, 4, 0, 57, 12, 4, 0, 87, 1, 4, 0, 18, 0,227, 1, 6, 0, 7, 0, 58, 12, 7, 0, 59, 12, - 7, 0, 60, 12, 7, 0, 61, 12, 4, 0, 16, 0, 4, 0, 18, 0,228, 1, 5, 0, 7, 0,115, 9, 7, 0,116, 9, 7, 0,240, 2, - 2, 0, 43, 2, 2, 0, 44, 2,229, 1, 5, 0,228, 1, 2, 0, 4, 0, 53, 0, 7, 0, 62, 12, 7, 0,115, 9, 7, 0,116, 9, -230, 1, 4, 0, 2, 0, 63, 12, 2, 0, 64, 12, 2, 0, 65, 12, 2, 0, 66, 12,231, 1, 2, 0, 37, 0, 36, 7, 21, 0,155, 9, -232, 1, 3, 0, 19, 0, 67, 12, 4, 0, 18, 0, 4, 0, 27, 0,233, 1, 6, 0, 7, 0,108, 0, 7, 0,209, 2, 7, 0, 68, 12, - 7, 0, 27, 0, 2, 0,250, 0, 2, 0, 69, 12,234, 1, 5, 0, 7, 0, 70, 12, 7, 0,128, 0, 7, 0,192, 9, 7, 0,193, 9, - 4, 0, 18, 0,235, 1, 6, 0, 22, 0, 41, 7, 0, 0, 71, 12, 0, 0, 72, 12, 2, 0, 73, 12, 2, 0, 18, 0, 4, 0, 74, 12, -236, 1, 7, 0,236, 1, 0, 0,236, 1, 1, 0, 0, 0, 19, 0,235, 1, 75, 12, 2, 0, 76, 12, 2, 0, 16, 0, 7, 0, 60, 0, -237, 1, 7, 0, 14, 0, 77, 12, 0, 0, 78, 12, 11, 0, 79, 12, 7, 0, 60, 0, 7, 0,137, 9, 4, 0, 16, 0, 4, 0, 18, 0, -238, 1, 3, 0, 7, 0, 80, 12, 4, 0, 18, 0, 4, 0, 27, 0,239, 1, 15, 0,239, 1, 0, 0,239, 1, 1, 0,106, 1, 10, 10, -237, 1, 61, 0, 14, 0,188, 3, 30, 0, 49, 0,238, 1, 81, 12, 4, 0, 53, 0, 7, 0, 60, 0, 2, 0, 18, 0, 2, 0, 22, 1, - 4, 0, 82, 12, 0, 0, 71, 12, 4, 0, 83, 12, 7, 0, 84, 12,240, 1, 2, 0, 0, 0, 85, 12, 0, 0, 86, 12,241, 1, 4, 0, -241, 1, 0, 0,241, 1, 1, 0,176, 0, 70, 3, 14, 0, 87, 12,242, 1, 25, 0,242, 1, 0, 0,242, 1, 1, 0, 14, 0, 88, 12, -176, 0, 85, 9,241, 1, 89, 12, 14, 0, 90, 12, 14, 0,188, 3, 0, 0, 19, 0, 7, 0,137, 9, 7, 0, 91, 12, 7, 0, 90, 0, - 7, 0, 91, 0, 7, 0, 75, 10, 7, 0, 76, 10, 7, 0,253, 2, 7, 0,148, 3, 7, 0, 87, 9, 7, 0, 79, 10, 2, 0, 92, 12, - 2, 0, 93, 12, 2, 0, 67, 0, 2, 0, 16, 0, 11, 0, 94, 12, 4, 0, 18, 0, 4, 0, 30, 0,243, 1, 6, 0,243, 1, 0, 0, -243, 1, 1, 0, 14, 0, 88, 12, 4, 0, 18, 0, 4, 0, 14, 2, 0, 0, 19, 0,244, 1, 11, 0,244, 1, 0, 0,244, 1, 1, 0, - 22, 0, 41, 7, 0, 0, 95, 12, 4, 0, 74, 12, 2, 0, 96, 12, 2, 0, 27, 0, 0, 0, 71, 12, 4, 0, 82, 12, 2, 0, 18, 0, - 2, 0, 97, 12,245, 1, 10, 0,245, 1, 0, 0,245, 1, 1, 0, 14, 0, 98, 12, 0, 0, 28, 12, 0, 0, 19, 0, 0, 0, 99, 12, - 0, 0,100, 12, 2, 0, 18, 0, 2, 0, 97, 12, 4, 0,101, 12,246, 1, 5, 0,246, 1, 0, 0,246, 1, 1, 0, 0, 0, 71, 12, - 4, 0, 82, 12, 7, 0,230, 2, 34, 0, 12, 0,176, 0,179, 3,176, 0,102, 12,241, 1, 89, 12, 14, 0,103, 12,242, 1,104, 12, - 14, 0,105, 12, 14, 0,106, 12, 4, 0, 18, 0, 4, 0,251, 0, 2, 0,107, 12, 2, 0,108, 12, 7, 0,109, 12,247, 1, 2, 0, - 22, 0, 32, 0, 34, 0, 75, 0,248, 1, 5, 0,248, 1, 0, 0,248, 1, 1, 0, 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,172, 5, -249, 1, 6, 0,248, 1,110, 12, 27, 0, 44, 0, 4, 0,111, 12, 7, 0,112, 12, 4, 0,113, 12, 4, 0,252, 9,250, 1, 3, 0, -248, 1,110, 12, 4, 0,111, 12, 7, 0,114, 12,251, 1, 8, 0,248, 1,110, 12, 27, 0, 44, 0, 7, 0, 77, 1, 7, 0,115, 12, - 7, 0, 36, 3, 7, 0,148, 9, 4, 0,111, 12, 4, 0,116, 12,252, 1, 5, 0,248, 1,110, 12, 7, 0,117, 12, 7, 0,176, 2, - 7, 0, 3, 3, 7, 0, 56, 0,253, 1, 3, 0,248, 1,110, 12, 7, 0,148, 9, 7, 0,118, 12,196, 1, 4, 0, 7, 0,119, 12, - 7, 0,126, 11, 2, 0,120, 12, 2, 0, 87, 1,254, 1, 14, 0,254, 1, 0, 0,254, 1, 1, 0, 14, 0,121, 12, 14, 0,122, 12, - 14, 0,123, 12, 0, 0,172, 5, 4, 0, 32, 0, 4, 0, 18, 0, 4, 0,124, 12, 7, 0,125, 12, 4, 0,113, 12, 4, 0,252, 9, - 7, 0, 84, 4, 7, 0, 5, 3,204, 1, 23, 0, 4, 0,111, 12, 4, 0,126, 12, 7, 0,127, 12, 7, 0, 1, 3, 7, 0,128, 12, - 7, 0,228, 8, 7, 0,119, 12, 7, 0,129, 12, 7, 0,209, 2, 7, 0,246, 10, 7, 0,217, 4, 7, 0,130, 12, 7, 0,131, 12, - 7, 0,132, 12, 7, 0,133, 12, 7, 0,134, 12, 7, 0,135, 12, 7, 0,136, 12, 7, 0,137, 12, 7, 0,138, 12, 7, 0,139, 12, - 7, 0,140, 12, 14, 0,141, 12,123, 0, 40, 0,122, 0,142, 12,255, 1, 72, 11, 64, 0,143, 12, 64, 0,159, 11, 64, 0,144, 12, - 0, 2,145, 12, 43, 0,169, 0, 43, 0,146, 12, 43, 0,147, 12, 7, 0,148, 12, 7, 0,149, 12, 7, 0,150, 12, 7, 0,151, 12, - 7, 0,152, 12, 7, 0,117, 8, 7, 0,153, 12, 7, 0,178, 1, 7, 0,154, 12, 4, 0,155, 12, 4, 0,156, 12, 4, 0,157, 12, - 4, 0, 92, 0, 4, 0, 27, 0, 4, 0,158, 12, 2, 0,159, 12, 2, 0,160, 12, 4, 0,161, 12, 7, 0,209, 2, 4, 0,162, 12, - 7, 0,163, 12, 4, 0,164, 12, 4, 0,165, 12, 4, 0,166, 12,139, 0,167, 12, 14, 0,168, 12,187, 0,154, 4, 4, 0,169, 12, - 7, 0,170, 12, 7, 0,171, 12, 4, 0, 30, 0,124, 0, 12, 0,122, 0,142, 12,150, 0, 56, 3, 7, 0,143, 1, 7, 0,117, 8, - 7, 0,172, 12, 7, 0,173, 12, 7, 0,174, 12, 2, 0,175, 12, 2, 0,176, 12, 2, 0,177, 12, 2, 0, 16, 0, 4, 0, 92, 0, -125, 0, 13, 0,122, 0,142, 12,141, 0, 33, 3,143, 0, 35, 3, 7, 0,191, 9, 7, 0,178, 12, 7, 0,179, 12, 7, 0, 79, 1, - 7, 0,180, 12, 4, 0, 32, 10, 4, 0, 29, 3, 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 1, 2, 15, 0, 22, 0, 32, 0, - 34, 0, 75, 0, 46, 1,226, 8, 7, 0,181, 12, 7, 0,182, 12, 7, 0,183, 12, 7, 0,184, 12, 7, 0,147, 9, 7, 0,185, 12, - 7, 0,186, 12, 7, 0,187, 12, 7, 0, 84, 4, 7, 0,228, 8, 2, 0, 18, 0, 2, 0,111, 9,231, 0, 3, 0, 4, 0,126, 0, - 2, 0,214, 6, 2, 0,188, 12, 2, 2, 5, 0, 0, 0,192, 8, 2, 0,193, 8, 2, 0, 72, 5, 2, 0,189, 12, 2, 0,190, 12, -229, 0, 16, 0, 22, 0, 32, 0, 34, 0, 75, 0, 0, 0, 35, 0, 4, 0,143, 0, 4, 0,144, 0, 4, 0,191, 12, 7, 0,162, 0, - 7, 0,163, 0, 44, 0,138, 0, 3, 2,149, 9,178, 0,182, 3, 4, 2,192, 12, 11, 0,193, 12, 2, 2,194, 12, 4, 0, 18, 0, - 4, 0, 22, 0, 13, 1, 10, 0, 4, 0,132, 0, 4, 0,195, 12, 52, 0,196, 12, 7, 0,197, 12, 2, 0,198, 12, 0, 0,181, 2, - 4, 0,126, 0, 5, 2,175, 3, 6, 2,199, 12, 7, 0,200, 12, 7, 2, 3, 0, 4, 0,126, 0, 7, 0,201, 12, 7, 0, 79, 1, - 8, 2, 11, 0, 11, 0,202, 12, 7, 0,203, 12, 7, 0,204, 12, 7, 0, 27, 0, 7, 0,205, 12, 2, 0,206, 12, 2, 0, 67, 0, - 7, 0,207, 12, 7, 0,208, 12, 7, 0,209, 12, 7, 0,210, 12, 6, 2, 3, 0, 7, 0,211, 12, 4, 0,126, 0, 4, 0, 18, 0, - 5, 2, 24, 0, 5, 2, 0, 0, 5, 2, 1, 0, 0, 0, 19, 0, 7, 0,212, 12, 7, 0,213, 12, 7, 0,214, 12, 7, 0,215, 12, - 7, 0, 4, 11, 4, 0,216, 12, 4, 0,217, 12, 6, 2,218, 12, 7, 0,219, 12, 7, 0,201, 12, 4, 0, 18, 0, 4, 0,220, 12, - 4, 0,221, 12, 7, 0, 84, 12, 2, 0,222, 12, 2, 0,227, 3, 2, 0,223, 12, 2, 0,224, 12, 2, 0,225, 12, 2, 0, 30, 0, - 7, 0,226, 12, 9, 2, 22, 0, 4, 0, 18, 0, 2, 0,227, 12, 2, 0,228, 12, 7, 0,229, 12, 2, 0,230, 12, 2, 0,231, 12, - 2, 0,232, 12, 2, 0,233, 12, 2, 0,234, 12, 2, 0,235, 12, 2, 0,236, 12, 2, 0, 3, 3, 4, 0,237, 12, 4, 0,238, 12, - 2, 0,239, 12, 2, 0,240, 12, 7, 0, 94, 1, 4, 0,241, 12, 4, 0,242, 12, 7, 0,243, 12, 7, 0,244, 12, 4, 0,247, 1, - 10, 2, 12, 0, 4, 0, 18, 0, 4, 0,245, 12, 4, 0,246, 12, 7, 0,247, 12, 5, 2,248, 12, 7, 0,249, 12, 7, 0,250, 12, - 7, 0,251, 12, 4, 0,190, 1, 4, 0,132, 0, 7, 0,148, 3, 52, 0,252, 12, 11, 2, 5, 0, 4, 0, 18, 0, 7, 0,201, 12, - 4, 0,253, 12, 4, 0,254, 12, 7, 2,255, 12, 12, 2, 7, 0, 12, 2, 0, 0, 12, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, - 7, 0,148, 3, 14, 0, 0, 13, 11, 2, 1, 13, 13, 2, 1, 0, 0, 0, 2, 13, 4, 2, 10, 0, 9, 2, 3, 13, 8, 2, 4, 13, - 14, 0, 0, 13, 11, 2, 1, 13, 10, 2, 5, 13, 5, 2, 6, 13, 14, 0, 7, 13, 4, 0, 8, 13, 4, 0, 9, 13, 13, 2, 89, 6, - 14, 2, 48, 0, 14, 2, 0, 0, 14, 2, 1, 0,169, 0,145, 3, 15, 2, 2, 0, 64, 0, 10, 13,187, 0,154, 4,139, 0,153, 4, - 14, 0, 21, 3, 4, 0, 11, 13, 0, 0, 19, 0, 2, 0,161, 10, 2, 0, 16, 0, 2, 0, 12, 13, 2, 0, 13, 13, 2, 0, 14, 13, - 2, 0, 15, 13, 2, 0, 16, 13, 2, 0, 17, 13, 4, 0, 92, 0, 4, 0,186, 3, 4, 0, 18, 13, 4, 0, 19, 13, 4, 0,192, 9, - 4, 0,193, 9, 4, 0, 27, 0, 7, 0, 20, 13, 47, 0, 21, 13, 0, 0, 22, 13, 4, 0, 23, 13, 4, 0,161, 12, 7, 0, 24, 13, - 7, 0, 25, 13, 7, 0, 26, 13, 7, 0, 27, 13, 7, 0, 28, 13, 7, 0, 29, 13, 7, 0, 30, 13, 7, 0, 31, 13, 7, 0, 32, 13, - 7, 0, 33, 13, 7, 0, 34, 13, 7, 0, 35, 13, 7, 0, 36, 13, 7, 0, 37, 13, 0, 0,202, 2, 0, 0, 38, 13, 0, 0, 39, 13, - 0, 0, 40, 13,169, 0, 7, 0,168, 0, 41, 13,143, 0, 35, 3, 14, 0, 42, 13, 2, 0, 43, 13, 2, 0, 92, 0, 4, 0, 27, 0, - 0, 0, 44, 13,170, 0, 24, 0,168, 0, 41, 13,143, 0, 35, 3,150, 0, 56, 3, 63, 0, 26, 2, 4, 0, 92, 0, 4, 0, 45, 13, - 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,178, 1, 7, 0, 46, 13, 7, 0, 47, 13, 7, 0, 48, 13, 7, 0, 49, 13, - 50, 0, 50, 13, 50, 0, 51, 13, 2, 0, 52, 13, 2, 0,221, 10, 2, 0, 53, 13, 2, 0, 27, 0, 7, 0, 54, 13, 7, 0, 55, 13, - 7, 0, 56, 13, 7, 0, 57, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 92, 8, 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8, 2, 0, 97, 8, 2, 0, 98, 8, 2, 0, 99, 8, + 2, 0,100, 8, 7, 0,101, 8, 4, 0,102, 8, 7, 0,103, 8, 2, 0, 19, 6, 2, 0, 20, 6, 2, 0,104, 8, 2, 0,105, 8, + 50, 0,106, 8, 7, 0,107, 8, 2, 0,108, 8, 2, 0,247, 1, 0, 0,109, 8, 4, 0,110, 8, 4, 0,111, 8, 7, 0,112, 8, + 7, 0, 27, 0, 27, 1, 24, 0, 22, 0, 32, 0, 14, 0,113, 8, 14, 0,114, 8, 14, 0,115, 8, 14, 0,147, 6, 41, 0,125, 0, + 41, 0,116, 8, 4, 0,117, 8, 4, 0, 67, 0, 2, 0,118, 8, 2, 0,119, 8, 2, 0,120, 8, 2, 0,121, 8, 2, 0,122, 8, + 2, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, 2, 0,126, 8, 2, 0,127, 8, 2, 0,128, 8, 2, 0, 27, 0,237, 0,129, 8, + 11, 0,130, 8, 2, 0,131, 8, 28, 1, 5, 0, 28, 1, 0, 0, 28, 1, 1, 0, 28, 1,132, 8, 15, 0,133, 8, 4, 0, 18, 0, + 29, 1, 7, 0, 29, 1, 0, 0, 29, 1, 1, 0, 28, 1,134, 8, 28, 1,135, 8, 2, 0,123, 5, 2, 0, 18, 0, 4, 0, 27, 0, + 30, 1, 25, 0, 30, 1, 0, 0, 30, 1, 1, 0, 31, 1,136, 8, 32, 1,240, 6, 0, 0,137, 8, 0, 0,138, 8, 0, 0,139, 8, + 2, 0,140, 8, 2, 0,141, 8, 2, 0,142, 8, 2, 0,143, 8, 2, 0,144, 8, 2, 0, 27, 0, 2, 0, 18, 0, 2, 0,145, 8, + 2, 0,146, 8, 2, 0,147, 8, 4, 0,148, 8, 30, 1,149, 8, 11, 0,150, 8, 4, 0,151, 8, 4, 0,152, 8, 4, 0,153, 8, + 4, 0,154, 8, 0, 0,155, 8, 33, 1, 22, 0, 33, 1, 0, 0, 33, 1, 1, 0, 28, 1,134, 8, 28, 1,135, 8, 28, 1,156, 8, + 28, 1,157, 8, 27, 1,158, 8, 18, 0, 51, 0, 0, 0,148, 6, 0, 0,159, 8, 2, 0,193, 6, 2, 0,194, 6, 2, 0,160, 8, + 2, 0, 27, 0, 2, 0,122, 8, 2, 0, 54, 7, 2, 0, 18, 0, 34, 1,136, 8, 14, 0,161, 8, 14, 0,147, 6, 14, 0,162, 8, + 14, 0,163, 8, 35, 1, 24, 0, 35, 1, 0, 0, 35, 1, 1, 0,240, 0,201, 6, 18, 0,164, 8, 18, 0,165, 8, 2, 0,193, 6, + 2, 0,194, 6, 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 2, 0, 18, 0, 7, 0, 93, 2, 2, 0,142, 8, 2, 0,143, 8, + 2, 0,121, 8, 2, 0,169, 8, 2, 0,126, 8, 2, 0, 86, 1, 36, 1,136, 8, 14, 0,170, 8, 14, 0,171, 8, 14, 0,162, 8, + 0, 0,172, 8, 11, 0,173, 8, 37, 1, 14, 0, 0, 0,174, 8, 2, 0,175, 8, 2, 0,176, 8, 2, 0,177, 8, 2, 0,178, 8, + 2, 0,112, 5, 2, 0,179, 8, 27, 1,180, 8, 41, 0,181, 8, 4, 0,182, 8, 4, 0,183, 8, 4, 0,184, 8, 4, 0, 27, 0, + 0, 0, 71, 7, 38, 1, 3, 0, 0, 0,185, 8, 4, 0,186, 8, 4, 0,187, 8, 39, 1, 4, 0, 4, 0, 8, 7, 4, 0,188, 8, + 4, 0, 14, 7, 4, 0,189, 8, 40, 1, 2, 0, 4, 0,190, 8, 4, 0,191, 8, 41, 1, 5, 0, 7, 0,192, 8, 7, 0,193, 8, + 7, 0,194, 8, 4, 0, 18, 0, 4, 0, 27, 0, 42, 1, 7, 0, 0, 0,195, 8, 0, 0,222, 6, 44, 0,138, 0, 2, 0,196, 8, + 2, 0, 74, 5, 2, 0,197, 8, 2, 0,198, 8, 43, 1, 12, 0, 43, 1, 0, 0, 43, 1, 1, 0, 4, 0, 28, 0, 4, 0,199, 8, + 4, 0,200, 8, 4, 0,201, 8, 38, 1,202, 8, 0, 0,195, 8, 42, 1,176, 3, 39, 1,203, 8, 40, 1,204, 8, 41, 1,205, 8, + 44, 1, 12, 0, 0, 0, 35, 0, 11, 0,227, 0, 0, 0,228, 0, 4, 0,231, 0, 4, 0,239, 0, 11, 0,232, 0, 7, 0,234, 0, + 7, 0,235, 0, 11, 0,206, 8, 11, 0,207, 8, 11, 0,236, 0, 11, 0,238, 0, 45, 1, 50, 0, 45, 1, 0, 0, 45, 1, 1, 0, + 11, 0,208, 8, 11, 0, 25, 0, 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0, 4, 0, 90, 0, 4, 0,209, 8, + 4, 0,210, 8, 4, 0,200, 8, 4, 0,201, 8, 4, 0,211, 8, 4, 0,250, 0, 4, 0,212, 8, 4, 0,213, 8, 7, 0,214, 8, + 7, 0,215, 8, 7, 0,216, 8, 2, 0,217, 8, 2, 0,218, 8, 4, 0,219, 8, 4, 0,220, 8, 43, 1,221, 8, 31, 0, 80, 0, + 41, 0,125, 0, 27, 0,222, 8, 44, 0,138, 0,229, 0,107, 6, 7, 0,223, 8, 7, 0,224, 8, 44, 1, 71, 1, 45, 1,225, 8, + 45, 1,226, 8, 45, 1,227, 8, 14, 0,228, 8, 46, 1,229, 8, 11, 0,230, 8, 7, 0, 84, 4, 7, 0,231, 8, 7, 0,232, 8, + 7, 0,233, 8, 11, 0,234, 8, 4, 0,235, 8, 4, 0,236, 8, 4, 0,237, 8, 7, 0,238, 8, 4, 0,129, 0, 4, 0, 27, 0, + 47, 1, 4, 0, 47, 1, 0, 0, 47, 1, 1, 0, 14, 0,239, 8, 45, 1,240, 8,226, 0, 11, 0, 14, 0,241, 8, 14, 0,228, 8, + 14, 0,242, 8, 45, 1,243, 8, 0, 0,244, 8, 0, 0,245, 8, 4, 0,246, 8, 4, 0,247, 8, 4, 0,248, 8, 4, 0, 27, 0, + 19, 0,249, 8, 48, 1, 4, 0, 7, 0,250, 8, 7, 0, 94, 3, 2, 0,251, 8, 2, 0,252, 8, 49, 1, 6, 0, 7, 0,253, 8, + 7, 0,254, 8, 7, 0,255, 8, 7, 0, 0, 9, 4, 0, 1, 9, 4, 0, 2, 9, 50, 1, 8, 0, 7, 0, 3, 9, 7, 0, 4, 9, + 7, 0, 5, 9, 7, 0, 6, 9, 7, 0, 7, 9, 4, 0,250, 2, 4, 0, 8, 9, 4, 0, 9, 9, 51, 1, 2, 0, 7, 0,182, 5, + 7, 0, 27, 0, 52, 1, 5, 0, 7, 0, 10, 9, 7, 0, 11, 9, 4, 0, 92, 0, 4, 0,212, 2, 4, 0, 12, 9, 53, 1, 6, 0, + 53, 1, 0, 0, 53, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0, 56, 0, 54, 1, 8, 0, 54, 1, 0, 0, + 54, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0, 56, 0, 7, 0, 22, 0, 7, 0,129, 0, 55, 1, 45, 0, + 55, 1, 0, 0, 55, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0,246, 0, 2, 0,126, 4, 2, 0, 14, 9, + 7, 0, 15, 9, 7, 0, 91, 0, 7, 0, 7, 3, 4, 0, 16, 9, 4, 0, 82, 0, 4, 0,214, 2, 7, 0, 17, 9, 7, 0, 18, 9, + 7, 0, 19, 9, 7, 0, 20, 9, 7, 0, 21, 9, 7, 0, 22, 9, 7, 0, 4, 3, 7, 0, 68, 1, 7, 0, 23, 9, 7, 0, 24, 9, + 7, 0, 27, 0, 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9, 2, 0, 28, 9, 2, 0, 29, 9, 2, 0, 30, 9, 2, 0, 31, 9, + 2, 0, 32, 9, 2, 0, 33, 9, 2, 0, 34, 9, 2, 0, 35, 9, 2, 0, 32, 2, 2, 0, 36, 9, 2, 0, 29, 2, 2, 0, 37, 9, + 0, 0, 38, 9, 0, 0, 39, 9, 7, 0,244, 0, 56, 1, 40, 9, 64, 0,250, 1, 57, 1, 16, 0, 57, 1, 0, 0, 57, 1, 1, 0, + 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0,246, 0, 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2, + 7, 0, 2, 3, 7, 0, 3, 3, 7, 0, 41, 9, 7, 0, 4, 3, 7, 0, 6, 3, 7, 0, 7, 3,253, 0, 5, 0, 2, 0, 16, 0, + 2, 0, 42, 9, 2, 0, 18, 0, 2, 0, 43, 9, 22, 0, 43, 7,252, 0, 3, 0, 4, 0, 69, 0, 4, 0, 44, 9,253, 0, 2, 0, + 58, 1, 7, 0, 58, 1, 0, 0, 58, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 21, 0, 11, 0, 45, 9, + 59, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 1, 7, 0, 46, 9, 4, 0, 47, 9, 4, 0, 27, 0, 60, 1, 4, 0, 2, 0, 16, 0, + 2, 0, 18, 0, 2, 0, 67, 0, 2, 0, 30, 0, 61, 1, 4, 0, 0, 0, 19, 0, 63, 0, 48, 9, 7, 0, 94, 1, 7, 0, 27, 0, + 62, 1, 6, 0, 2, 0, 49, 9, 2, 0, 50, 9, 2, 0, 16, 0, 2, 0, 51, 9, 0, 0, 52, 9, 0, 0, 53, 9, 63, 1, 5, 0, + 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 0, 0, 54, 9, 0, 0, 55, 9, 64, 1, 3, 0, 4, 0, 16, 0, 4, 0, 27, 0, + 0, 0, 19, 0, 65, 1, 4, 0, 2, 0, 56, 9, 2, 0, 57, 9, 2, 0, 18, 0, 2, 0, 27, 0, 66, 1, 6, 0, 0, 0, 19, 0, + 0, 0, 58, 9, 2, 0, 59, 9, 2, 0, 4, 3, 2, 0, 87, 1, 2, 0, 30, 0, 67, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 3, + 7, 0,217, 4, 2, 0, 18, 0, 2, 0,226, 2, 68, 1, 3, 0, 0, 0, 19, 0, 4, 0,214, 2, 4, 0, 56, 9, 69, 1, 7, 0, + 0, 0, 19, 0, 7, 0,217, 4, 0, 0, 60, 9, 0, 0, 61, 9, 2, 0, 87, 1, 2, 0, 67, 0, 4, 0, 62, 9, 70, 1, 4, 0, + 0, 0, 63, 9, 0, 0, 64, 9, 4, 0, 16, 0, 7, 0,230, 2, 71, 1, 3, 0, 27, 0, 65, 9, 0, 0, 66, 9, 0, 0, 67, 9, + 72, 1, 18, 0, 72, 1, 0, 0, 72, 1, 1, 0, 2, 0, 16, 0, 2, 0, 68, 9, 2, 0, 18, 0, 2, 0, 69, 9, 2, 0, 70, 9, + 2, 0, 71, 9, 2, 0, 67, 0, 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 73, 1, 72, 9, 27, 0, 44, 0, 2, 0,218, 5, + 2, 0,176, 2, 2, 0, 73, 9, 2, 0, 27, 0, 74, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 74, 9, 2, 0, 18, 0, + 2, 0,226, 2, 2, 0, 75, 9, 4, 0, 76, 9, 4, 0, 77, 9, 4, 0, 78, 9, 4, 0, 79, 9, 4, 0, 80, 9, 75, 1, 1, 0, + 0, 0, 81, 9, 76, 1, 4, 0, 37, 0, 7, 7, 0, 0, 22, 8, 4, 0, 87, 1, 4, 0, 18, 0, 73, 1, 18, 0, 73, 1, 0, 0, + 73, 1, 1, 0, 73, 1, 82, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 83, 9, 2, 0, 71, 9, 2, 0, 68, 9, 2, 0, 84, 9, + 2, 0, 30, 0, 2, 0,247, 1, 0, 0, 19, 0, 11, 0, 2, 0, 77, 1, 72, 9, 72, 1, 85, 9, 2, 0, 14, 0, 2, 0, 86, 9, + 4, 0, 87, 9, 78, 1, 3, 0, 4, 0,240, 2, 4, 0, 27, 0, 27, 0, 44, 0, 79, 1, 15, 0,176, 0, 88, 9, 2, 0, 16, 0, + 2, 0, 18, 0, 7, 0, 15, 9, 7, 0, 91, 0, 0, 0, 19, 0, 0, 0, 89, 9, 2, 0, 90, 9, 2, 0, 91, 9, 2, 0,134, 0, + 2, 0, 92, 9, 2, 0, 93, 9, 2, 0, 27, 0, 7, 0, 94, 9, 7, 0, 95, 9, 80, 1, 8, 0, 7, 0, 96, 9, 7, 0, 97, 9, + 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 7, 0,101, 9, 7, 0,102, 9, 7, 0,103, 9, 81, 1, 13, 0, 2, 0, 18, 0, + 2, 0,104, 9, 4, 0, 67, 0, 4, 0, 30, 0, 2, 0,178, 6, 7, 0, 84, 4, 7, 0,231, 8, 46, 1,229, 8, 80, 1,105, 9, + 2, 0, 16, 0, 2, 0,117, 5, 2, 0,216, 3, 2, 0,106, 9, 82, 1, 11, 0, 4, 0,240, 2, 2, 0, 16, 0, 2, 0, 18, 0, + 27, 0, 44, 0, 79, 0,107, 9, 0, 0, 19, 0, 7, 0,108, 9, 7, 0,109, 9, 7, 0,222, 3, 2, 0,110, 9, 2, 0,111, 9, + 83, 1, 5, 0, 2, 0, 16, 0, 2, 0, 67, 0, 4, 0, 27, 0, 41, 0,125, 0, 27, 0,210, 5, 84, 1, 5, 0, 4, 0, 27, 0, + 4, 0, 16, 0, 0, 0, 19, 0, 0, 0, 54, 9, 27, 0, 44, 0, 85, 1, 13, 0, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 68, 9, + 2, 0,223, 3, 7, 0,112, 9, 7, 0,113, 9, 7, 0, 86, 1, 7, 0,114, 9, 7, 0,192, 3, 7, 0,196, 3, 7, 0,115, 9, + 7, 0,116, 9, 27, 0,117, 9, 86, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 15, 9, 7, 0, 91, 0, 0, 0, 19, 0, + 0, 0, 89, 9, 2, 0, 67, 0, 2, 0, 30, 0, 2, 0,247, 1, 2, 0,117, 5, 87, 1, 8, 0, 27, 0, 44, 0, 7, 0, 1, 3, + 7, 0,118, 9, 7, 0,119, 9, 7, 0,223, 3, 2, 0, 67, 0, 2, 0,226, 2, 7, 0, 30, 0, 88, 1, 12, 0, 2, 0, 16, 0, + 2, 0, 87, 1, 2, 0, 18, 0, 2, 0, 4, 3, 2, 0,240, 2, 2, 0,120, 9, 4, 0, 27, 0, 7, 0,121, 9, 7, 0,122, 9, + 7, 0,123, 9, 7, 0,124, 9, 0, 0,125, 9, 89, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 15, 9, 4, 0, 91, 0, + 0, 0, 19, 0, 2, 0, 86, 1, 2, 0, 63, 0, 2, 0,126, 9, 2, 0,127, 9, 90, 1, 7, 0, 4, 0,214, 2, 4, 0,128, 9, + 4, 0,129, 9, 4, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 0, 0, 60, 9, 91, 1, 7, 0, 0, 0,133, 9, 27, 0,134, 9, + 0, 0, 66, 9, 2, 0,135, 9, 2, 0, 67, 0, 4, 0, 30, 0, 0, 0, 67, 9, 92, 1, 6, 0, 2, 0, 18, 0, 2, 0, 16, 0, + 4, 0, 15, 9, 4, 0, 91, 0, 0, 0,136, 9, 0, 0,137, 9, 93, 1, 1, 0, 4, 0, 18, 0, 94, 1, 6, 0, 0, 0, 94, 0, + 2, 0, 16, 0, 2, 0, 18, 0, 4, 0,138, 9, 7, 0,139, 9, 37, 0, 7, 7, 95, 1, 4, 0, 0, 0,181, 2, 2, 0, 18, 0, + 4, 0, 16, 0, 27, 0, 44, 0, 96, 1, 2, 0, 4, 0, 16, 0, 4, 0,182, 6, 97, 1, 8, 0, 0, 0, 63, 9, 0, 0, 64, 9, + 4, 0, 16, 0, 7, 0, 40, 2, 7, 0,140, 9, 7, 0, 27, 0, 27, 0, 70, 3, 27, 0,141, 9, 98, 1, 11, 0, 0, 0, 55, 6, + 0, 0, 18, 0, 2, 0,142, 9, 4, 0, 16, 0, 7, 0, 94, 1, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, 4, 0,146, 9, + 27, 0, 70, 3, 27, 0,147, 9, 77, 1, 10, 0, 77, 1, 0, 0, 77, 1, 1, 0, 77, 1, 82, 9, 2, 0, 16, 0, 2, 0, 18, 0, + 2, 0, 68, 9, 2, 0,148, 9, 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 44, 0, 46, 1, 17, 0, 22, 0, 32, 0, 0, 0, 35, 0, + 38, 0,153, 0, 11, 0,227, 0, 38, 0,149, 9, 31, 0, 80, 0, 7, 0, 84, 4, 7, 0,150, 9, 7, 0,231, 8, 7, 0, 96, 9, + 7, 0, 97, 9, 7, 0,151, 9, 4, 0, 92, 0, 4, 0, 27, 0, 11, 0,152, 9, 11, 0,153, 9, 11, 0,154, 9, 99, 1, 6, 0, + 99, 1, 0, 0, 99, 1, 1, 0, 27, 0, 44, 0, 11, 0,155, 9, 2, 0,251, 0, 0, 0,211, 2, 64, 0, 4, 0, 22, 0, 32, 0, + 14, 0,156, 9, 4, 0,134, 0, 7, 0,157, 9,100, 1, 28, 0,100, 1, 0, 0,100, 1, 1, 0, 21, 0,158, 9,100, 1, 38, 0, + 14, 0,159, 9, 0, 0, 19, 0, 7, 0,160, 9, 7, 0,161, 9, 7, 0,162, 9, 7, 0,163, 9, 4, 0, 18, 0, 7, 0,164, 9, + 7, 0,165, 9, 7, 0,166, 9, 7, 0,167, 9, 7, 0, 94, 1, 7, 0, 40, 2, 7, 0,168, 9, 7, 0,212, 2, 7, 0,169, 9, + 7, 0,170, 9, 7, 0,171, 9, 7, 0,172, 9, 7, 0,173, 9, 7, 0,176, 0, 4, 0,134, 0, 2, 0,255, 5, 2, 0,174, 9, +101, 1, 27, 0, 22, 0, 32, 0, 34, 0, 75, 0, 14, 0,175, 9, 14, 0,176, 9, 14, 0,177, 9,100, 1,178, 9, 11, 0,179, 9, + 11, 0,180, 9, 4, 0, 18, 0, 4, 0,158, 6, 4, 0,181, 9, 4, 0, 27, 0, 2, 0, 8, 3, 2, 0,212, 6, 4, 0,182, 9, + 4, 0,134, 0, 4, 0,183, 9, 2, 0,184, 9, 2, 0,185, 9, 2, 0,186, 9, 2, 0,187, 9, 4, 0,188, 9, 4, 0,189, 9, + 4, 0,190, 9, 4, 0,191, 9, 4, 0,192, 9, 4, 0,193, 9,102, 1, 2, 0, 7, 0,165, 2, 4, 0, 18, 0,180, 0, 5, 0, +102, 1,194, 9, 4, 0,212, 2, 4, 0,195, 9, 4, 0,196, 9, 4, 0, 18, 0,179, 0, 16, 0, 4, 0,197, 9, 4, 0,198, 9, + 4, 0,199, 9, 4, 0,200, 9, 2, 0,201, 9, 2, 0,202, 9, 2, 0,203, 9, 2, 0,251, 0, 2, 0,204, 9, 2, 0,205, 9, + 2, 0,206, 9, 2, 0,207, 9, 4, 0,208, 9, 4, 0,209, 9, 4, 0,210, 9, 4, 0,211, 9,103, 1, 40, 0,103, 1, 0, 0, +103, 1, 1, 0, 21, 0,158, 9, 14, 0,251, 3, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,212, 9, 2, 0,209, 3, 2, 0,213, 9, + 0, 0,214, 9, 0, 0,215, 9, 0, 0,216, 9,100, 1,217, 9,103, 1, 38, 0,103, 1,218, 9, 14, 0,219, 9, 14, 0,220, 9, +180, 0,184, 3, 27, 0,221, 9,103, 1,222, 9, 7, 0, 77, 1, 7, 0,176, 0, 7, 0,223, 9, 7, 0, 19, 2, 7, 0,198, 3, + 7, 0,200, 3, 2, 0,232, 3, 2, 0, 27, 0, 7, 0,224, 9, 7, 0,225, 9, 7, 0,203, 3, 7, 0,226, 9, 7, 0,227, 9, + 7, 0,228, 9, 7, 0,229, 9, 7, 0,230, 9, 7, 0,231, 9, 7, 0,232, 9, 7, 0,233, 9, 11, 0,234, 9,177, 0, 16, 0, + 14, 0,235, 9, 74, 0,236, 9, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,237, 9, 4, 0, 67, 0, 7, 0, 84, 0, 7, 0,238, 9, + 7, 0,239, 9, 14, 0,240, 9, 4, 0,241, 9, 4, 0,242, 9, 11, 0,243, 9, 11, 0,244, 9,179, 0,183, 3, 0, 0,245, 9, +104, 1, 1, 0, 4, 0,242, 9,105, 1, 12, 0, 4, 0,242, 9, 7, 0, 80, 9, 2, 0,246, 9, 2, 0,247, 9, 7, 0,248, 9, + 7, 0,249, 9, 2, 0,250, 9, 2, 0, 18, 0, 7, 0,251, 9, 7, 0,252, 9, 7, 0,253, 9, 7, 0,254, 9,106, 1, 7, 0, +106, 1, 0, 0,106, 1, 1, 0, 14, 0,255, 9, 4, 0, 18, 0, 4, 0, 0, 10, 0, 0, 19, 0, 22, 1, 1, 10,176, 0, 9, 0, + 22, 0, 32, 0, 14, 0, 2, 10, 14, 0,235, 9, 14, 0, 3, 10, 14, 0,102, 0, 4, 0, 18, 0, 4, 0, 4, 10, 4, 0, 5, 10, + 4, 0, 27, 0,243, 0, 8, 0, 22, 0, 6, 10, 14, 0,235, 9, 64, 0, 7, 10, 0, 0, 8, 10, 4, 0, 9, 10, 4, 0, 18, 0, + 4, 0, 10, 10, 4, 0, 27, 0,107, 1, 13, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, + 2, 0,150, 6,240, 0,201, 6,176, 0,179, 3,243, 0, 11, 10, 0, 0, 87, 1, 0, 0,204, 6, 2, 0, 18, 0, 7, 0, 12, 10, +108, 1, 8, 0,108, 1, 0, 0,108, 1, 1, 0,106, 1, 13, 10, 31, 0, 80, 0, 14, 0,185, 3, 4, 0, 18, 0, 0, 0, 19, 0, + 4, 0,119, 8,109, 1, 5, 0,109, 1, 0, 0,109, 1, 1, 0, 31, 0, 80, 0, 2, 0, 18, 0, 0, 0, 14, 10,110, 1, 14, 0, +110, 1, 0, 0,110, 1, 1, 0, 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 15, 10, 0, 0, 16, 10, 0, 0, 19, 0, + 2, 0, 27, 0, 7, 0, 17, 10, 7, 0, 18, 10, 31, 0, 80, 0, 7, 0, 19, 10, 7, 0, 20, 10,111, 1, 9, 0,111, 1, 0, 0, +111, 1, 1, 0, 27, 0, 21, 10, 0, 0, 11, 3, 7, 0, 22, 10, 2, 0, 23, 10, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 24, 10, +112, 1, 7, 0, 37, 0, 7, 7, 21, 0,158, 9, 4, 0, 18, 0, 4, 0, 25, 10, 14, 0, 26, 10, 27, 0, 21, 10, 0, 0, 11, 3, +113, 1, 15, 0, 27, 0, 21, 10, 2, 0, 27, 10, 2, 0, 18, 0, 2, 0, 28, 10, 2, 0, 29, 10, 0, 0, 11, 3, 27, 0, 30, 10, + 0, 0, 31, 10, 7, 0, 32, 10, 7, 0, 40, 2, 7, 0, 33, 10, 7, 0, 34, 10, 2, 0, 16, 0, 2, 0, 87, 1, 7, 0, 94, 1, +114, 1, 6, 0, 27, 0, 21, 10, 7, 0,194, 9, 2, 0, 35, 10, 2, 0, 36, 10, 2, 0, 18, 0, 2, 0, 37, 10,115, 1, 6, 0, + 27, 0, 21, 10, 4, 0, 38, 10, 4, 0, 39, 10, 4, 0, 92, 0, 4, 0, 27, 0, 0, 0, 11, 3,116, 1, 4, 0, 27, 0, 21, 10, + 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3,117, 1, 4, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3, +118, 1, 4, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3,119, 1, 2, 0, 4, 0, 18, 0, 7, 0, 84, 4, +120, 1, 2, 0, 27, 0, 21, 10, 0, 0, 11, 3,121, 1, 10, 0, 27, 0, 21, 10, 4, 0, 40, 10, 7, 0,128, 0, 4, 0, 18, 0, + 2, 0, 5, 7, 2, 0, 41, 10, 2, 0, 67, 0, 2, 0, 30, 0, 7, 0, 42, 10, 0, 0, 11, 3,122, 1, 10, 0, 27, 0, 21, 10, + 2, 0, 16, 0, 2, 0,134, 4, 4, 0, 90, 0, 4, 0, 91, 0, 7, 0,118, 9, 7, 0,119, 9, 4, 0, 27, 0,176, 0, 88, 9, + 0, 0, 11, 3,123, 1, 4, 0, 27, 0, 21, 10, 4, 0,210, 3, 4, 0, 43, 10, 0, 0, 11, 3,124, 1, 4, 0, 27, 0, 21, 10, + 4, 0,210, 3, 4, 0, 27, 0, 0, 0, 11, 3,125, 1, 6, 0, 27, 0, 21, 10, 7, 0,128, 0, 7, 0, 82, 3, 4, 0, 44, 10, + 2, 0,210, 3, 2, 0,211, 3,126, 1, 6, 0, 27, 0, 21, 10, 4, 0, 45, 10, 4, 0, 46, 10, 7, 0, 47, 10, 7, 0, 48, 10, + 0, 0, 11, 3,127, 1, 16, 0, 27, 0, 21, 10, 27, 0,218, 9, 4, 0, 16, 0, 7, 0, 49, 10, 7, 0, 50, 10, 7, 0, 51, 10, + 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, 7, 0, 55, 10, 7, 0, 56, 10, 7, 0, 57, 10, 2, 0, 18, 0, 2, 0, 27, 0, + 2, 0, 67, 0, 2, 0, 30, 0,128, 1, 3, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 32, 2,129, 1, 5, 0, 27, 0, 21, 10, + 4, 0, 18, 0, 4, 0, 27, 0, 7, 0, 58, 10, 0, 0, 11, 3,130, 1, 10, 0, 27, 0, 21, 10, 0, 0, 11, 3, 2, 0, 59, 10, + 2, 0, 60, 10, 0, 0, 61, 10, 0, 0, 62, 10, 7, 0, 63, 10, 7, 0, 64, 10, 7, 0, 65, 10, 7, 0, 66, 10,131, 1, 5, 0, + 27, 0, 21, 10, 0, 0, 11, 3, 7, 0,220, 2, 2, 0, 67, 10, 2, 0, 18, 0,132, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, + 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2,133, 1, 8, 0, 7, 0, 8, 0, + 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2,134, 1, 8, 0, + 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2, +135, 1, 7, 0, 27, 0, 21, 10, 0, 0, 11, 3, 7, 0, 94, 1, 7, 0,103, 1, 2, 0, 18, 0, 2, 0, 87, 1, 4, 0, 27, 0, +136, 1, 5, 0, 27, 0, 70, 3, 7, 0, 94, 1, 2, 0, 74, 3, 0, 0, 76, 3, 0, 0, 70, 10,137, 1, 7, 0,229, 0,107, 6, + 0, 0, 71, 10, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 72, 10, 27, 0,210, 5, 27, 0, 73, 10,138, 1, 3, 0,229, 0,107, 6, + 4, 0, 18, 0, 4, 0, 27, 0,139, 1, 6, 0,229, 0,107, 6, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 72, 10, 7, 0, 58, 10, + 27, 0,210, 5,140, 1, 10, 0,140, 1, 0, 0,140, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 74, 10, 7, 0, 31, 1, + 7, 0, 32, 1, 2, 0,255, 9, 2, 0, 75, 10, 27, 0, 44, 0,141, 1, 22, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 18, 0, + 2, 0, 87, 1, 2, 0, 76, 10, 2, 0, 77, 10, 31, 0, 80, 0,176, 0, 88, 9, 27, 0,168, 0, 7, 0, 90, 0, 7, 0, 91, 0, + 7, 0, 78, 10, 7, 0, 79, 10, 7, 0, 80, 10, 7, 0, 81, 10, 7, 0,253, 2, 7, 0,148, 3, 7, 0, 90, 9, 7, 0, 82, 10, + 0, 0, 83, 10, 0, 0, 84, 10, 14, 0,188, 3,142, 1, 11, 0, 7, 0, 47, 2, 7, 0,118, 9, 7, 0,119, 9, 11, 0, 2, 0, + 2, 0, 85, 10, 2, 0, 86, 10, 2, 0, 87, 10, 2, 0, 88, 10, 2, 0, 89, 10, 2, 0, 90, 10, 2, 0,181, 2,143, 1, 21, 0, +143, 1, 0, 0,143, 1, 1, 0,143, 1, 91, 10, 0, 0, 19, 0, 11, 0, 92, 10, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 93, 10, + 2, 0, 94, 10, 7, 0, 95, 10, 7, 0, 96, 10, 11, 0, 97, 10, 2, 0, 98, 10, 2, 0, 99, 10, 4, 0,247, 1, 11, 0,152, 9, + 4, 0,100, 10, 4, 0,101, 10,143, 1,102, 10,144, 1,103, 10,142, 1,104, 10,145, 1, 4, 0, 0, 0,105, 10, 2, 0,106, 10, + 2, 0,107, 10, 4, 0, 27, 0,146, 1, 37, 0,146, 1, 0, 0,146, 1, 1, 0,146, 1,108, 10, 0, 0, 19, 0, 2, 0, 16, 0, + 2, 0, 18, 0, 2, 0,199, 8, 2, 0,176, 2, 2, 0,109, 10, 2, 0, 10, 7, 2, 0, 98, 10, 2, 0, 42, 9, 14, 0, 83, 9, + 14, 0,110, 10,146, 1, 38, 0, 22, 0, 43, 7, 11, 0, 92, 10, 7, 0, 95, 10, 7, 0, 96, 10, 7, 0, 82, 2, 7, 0, 1, 3, + 7, 0,111, 10, 4, 0,112, 10, 0, 0,113, 10, 2, 0,114, 10, 2, 0,115, 10, 7, 0,116, 10, 7, 0,117, 10, 2, 0,118, 10, + 2, 0,119, 10, 11, 0,120, 10, 19, 0,121, 10, 19, 0,122, 10, 19, 0,123, 10,145, 1,154, 0,147, 1,124, 10,148, 1,125, 10, +144, 1, 8, 0,144, 1, 0, 0,144, 1, 1, 0,146, 1,126, 10,146, 1,127, 10,143, 1,128, 10,143, 1,129, 10, 4, 0, 18, 0, + 4, 0, 27, 0, 57, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0,178, 0,182, 3, 14, 0,130, 10, 14, 0,131, 10, 4, 0, 16, 0, + 4, 0,132, 10, 4, 0,133, 10, 4, 0, 18, 0, 4, 0,112, 10, 4, 0,134, 10, 14, 0, 83, 9, 14, 0,110, 10,149, 1,135, 10, + 11, 0,136, 10, 11, 0,137, 10, 4, 0,138, 10, 11, 0,139, 10, 11, 0,140, 10, 11, 0,141, 10,150, 1, 4, 0, 4, 0, 17, 0, + 4, 0,230, 2, 4, 0,118, 9, 4, 0,119, 9,151, 1, 4, 0, 4, 0, 17, 0, 7, 0,230, 2, 7, 0,118, 9, 7, 0,119, 9, +152, 1, 2, 0, 0, 0,230, 2, 0, 0, 86, 1,153, 1, 4, 0, 4, 0, 17, 0, 7, 0,142, 10, 7, 0,118, 9, 7, 0,119, 9, +154, 1, 1, 0, 7, 0,143, 10,155, 1, 6, 0, 4, 0,127, 0, 4, 0,129, 0, 4, 0, 42, 9, 0, 0,144, 10, 0, 0,145, 10, + 2, 0, 27, 0,156, 1, 16, 0, 2, 0,142, 8, 2, 0,143, 8, 2, 0, 71, 5, 2, 0,146, 10, 2, 0,147, 10, 2, 0, 68, 0, + 2, 0, 44, 7, 2, 0,148, 10, 7, 0,252, 2, 7, 0,149, 10, 7, 0,150, 10, 2, 0,109, 1, 0, 0,151, 10, 0, 0,152, 10, + 4, 0,153, 10, 4, 0,154, 10,157, 1, 9, 0, 7, 0,155, 10, 7, 0,156, 10, 7, 0,151, 9, 7, 0, 94, 3, 7, 0,157, 10, + 7, 0,219, 6, 2, 0, 92, 3, 0, 0,158, 10, 0, 0, 27, 0,158, 1, 4, 0, 7, 0,159, 10, 7, 0,160, 10, 2, 0, 92, 3, + 2, 0, 27, 0,159, 1, 3, 0, 7, 0,161, 10, 7, 0,214, 8, 7, 0, 14, 0,160, 1, 4, 0, 0, 0, 35, 0,204, 0, 82, 5, + 4, 0,129, 0, 4, 0,132, 4,161, 1, 6, 0, 0, 0,162, 10,204, 0,163, 10, 4, 0,129, 0, 4, 0,132, 4, 4, 0,164, 10, + 4, 0, 27, 0,162, 1, 4, 0, 2, 0,165, 10, 2, 0,166, 10, 4, 0, 30, 0,204, 0,163, 10,163, 1, 9, 0, 7, 0,167, 10, + 7, 0,168, 10, 7, 0,169, 10, 7, 0, 93, 2, 7, 0,170, 10, 7, 0,171, 10, 7, 0,172, 10, 2, 0,173, 10, 2, 0,174, 10, +164, 1, 8, 0, 2, 0,175, 10, 2, 0,176, 10, 2, 0,177, 10, 2, 0,178, 10, 7, 0,179, 10, 7, 0,180, 10, 7, 0,181, 10, + 7, 0,182, 10,165, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,166, 1, 2, 0, 0, 0,170, 0, 0, 0,183, 10,167, 1, 1, 0, + 0, 0, 19, 0,168, 1, 12, 0, 0, 0,184, 10, 0, 0,185, 10, 0, 0,210, 6, 0, 0,186, 10, 2, 0, 71, 5, 2, 0,187, 10, + 7, 0,188, 10, 7, 0,189, 10, 7, 0,190, 10, 7, 0,148, 3, 7, 0,191, 10, 7, 0,192, 10,169, 1, 2, 0, 11, 0,193, 10, + 11, 0,194, 10,170, 1, 13, 0, 0, 0, 74, 5, 0, 0, 16, 0, 0, 0, 92, 3, 0, 0, 94, 3, 0, 0,185, 10, 0, 0,108, 0, + 0, 0,181, 2, 7, 0,195, 10, 7, 0,196, 10, 7, 0,147, 3, 7, 0,197, 10, 7, 0,198, 10, 7, 0,192, 10,171, 1, 8, 0, + 7, 0, 49, 9, 7, 0,128, 0, 7, 0,152, 10, 7, 0,172, 2, 7, 0,199, 10, 7, 0,240, 0, 7, 0,200, 10, 4, 0, 16, 0, +172, 1, 4, 0, 2, 0,201, 10, 2, 0,202, 10, 2, 0,203, 10, 2, 0, 27, 0,173, 1, 8, 0, 7, 0,204, 10, 7, 0,220, 2, + 7, 0,205, 10, 7, 0,192, 8, 7, 0,193, 8, 7, 0,194, 8, 7, 0,206, 10, 7, 0,207, 10,174, 1, 6, 0, 2, 0,208, 10, + 2, 0,209, 10, 7, 0,210, 10, 7, 0,211, 10, 7, 0,212, 10, 7, 0,213, 10,175, 1, 2, 0, 58, 0,214, 10, 59, 0,215, 10, +176, 1, 3, 0,175, 1, 80, 6, 7, 0,216, 10, 7, 0,217, 10,177, 1, 3, 0,175, 1, 80, 6, 4, 0,218, 10, 4, 0, 27, 0, +178, 1, 1, 0,175, 1, 80, 6,179, 1, 3, 0,175, 1, 80, 6, 4, 0,218, 10, 4, 0,219, 10,180, 1, 3, 0,175, 1, 80, 6, + 4, 0,220, 10, 4, 0, 27, 0,181, 1, 1, 0,175, 1, 80, 6,182, 1, 3, 0,175, 1, 80, 6, 4, 0,221, 10, 4, 0, 27, 0, +183, 1, 3, 0,175, 1, 80, 6, 4, 0,222, 10, 4, 0, 27, 0,184, 1, 3, 0,175, 1, 80, 6, 4, 0,223, 10, 4, 0, 27, 0, +185, 1, 3, 0,175, 1, 80, 6, 4, 0,250, 0, 4, 0, 27, 0,186, 1, 1, 0, 0, 0, 19, 0,187, 1, 1, 0, 0, 0, 19, 0, +188, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,224, 10,189, 1, 10, 0, 2, 0, 62, 4, 2, 0, 18, 0, + 7, 0,217, 4, 7, 0,225, 10, 7, 0,226, 10, 7, 0,227, 10, 7, 0,228, 10,188, 1,229, 10,188, 1,230, 10,188, 1,231, 10, + 54, 0, 11, 0, 4, 0, 18, 0, 4, 0, 63, 0, 4, 0,232, 10, 4, 0,233, 10, 19, 0,234, 10, 19, 0,235, 10,189, 1,236, 10, + 7, 0,237, 10, 7, 0,238, 10, 7, 0,239, 10, 7, 0,240, 10, 0, 1, 10, 0, 4, 0,255, 9, 4, 0,241, 10, 7, 0,242, 10, + 7, 0,243, 10, 7, 0,244, 10, 7, 0,245, 10, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 87, 1, 4, 0, 1, 3,255, 0, 18, 0, + 4, 0,132, 0, 4, 0,246, 10, 4, 0,247, 10, 7, 0,248, 10, 4, 0,249, 10, 7, 0,250, 10, 7, 0,251, 10, 4, 0,252, 10, + 7, 0,253, 10, 4, 0,254, 10, 7, 0,255, 10, 0, 1, 0, 11, 7, 0, 1, 11, 7, 0, 2, 11, 7, 0, 3, 11, 7, 0, 4, 11, + 4, 0, 5, 11, 4, 0, 27, 0,190, 1, 4, 0, 42, 0,244, 2, 7, 0, 6, 11, 7, 0,178, 1, 7, 0, 27, 0,213, 0, 35, 0, + 22, 0, 32, 0,190, 1, 7, 11, 54, 0,229, 10, 46, 0, 8, 11, 52, 0, 9, 11, 25, 0,154, 0, 0, 0, 10, 11, 7, 0, 11, 11, + 2, 0,110, 6, 2, 0, 12, 11, 7, 0, 40, 2, 4, 0,108, 0, 4, 0, 18, 0, 7, 0, 13, 11, 4, 0, 90, 2, 4, 0, 14, 11, + 7, 0, 15, 11, 7, 0, 16, 11, 7, 0, 17, 11, 7, 0,178, 1, 4, 0, 18, 11, 7, 0, 19, 11, 0, 0, 20, 11, 0, 0, 21, 11, + 0, 0, 22, 11, 0, 0, 27, 0, 7, 0, 23, 11, 7, 0, 24, 11, 7, 0, 25, 11, 7, 0, 1, 3, 7, 0, 26, 11, 4, 0, 27, 11, + 7, 0,242, 5, 7, 0, 28, 11, 7, 0, 29, 11,191, 1, 10, 0, 4, 0, 16, 0, 4, 0,128, 0, 4, 0, 18, 0, 4, 0, 15, 4, + 4, 0, 30, 11, 4, 0, 31, 11, 4, 0, 32, 11, 4, 0, 70, 0, 0, 0, 19, 0, 11, 0, 2, 0,192, 1, 1, 0, 0, 0, 71, 7, + 95, 0, 8, 0,191, 1, 33, 11, 4, 0, 34, 11, 4, 0, 35, 11, 4, 0, 36, 11, 4, 0, 37, 11, 4, 0, 30, 0, 11, 0, 38, 11, +192, 1, 39, 11,193, 1, 5, 0, 7, 0,165, 2, 7, 0,240, 2, 7, 0, 40, 2, 2, 0,147, 2, 2, 0, 27, 0,194, 1, 5, 0, + 7, 0,165, 2, 7, 0,159, 4, 7, 0, 40, 11, 7, 0, 41, 11, 7, 0,240, 2,195, 1, 5, 0, 27, 0, 42, 11,196, 1, 21, 0, + 7, 0, 76, 6, 7, 0, 43, 11, 7, 0, 56, 0,197, 1, 3, 0, 7, 0, 44, 11, 4, 0, 45, 11, 4, 0, 46, 11,198, 1, 7, 0, + 4, 0, 47, 11, 4, 0, 48, 11, 4, 0, 49, 11, 7, 0, 50, 11, 7, 0, 51, 11, 7, 0, 52, 11, 7, 0, 56, 0,199, 1, 8, 0, +199, 1, 0, 0,199, 1, 1, 0, 27, 0, 44, 0, 4, 0, 3, 1, 2, 0, 18, 0, 2, 0, 87, 1, 7, 0,240, 2, 7, 0, 57, 9, +200, 1, 7, 0,200, 1, 0, 0,200, 1, 1, 0, 27, 0, 44, 0, 2, 0,225, 2, 2, 0, 18, 0, 2, 0, 14, 2, 2, 0, 56, 0, +201, 1, 17, 0,194, 1, 8, 4,194, 1, 53, 11,193, 1, 54, 11,194, 1, 40, 9,195, 1, 55, 11, 4, 0, 82, 0, 7, 0,240, 2, + 7, 0, 7, 3, 7, 0, 56, 11, 4, 0, 47, 11, 4, 0, 57, 11, 7, 0, 51, 11, 7, 0, 52, 11, 7, 0,108, 0, 4, 0, 58, 11, + 2, 0, 18, 0, 2, 0, 59, 11,202, 1, 15, 0, 7, 0,255, 0, 7, 0, 60, 11, 7, 0, 44, 11, 7, 0, 61, 11, 7, 0, 62, 11, + 7, 0, 63, 11, 7, 0, 64, 11, 7, 0, 65, 11, 7, 0, 66, 11, 7, 0, 67, 11, 7, 0, 68, 11, 7, 0, 69, 11, 7, 0, 70, 11, + 4, 0, 18, 0, 4, 0, 71, 11,203, 1,128, 0, 22, 0, 32, 0, 34, 0, 75, 0,204, 1, 72, 11,202, 1, 73, 11,187, 0,154, 4, + 4, 0, 18, 0, 4, 0, 56, 0, 2, 0, 16, 0, 2, 0, 59, 10, 2, 0, 74, 11, 2, 0,122, 1, 2, 0, 75, 11, 2, 0,232, 3, + 2, 0, 76, 11, 2, 0, 77, 11, 2, 0, 78, 11, 2, 0, 79, 11, 2, 0, 80, 11, 2, 0, 81, 11, 2, 0, 82, 11, 2, 0, 83, 11, + 2, 0, 84, 11, 2, 0,226, 5, 2, 0, 85, 11, 2, 0, 86, 11, 2, 0, 87, 11, 2, 0, 88, 11, 2, 0, 89, 11, 2, 0, 29, 2, + 2, 0, 33, 9, 2, 0, 8, 9, 2, 0, 90, 11, 2, 0, 91, 11, 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 92, 11, 2, 0, 93, 11, + 2, 0, 94, 11, 2, 0, 95, 11, 7, 0, 96, 11, 7, 0, 97, 11, 7, 0, 98, 11, 7, 0, 99, 11, 7, 0,100, 11, 7, 0,101, 11, + 7, 0,102, 11, 2, 0,156, 5, 2, 0,103, 11, 7, 0,104, 11, 7, 0,105, 11, 7, 0,106, 11, 7, 0, 15, 9, 7, 0, 91, 0, + 7, 0, 7, 3, 7, 0, 21, 9, 7, 0,107, 11, 7, 0,108, 11, 7, 0,109, 11, 7, 0,110, 11, 7, 0,111, 11, 7, 0,112, 11, + 4, 0, 16, 9, 4, 0, 14, 9, 4, 0,113, 11, 4, 0,114, 11, 2, 0,115, 11, 2, 0,116, 11, 7, 0, 17, 9, 7, 0, 18, 9, + 7, 0, 19, 9, 7, 0,117, 11, 7, 0,118, 11, 7, 0,119, 11, 7, 0,120, 11, 7, 0,121, 11, 7, 0,122, 11, 7, 0,123, 11, + 7, 0,124, 11, 7, 0,125, 11, 7, 0,222, 3, 7, 0,108, 0, 7, 0,126, 11, 7, 0,127, 11, 7, 0,128, 11, 7, 0,129, 11, + 7, 0,214, 0, 7, 0,130, 11, 4, 0,131, 11, 4, 0,132, 11, 7, 0,133, 11, 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11, + 7, 0,137, 11, 7, 0,213, 0, 7, 0,138, 11, 7, 0, 52, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0,139, 11, 7, 0,140, 11, + 7, 0,141, 11, 7, 0,142, 11, 7, 0,143, 11, 7, 0,144, 11, 7, 0,145, 11, 7, 0,146, 11, 7, 0,147, 11, 7, 0,148, 11, + 7, 0,149, 11, 7, 0,150, 11, 7, 0,151, 11, 7, 0,152, 11, 7, 0,153, 11, 7, 0,154, 11, 7, 0,155, 11, 7, 0,156, 11, + 4, 0,157, 11, 4, 0,158, 11, 46, 0,140, 1, 64, 0, 0, 4, 14, 0,159, 11, 64, 0,160, 11, 27, 0,161, 11, 27, 0,162, 11, + 31, 0, 80, 0,182, 0, 73, 1,182, 0,163, 11,150, 0, 52, 0,150, 0, 0, 0,150, 0, 1, 0,203, 1,164, 11,201, 1,165, 11, +198, 1,218, 9,190, 0, 80, 4, 11, 0, 81, 4,205, 1,166, 11,205, 1,167, 11, 14, 0,168, 11, 14, 0,169, 11,135, 0,170, 11, +143, 0,171, 11,143, 0,172, 11, 27, 0,173, 11, 27, 0,174, 11, 27, 0, 38, 0, 14, 0, 26, 10, 0, 0, 19, 0, 7, 0,244, 0, + 7, 0, 36, 3, 7, 0,175, 11, 7, 0,176, 11, 4, 0,214, 2, 4, 0,177, 11, 4, 0, 18, 0, 4, 0, 16, 9, 4, 0,178, 11, + 4, 0,179, 11, 4, 0,180, 11, 4, 0,181, 11, 2, 0,251, 0, 2, 0,182, 11, 2, 0,183, 11, 2, 0,184, 11, 0, 0,185, 11, + 2, 0,186, 11, 2, 0,187, 11, 2, 0,188, 11, 11, 0,189, 11,139, 0,153, 4, 14, 0, 21, 3, 14, 0,190, 11,197, 1,191, 11, + 4, 0,192, 11, 4, 0,193, 11,206, 1,194, 11,141, 0, 33, 3,207, 1,195, 11, 7, 0,196, 11, 7, 0,197, 11, 7, 0,198, 11, +137, 0, 38, 0,208, 1,152, 9, 7, 0,123, 4, 7, 0,199, 11, 7, 0,200, 11, 7, 0, 76, 6, 7, 0,236, 3, 7, 0,222, 3, + 7, 0,201, 11, 7, 0, 92, 2, 7, 0,202, 11, 7, 0,203, 11, 7, 0,204, 11, 7, 0,205, 11, 7, 0,206, 11, 7, 0,207, 11, + 7, 0,124, 4, 7, 0,208, 11, 7, 0,209, 11, 7, 0,210, 11, 7, 0,125, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,211, 11, + 7, 0,212, 11, 7, 0,213, 11, 4, 0,214, 11, 4, 0, 92, 0, 4, 0,215, 11, 4, 0,216, 11, 2, 0,217, 11, 2, 0,218, 11, + 2, 0,219, 11, 2, 0,220, 11, 2, 0,221, 11, 2, 0,222, 11, 2, 0,223, 11, 2, 0, 27, 0,187, 0,154, 4,138, 0, 11, 0, +208, 1,224, 11, 7, 0,225, 11, 7, 0,226, 11, 7, 0,251, 1, 7, 0,227, 11, 7, 0,228, 11, 7, 0,229, 11, 4, 0, 92, 0, + 2, 0,230, 11, 2, 0,231, 11, 64, 0,250, 1,209, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,232, 11, +210, 1, 6, 0,210, 1, 0, 0,210, 1, 1, 0,209, 1,194, 9, 4, 0, 1, 1, 2, 0,233, 11, 2, 0, 18, 0,211, 1, 5, 0, +211, 1, 0, 0,211, 1, 1, 0, 14, 0,234, 11, 4, 0,235, 11, 4, 0, 18, 0,212, 1, 9, 0,212, 1, 0, 0,212, 1, 1, 0, + 14, 0,127, 0,211, 1,236, 11, 4, 0, 18, 0, 2, 0,233, 11, 2, 0,237, 11, 7, 0, 93, 0, 0, 0,238, 11,178, 0, 6, 0, + 22, 0, 32, 0, 14, 0,125, 5, 4, 0, 18, 0, 2, 0,239, 11, 2, 0,240, 11, 11, 0,241, 11,213, 1, 6, 0, 14, 0,242, 11, + 4, 0,243, 11, 4, 0,244, 11, 4, 0, 18, 0, 4, 0, 27, 0,237, 0,245, 11,214, 1, 19, 0, 22, 0, 32, 0,215, 1,246, 11, +215, 1,247, 11, 14, 0,248, 11, 4, 0,249, 11, 2, 0,250, 11, 2, 0,251, 11, 14, 0,252, 11, 14, 0,253, 11,213, 1,254, 11, + 14, 0,255, 11, 14, 0, 0, 12, 14, 0, 1, 12, 14, 0, 2, 12,216, 1, 3, 12,216, 1, 4, 12,216, 1, 5, 12, 14, 0, 6, 12, +237, 0, 7, 12,215, 1, 32, 0,215, 1, 0, 0,215, 1, 1, 0, 11, 0, 8, 12, 4, 0,120, 8, 2, 0, 9, 12, 2, 0, 27, 0, + 27, 1, 10, 12, 27, 1, 11, 12, 0, 0, 12, 12, 2, 0, 13, 12, 2, 0, 14, 12, 2, 0,142, 8, 2, 0,143, 8, 2, 0, 15, 12, + 2, 0, 16, 12, 2, 0, 15, 4, 2, 0, 54, 7, 2, 0, 17, 12, 2, 0, 18, 12, 2, 0, 19, 12, 2, 0, 30, 0,217, 1, 20, 12, +218, 1, 21, 12,219, 1, 22, 12, 4, 0, 23, 12, 4, 0, 24, 12, 11, 0, 25, 12, 14, 0,253, 11, 14, 0,162, 8, 14, 0, 26, 12, + 14, 0, 27, 12, 14, 0, 28, 12,220, 1, 18, 0,220, 1, 0, 0,220, 1, 1, 0, 0, 0, 29, 12, 21, 0, 31, 0, 0, 0, 30, 12, + 2, 0, 31, 12, 2, 0, 16, 0, 2, 0, 14, 0, 2, 0, 32, 12, 2, 0, 33, 12, 2, 0, 34, 12, 2, 0, 35, 12, 2, 0, 36, 12, + 2, 0, 18, 0, 2, 0, 37, 12, 2, 0, 32, 0, 2, 0, 27, 0,221, 1, 38, 12,222, 1, 4, 0,222, 1, 0, 0,222, 1, 1, 0, +220, 1, 39, 12,220, 1, 40, 12,223, 1, 11, 0,223, 1, 0, 0,223, 1, 1, 0, 14, 0, 41, 12, 14, 0, 42, 12, 0, 0, 29, 12, + 2, 0, 43, 12, 2, 0, 44, 12, 2, 0, 18, 0, 2, 0, 45, 12, 4, 0, 46, 12, 11, 0, 47, 12,216, 1, 7, 0,216, 1, 0, 0, +216, 1, 1, 0, 0, 0, 29, 12, 0, 0, 48, 12, 14, 0, 60, 8, 4, 0, 49, 12, 4, 0, 18, 0,249, 0, 14, 0,249, 0, 0, 0, +249, 0, 1, 0, 0, 0, 29, 12, 21, 0, 31, 0,224, 1,136, 8, 11, 0, 50, 12, 11, 0, 51, 12,221, 1, 38, 12,213, 1, 52, 12, + 14, 0, 53, 12,249, 0, 54, 12, 32, 1,240, 6, 2, 0, 18, 0, 2, 0, 86, 1,225, 1, 12, 0,225, 1, 0, 0,225, 1, 1, 0, + 11, 0, 2, 0, 11, 0, 55, 12, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,140, 9, 7, 0,129, 0, 7, 0,132, 4, + 7, 0, 90, 9, 7, 0, 82, 10,226, 1, 5, 0, 7, 0, 56, 12, 4, 0, 57, 12, 4, 0, 58, 12, 4, 0, 87, 1, 4, 0, 18, 0, +227, 1, 6, 0, 7, 0, 59, 12, 7, 0, 60, 12, 7, 0, 61, 12, 7, 0, 62, 12, 4, 0, 16, 0, 4, 0, 18, 0,228, 1, 5, 0, + 7, 0,118, 9, 7, 0,119, 9, 7, 0,240, 2, 2, 0, 43, 2, 2, 0, 44, 2,229, 1, 5, 0,228, 1, 2, 0, 4, 0, 53, 0, + 7, 0, 63, 12, 7, 0,118, 9, 7, 0,119, 9,230, 1, 4, 0, 2, 0, 64, 12, 2, 0, 65, 12, 2, 0, 66, 12, 2, 0, 67, 12, +231, 1, 2, 0, 37, 0, 38, 7, 21, 0,158, 9,232, 1, 3, 0, 19, 0, 68, 12, 4, 0, 18, 0, 4, 0, 27, 0,233, 1, 6, 0, + 7, 0,108, 0, 7, 0,209, 2, 7, 0, 69, 12, 7, 0, 27, 0, 2, 0,250, 0, 2, 0, 70, 12,234, 1, 5, 0, 7, 0, 71, 12, + 7, 0,128, 0, 7, 0,195, 9, 7, 0,196, 9, 4, 0, 18, 0,235, 1, 6, 0, 22, 0, 43, 7, 0, 0, 72, 12, 0, 0, 73, 12, + 2, 0, 74, 12, 2, 0, 18, 0, 4, 0, 75, 12,236, 1, 7, 0,236, 1, 0, 0,236, 1, 1, 0, 0, 0, 19, 0,235, 1, 76, 12, + 2, 0, 77, 12, 2, 0, 16, 0, 7, 0, 60, 0,237, 1, 7, 0, 14, 0, 78, 12, 0, 0, 79, 12, 11, 0, 80, 12, 7, 0, 60, 0, + 7, 0,140, 9, 4, 0, 16, 0, 4, 0, 18, 0,238, 1, 3, 0, 7, 0, 81, 12, 4, 0, 18, 0, 4, 0, 27, 0,239, 1, 15, 0, +239, 1, 0, 0,239, 1, 1, 0,106, 1, 13, 10,237, 1, 61, 0, 14, 0,188, 3, 30, 0, 49, 0,238, 1, 82, 12, 4, 0, 53, 0, + 7, 0, 60, 0, 2, 0, 18, 0, 2, 0, 22, 1, 4, 0, 83, 12, 0, 0, 72, 12, 4, 0, 84, 12, 7, 0, 85, 12,240, 1, 2, 0, + 0, 0, 86, 12, 0, 0, 87, 12,241, 1, 4, 0,241, 1, 0, 0,241, 1, 1, 0,176, 0, 70, 3, 14, 0, 88, 12,242, 1, 25, 0, +242, 1, 0, 0,242, 1, 1, 0, 14, 0, 89, 12,176, 0, 88, 9,241, 1, 90, 12, 14, 0, 91, 12, 14, 0,188, 3, 0, 0, 19, 0, + 7, 0,140, 9, 7, 0, 92, 12, 7, 0, 90, 0, 7, 0, 91, 0, 7, 0, 78, 10, 7, 0, 79, 10, 7, 0,253, 2, 7, 0,148, 3, + 7, 0, 90, 9, 7, 0, 82, 10, 2, 0, 93, 12, 2, 0, 94, 12, 2, 0, 67, 0, 2, 0, 16, 0, 11, 0, 95, 12, 4, 0, 18, 0, + 4, 0, 30, 0,243, 1, 6, 0,243, 1, 0, 0,243, 1, 1, 0, 14, 0, 89, 12, 4, 0, 18, 0, 4, 0, 14, 2, 0, 0, 19, 0, +244, 1, 11, 0,244, 1, 0, 0,244, 1, 1, 0, 22, 0, 43, 7, 0, 0, 96, 12, 4, 0, 75, 12, 2, 0, 97, 12, 2, 0, 27, 0, + 0, 0, 72, 12, 4, 0, 83, 12, 2, 0, 18, 0, 2, 0, 98, 12,245, 1, 10, 0,245, 1, 0, 0,245, 1, 1, 0, 14, 0, 99, 12, + 0, 0, 29, 12, 0, 0, 19, 0, 0, 0,100, 12, 0, 0,101, 12, 2, 0, 18, 0, 2, 0, 98, 12, 4, 0,102, 12,246, 1, 5, 0, +246, 1, 0, 0,246, 1, 1, 0, 0, 0, 72, 12, 4, 0, 83, 12, 7, 0,230, 2, 34, 0, 12, 0,176, 0,179, 3,176, 0,103, 12, +241, 1, 90, 12, 14, 0,104, 12,242, 1,105, 12, 14, 0,106, 12, 14, 0,107, 12, 4, 0, 18, 0, 4, 0,251, 0, 2, 0,108, 12, + 2, 0,109, 12, 7, 0,110, 12,247, 1, 2, 0, 22, 0, 32, 0, 34, 0, 75, 0,248, 1, 5, 0,248, 1, 0, 0,248, 1, 1, 0, + 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,174, 5,249, 1, 6, 0,248, 1,111, 12, 27, 0, 44, 0, 4, 0,112, 12, 7, 0,113, 12, + 4, 0,114, 12, 4, 0,255, 9,250, 1, 3, 0,248, 1,111, 12, 4, 0,112, 12, 7, 0,115, 12,251, 1, 8, 0,248, 1,111, 12, + 27, 0, 44, 0, 7, 0, 77, 1, 7, 0,116, 12, 7, 0, 36, 3, 7, 0,151, 9, 4, 0,112, 12, 4, 0,117, 12,252, 1, 5, 0, +248, 1,111, 12, 7, 0,118, 12, 7, 0,176, 2, 7, 0, 3, 3, 7, 0, 56, 0,253, 1, 3, 0,248, 1,111, 12, 7, 0,151, 9, + 7, 0,119, 12,196, 1, 4, 0, 7, 0,120, 12, 7, 0,127, 11, 2, 0,121, 12, 2, 0, 87, 1,254, 1, 14, 0,254, 1, 0, 0, +254, 1, 1, 0, 14, 0,122, 12, 14, 0,123, 12, 14, 0,124, 12, 0, 0,174, 5, 4, 0, 32, 0, 4, 0, 18, 0, 4, 0,125, 12, + 7, 0,126, 12, 4, 0,114, 12, 4, 0,255, 9, 7, 0, 84, 4, 7, 0, 5, 3,204, 1, 23, 0, 4, 0,112, 12, 4, 0,127, 12, + 7, 0,128, 12, 7, 0, 1, 3, 7, 0,129, 12, 7, 0,231, 8, 7, 0,120, 12, 7, 0,130, 12, 7, 0,209, 2, 7, 0,248, 10, + 7, 0,217, 4, 7, 0,131, 12, 7, 0,132, 12, 7, 0,133, 12, 7, 0,134, 12, 7, 0,135, 12, 7, 0,136, 12, 7, 0,137, 12, + 7, 0,138, 12, 7, 0,139, 12, 7, 0,140, 12, 7, 0,141, 12, 14, 0,142, 12,123, 0, 40, 0,122, 0,143, 12,255, 1, 73, 11, + 64, 0,144, 12, 64, 0,160, 11, 64, 0,145, 12, 0, 2,146, 12, 43, 0,169, 0, 43, 0,147, 12, 43, 0,148, 12, 7, 0,149, 12, + 7, 0,150, 12, 7, 0,151, 12, 7, 0,152, 12, 7, 0,153, 12, 7, 0,119, 8, 7, 0,154, 12, 7, 0,178, 1, 7, 0,155, 12, + 4, 0,156, 12, 4, 0,157, 12, 4, 0,158, 12, 4, 0, 92, 0, 4, 0, 27, 0, 4, 0,159, 12, 2, 0,160, 12, 2, 0,161, 12, + 4, 0,162, 12, 7, 0,209, 2, 4, 0,163, 12, 7, 0,164, 12, 4, 0,165, 12, 4, 0,166, 12, 4, 0,167, 12,139, 0,168, 12, + 14, 0,169, 12,187, 0,154, 4, 4, 0,170, 12, 7, 0,171, 12, 7, 0,172, 12, 4, 0, 30, 0,124, 0, 12, 0,122, 0,143, 12, +150, 0, 56, 3, 7, 0,143, 1, 7, 0,119, 8, 7, 0,173, 12, 7, 0,174, 12, 7, 0,175, 12, 2, 0,176, 12, 2, 0,177, 12, + 2, 0,178, 12, 2, 0, 16, 0, 4, 0, 92, 0,125, 0, 15, 0,122, 0,143, 12,141, 0, 33, 3, 7, 0,194, 9, 7, 0,179, 12, + 7, 0,180, 12, 4, 0,181, 12, 7, 0, 79, 1, 7, 0,182, 12, 4, 0, 35, 10, 4, 0, 29, 3, 4, 0,183, 12, 7, 0,152, 12, + 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 1, 2, 15, 0, 22, 0, 32, 0, 34, 0, 75, 0, 46, 1,229, 8, 7, 0,184, 12, + 7, 0,185, 12, 7, 0,186, 12, 7, 0,187, 12, 7, 0,150, 9, 7, 0,188, 12, 7, 0,189, 12, 7, 0,190, 12, 7, 0, 84, 4, + 7, 0,231, 8, 2, 0, 18, 0, 2, 0,114, 9,231, 0, 3, 0, 4, 0,126, 0, 2, 0,216, 6, 2, 0,191, 12, 2, 2, 5, 0, + 0, 0,195, 8, 2, 0,196, 8, 2, 0, 74, 5, 2, 0,192, 12, 2, 0,193, 12,229, 0, 16, 0, 22, 0, 32, 0, 34, 0, 75, 0, + 0, 0, 35, 0, 4, 0,143, 0, 4, 0,144, 0, 4, 0,194, 12, 7, 0,162, 0, 7, 0,163, 0, 44, 0,138, 0, 3, 2,152, 9, +178, 0,182, 3, 4, 2,195, 12, 11, 0,196, 12, 2, 2,197, 12, 4, 0, 18, 0, 4, 0, 22, 0, 13, 1, 10, 0, 4, 0,132, 0, + 4, 0,198, 12, 52, 0,199, 12, 7, 0,200, 12, 2, 0,201, 12, 0, 0,181, 2, 4, 0,126, 0, 5, 2,175, 3, 6, 2,202, 12, + 7, 0,203, 12, 7, 2, 3, 0, 4, 0,126, 0, 7, 0,204, 12, 7, 0, 79, 1, 8, 2, 11, 0, 11, 0,205, 12, 7, 0,206, 12, + 7, 0,207, 12, 7, 0, 27, 0, 7, 0,208, 12, 2, 0,209, 12, 2, 0, 67, 0, 7, 0,210, 12, 7, 0,211, 12, 7, 0,212, 12, + 7, 0,213, 12, 6, 2, 3, 0, 7, 0,214, 12, 4, 0,126, 0, 4, 0, 18, 0, 5, 2, 24, 0, 5, 2, 0, 0, 5, 2, 1, 0, + 0, 0, 19, 0, 7, 0,215, 12, 7, 0,216, 12, 7, 0,217, 12, 7, 0,218, 12, 7, 0, 6, 11, 4, 0,219, 12, 4, 0,220, 12, + 6, 2,221, 12, 7, 0,222, 12, 7, 0,204, 12, 4, 0, 18, 0, 4, 0,223, 12, 4, 0,224, 12, 7, 0, 85, 12, 2, 0,225, 12, + 2, 0,227, 3, 2, 0,226, 12, 2, 0,227, 12, 2, 0,228, 12, 2, 0, 30, 0, 7, 0,229, 12, 9, 2, 22, 0, 4, 0, 18, 0, + 2, 0,230, 12, 2, 0,231, 12, 7, 0,232, 12, 2, 0,233, 12, 2, 0,234, 12, 2, 0,235, 12, 2, 0,236, 12, 2, 0,237, 12, + 2, 0,238, 12, 2, 0,239, 12, 2, 0, 3, 3, 4, 0,240, 12, 4, 0,241, 12, 2, 0,242, 12, 2, 0, 30, 0, 7, 0, 94, 1, + 4, 0,243, 12, 4, 0,244, 12, 7, 0,245, 12, 7, 0,246, 12, 4, 0,247, 1, 10, 2, 12, 0, 4, 0, 18, 0, 4, 0,247, 12, + 4, 0,248, 12, 7, 0,249, 12, 5, 2,250, 12, 7, 0,251, 12, 7, 0,252, 12, 7, 0,253, 12, 4, 0,190, 1, 4, 0,132, 0, + 7, 0,148, 3, 52, 0,254, 12, 11, 2, 5, 0, 4, 0, 18, 0, 7, 0,204, 12, 4, 0,255, 12, 4, 0, 0, 13, 7, 2, 1, 13, + 12, 2, 7, 0, 12, 2, 0, 0, 12, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, 7, 0,148, 3, 14, 0, 2, 13, 11, 2, 3, 13, + 13, 2, 1, 0, 0, 0, 4, 13, 14, 2, 5, 0, 14, 2, 0, 0, 14, 2, 1, 0, 5, 2,175, 3, 4, 0, 18, 0, 4, 0, 27, 0, + 15, 2, 3, 0, 14, 0,255, 9, 4, 0, 5, 13, 4, 0, 27, 0, 4, 2, 11, 0, 9, 2, 6, 13, 8, 2, 7, 13, 14, 0, 2, 13, + 11, 2, 3, 13, 10, 2, 8, 13, 5, 2, 9, 13, 14, 0, 10, 13, 4, 0, 11, 13, 4, 0, 12, 13, 13, 2, 91, 6, 15, 2, 13, 13, + 16, 2, 48, 0, 16, 2, 0, 0, 16, 2, 1, 0,169, 0,145, 3, 17, 2, 2, 0, 64, 0, 14, 13,187, 0,154, 4,139, 0,153, 4, + 14, 0, 21, 3, 4, 0, 15, 13, 0, 0, 19, 0, 2, 0,163, 10, 2, 0, 16, 0, 2, 0, 16, 13, 2, 0, 17, 13, 2, 0, 18, 13, + 2, 0, 19, 13, 2, 0, 20, 13, 2, 0, 21, 13, 4, 0, 92, 0, 4, 0,186, 3, 4, 0, 22, 13, 4, 0, 23, 13, 4, 0,195, 9, + 4, 0,196, 9, 4, 0, 27, 0, 7, 0, 24, 13, 47, 0, 25, 13, 0, 0, 26, 13, 4, 0, 27, 13, 4, 0,162, 12, 7, 0, 28, 13, + 7, 0, 29, 13, 7, 0, 30, 13, 7, 0, 31, 13, 7, 0, 32, 13, 7, 0, 33, 13, 7, 0, 34, 13, 7, 0, 35, 13, 7, 0, 36, 13, + 7, 0, 37, 13, 7, 0, 38, 13, 7, 0, 39, 13, 7, 0, 40, 13, 7, 0, 41, 13, 0, 0,202, 2, 0, 0, 42, 13, 0, 0, 43, 13, + 0, 0, 44, 13,169, 0, 7, 0,168, 0, 45, 13,143, 0, 35, 3, 14, 0, 46, 13, 2, 0, 47, 13, 2, 0, 92, 0, 4, 0, 27, 0, + 0, 0, 48, 13,170, 0, 24, 0,168, 0, 45, 13,143, 0, 35, 3,150, 0, 56, 3, 63, 0, 26, 2, 4, 0, 92, 0, 4, 0, 49, 13, + 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,178, 1, 7, 0, 50, 13, 7, 0, 51, 13, 7, 0, 52, 13, 7, 0, 53, 13, + 50, 0, 54, 13, 50, 0, 55, 13, 2, 0, 56, 13, 2, 0,223, 10, 2, 0, 57, 13, 2, 0, 27, 0, 7, 0, 58, 13, 7, 0, 59, 13, + 7, 0, 60, 13, 7, 0, 61, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 7726e707f08..12a54658f90 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -669,7 +669,7 @@ static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy // ............................ /* draw grease-pencil sketches to specified 2d-view that uses ibuf corrections */ -void draw_gpencil_2dimage (bContext *C, ImBuf *ibuf) +void draw_gpencil_2dimage(bContext *C, ImBuf *ibuf) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); @@ -745,7 +745,7 @@ void draw_gpencil_2dimage (bContext *C, ImBuf *ibuf) /* draw grease-pencil sketches to specified 2d-view assuming that matrices are already set correctly * Note: this gets called twice - first time with onlyv2d=1 to draw 'canvas' strokes, second time with onlyv2d=0 for screen-aligned strokes */ -void draw_gpencil_view2d (bContext *C, short onlyv2d) +void draw_gpencil_view2d(bContext *C, short onlyv2d) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); @@ -772,7 +772,7 @@ void draw_gpencil_view2d (bContext *C, short onlyv2d) * Note: this gets called twice - first time with only3d=1 to draw 3d-strokes, second time with only3d=0 for screen-aligned strokes */ -void draw_gpencil_view3d (Scene *scene, View3D *v3d, ARegion *ar, short only3d) +void draw_gpencil_view3d(Scene *scene, View3D *v3d, ARegion *ar, short only3d) { bGPdata *gpd; int dflag = 0; diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c index 3b0847c2e0f..b79516ed25e 100644 --- a/source/blender/editors/gpencil/editaction_gpencil.c +++ b/source/blender/editors/gpencil/editaction_gpencil.c @@ -62,7 +62,7 @@ /* Generics - Loopers */ /* Loops over the gp-frames for a gp-layer, and applies the given callback */ -short gplayer_frames_looper (bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDframe *, Scene *)) +short gplayer_frames_looper(bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDframe *, Scene *)) { bGPDframe *gpf; @@ -85,7 +85,7 @@ short gplayer_frames_looper (bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDf /* Data Conversion Tools */ /* make a listing all the gp-frames in a layer as cfraelems */ -void gplayer_make_cfra_list (bGPDlayer *gpl, ListBase *elems, short onlysel) +void gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, short onlysel) { bGPDframe *gpf; CfraElem *ce; @@ -111,7 +111,7 @@ void gplayer_make_cfra_list (bGPDlayer *gpl, ListBase *elems, short onlysel) /* Selection Tools */ /* check if one of the frames in this layer is selected */ -short is_gplayer_frame_selected (bGPDlayer *gpl) +short is_gplayer_frame_selected(bGPDlayer *gpl) { bGPDframe *gpf; @@ -149,7 +149,7 @@ static void gpframe_select (bGPDframe *gpf, short select_mode) } /* set all/none/invert select (like above, but with SELECT_* modes) */ -void select_gpencil_frames (bGPDlayer *gpl, short select_mode) +void select_gpencil_frames(bGPDlayer *gpl, short select_mode) { bGPDframe *gpf; @@ -164,7 +164,7 @@ void select_gpencil_frames (bGPDlayer *gpl, short select_mode) } /* set all/none/invert select */ -void set_gplayer_frame_selection (bGPDlayer *gpl, short mode) +void set_gplayer_frame_selection(bGPDlayer *gpl, short mode) { /* error checking */ if (gpl == NULL) @@ -175,7 +175,7 @@ void set_gplayer_frame_selection (bGPDlayer *gpl, short mode) } /* select the frame in this layer that occurs on this frame (there should only be one at most) */ -void select_gpencil_frame (bGPDlayer *gpl, int selx, short select_mode) +void select_gpencil_frame(bGPDlayer *gpl, int selx, short select_mode) { bGPDframe *gpf; @@ -193,7 +193,7 @@ void select_gpencil_frame (bGPDlayer *gpl, int selx, short select_mode) } /* select the frames in this layer that occur within the bounds specified */ -void borderselect_gplayer_frames (bGPDlayer *gpl, float min, float max, short select_mode) +void borderselect_gplayer_frames(bGPDlayer *gpl, float min, float max, short select_mode) { bGPDframe *gpf; @@ -211,7 +211,7 @@ void borderselect_gplayer_frames (bGPDlayer *gpl, float min, float max, short se /* Frame Editing Tools */ /* Delete selected frames */ -void delete_gplayer_frames (bGPDlayer *gpl) +void delete_gplayer_frames(bGPDlayer *gpl) { bGPDframe *gpf, *gpfn; @@ -229,7 +229,7 @@ void delete_gplayer_frames (bGPDlayer *gpl) } /* Duplicate selected frames from given gp-layer */ -void duplicate_gplayer_frames (bGPDlayer *gpl) +void duplicate_gplayer_frames(bGPDlayer *gpl) { bGPDframe *gpf, *gpfn; @@ -270,7 +270,7 @@ ListBase gpcopybuf = {NULL, NULL}; static int gpcopy_firstframe= 999999999; /* This function frees any MEM_calloc'ed copy/paste buffer data */ -void free_gpcopybuf () +void free_gpcopybuf() { free_gpencil_layers(&gpcopybuf); @@ -281,7 +281,7 @@ void free_gpcopybuf () /* This function adds data to the copy/paste buffer, freeing existing data first * Only the selected GP-layers get their selected keyframes copied. */ -void copy_gpdata () +void copy_gpdata() { ListBase act_data = {NULL, NULL}; bActListElem *ale; @@ -338,7 +338,7 @@ void copy_gpdata () BLI_freelistN(&act_data); } -void paste_gpdata (Scene *scene) +void paste_gpdata(Scene *scene) { ListBase act_data = {NULL, NULL}; bActListElem *ale; @@ -498,7 +498,7 @@ static short snap_gpf_nearmarker (bGPDframe *gpf, Scene *scene) /* snap selected frames to ... */ -void snap_gplayer_frames (bGPDlayer *gpl, Scene *scene, short mode) +void snap_gplayer_frames(bGPDlayer *gpl, Scene *scene, short mode) { switch (mode) { case 1: /* snap to nearest frame */ @@ -600,7 +600,7 @@ static short mirror_gpf_marker (bGPDframe *gpf, Scene *scene) /* mirror selected gp-frames on... */ -void mirror_gplayer_frames (bGPDlayer *gpl, Scene *scene, short mode) +void mirror_gplayer_frames(bGPDlayer *gpl, Scene *scene, short mode) { switch (mode) { case 1: /* mirror over current frame */ diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 5f31a273d1a..34a95cd89bf 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -210,7 +210,7 @@ static int gp_data_add_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GPENCIL_OT_data_add (wmOperatorType *ot) +void GPENCIL_OT_data_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Grease Pencil Add New"; @@ -258,7 +258,7 @@ static int gp_data_unlink_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GPENCIL_OT_data_unlink (wmOperatorType *ot) +void GPENCIL_OT_data_unlink(wmOperatorType *ot) { /* identifiers */ ot->name = "Grease Pencil Unlink"; @@ -295,7 +295,7 @@ static int gp_layer_add_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GPENCIL_OT_layer_add (wmOperatorType *ot) +void GPENCIL_OT_layer_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add New Layer"; @@ -346,7 +346,7 @@ static int gp_actframe_delete_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GPENCIL_OT_active_frame_delete (wmOperatorType *ot) +void GPENCIL_OT_active_frame_delete(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Active Frame"; @@ -629,7 +629,7 @@ static int gp_convert_layer_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GPENCIL_OT_convert (wmOperatorType *ot) +void GPENCIL_OT_convert(wmOperatorType *ot) { /* identifiers */ ot->name = "Convert Grease Pencil"; diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c index 0afe791029f..baa6999f552 100644 --- a/source/blender/editors/gpencil/gpencil_ops.c +++ b/source/blender/editors/gpencil/gpencil_ops.c @@ -70,7 +70,7 @@ void ED_keymap_gpencil(wmKeyConfig *keyconf) /* ****************************************** */ -void ED_operatortypes_gpencil (void) +void ED_operatortypes_gpencil(void) { /* Drawing ----------------------- */ diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 303ca89b168..9f9d941f523 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -1611,7 +1611,8 @@ static int gpencil_draw_exec (bContext *C, wmOperator *op) /* loop over the stroke RNA elements recorded (i.e. progress of mouse movement), * setting the relevant values in context at each step, then applying */ - RNA_BEGIN (op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") + { float mousef[2]; //printf("\t\tGP - stroke elem\n"); @@ -1915,7 +1916,7 @@ static EnumPropertyItem prop_gpencil_drawmodes[] = { {0, NULL, 0, NULL, NULL} }; -void GPENCIL_OT_draw (wmOperatorType *ot) +void GPENCIL_OT_draw(wmOperatorType *ot) { /* identifiers */ ot->name = "Grease Pencil Draw"; diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h index 44195988c40..2172aa82acf 100644 --- a/source/blender/editors/include/BIF_glutil.h +++ b/source/blender/editors/include/BIF_glutil.h @@ -49,7 +49,8 @@ void fdrawXORcirc(float xofs, float yofs, float rad); void fdrawcheckerboard(float x1, float y1, float x2, float y2); -/* glStipple defines */ +/* OpenGL stipple defines */ +/* OpenGL stipple defines */ extern unsigned char stipple_halftone[128]; extern unsigned char stipple_quarttone[128]; extern unsigned char stipple_diag_stripes_pos[128]; @@ -147,13 +148,14 @@ void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h, int format, /* 2D Drawing Assistance */ /** Define a 2D area (viewport, scissor, matrices) for OpenGL rendering. - * This routine sets up an OpenGL state appropriate for drawing using - * both vertice (glVertex, etc) and raster (glRasterPos, glRect) commands. - * All coordinates should be at integer positions. There is little to - * no reason to use glVertex2f etc. functions during 2D rendering, and + * + * glwDefine2DArea and glaBegin2DDraw set up an OpenGL state appropriate + * for drawing using both vertice (Vertex, etc) and raster (RasterPos, Rect) + * commands. All coordinates should be at integer positions. There is little + * to no reason to use glVertex2f etc. functions during 2D rendering, and * thus no reason to +-0.5 the coordinates or perform other silly * tricks. - * + * * \param screen_rect The screen rectangle to be defined for 2D drawing. */ void glaDefine2DArea (struct rcti *screen_rect); @@ -165,13 +167,8 @@ typedef struct gla2DDrawInfo gla2DDrawInfo; * to free it and to return OpenGL to its previous state. The * scissor rectangle is set to match the viewport. * - * This routine sets up an OpenGL state appropriate for drawing using - * both vertice (glVertex, etc) and raster (glRasterPos, glRect) commands. - * All coordinates should be at integer positions. There is little to - * no reason to use glVertex2f etc. functions during 2D rendering, and - * thus no reason to +-0.5 the coordinates or perform other silly - * tricks. - * + * See glaDefine2DArea for an explanation of why this function uses integers. + * * \param screen_rect The screen rectangle to be used for 2D drawing. * \param world_rect The world rectangle that the 2D area represented * by \a screen_rect is supposed to represent. If NULL it is assumed the diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h index 5e8ef618a42..302c2940fef 100644 --- a/source/blender/editors/include/ED_clip.h +++ b/source/blender/editors/include/ED_clip.h @@ -33,6 +33,7 @@ struct ARegion; struct bContext; +struct bScreen; struct ImBuf; struct Main; struct MovieClip; @@ -42,7 +43,13 @@ struct wmEvent; /* clip_editor.c */ int ED_space_clip_poll(struct bContext *C); -void ED_space_clip_set(struct bContext *C, struct SpaceClip *sc, struct MovieClip *clip); +int ED_space_clip_view_clip_poll(struct bContext *C); + +int ED_space_clip_tracking_poll(struct bContext *C); +int ED_space_clip_tracking_size_poll(struct bContext *C); +int ED_space_clip_tracking_frame_poll(struct bContext *C); + +void ED_space_clip_set(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip); struct MovieClip *ED_space_clip(struct SpaceClip *sc); void ED_space_clip_size(struct SpaceClip *sc, int *width, int *height); void ED_space_clip_zoom(struct SpaceClip *sc, ARegion *ar, float *zoomx, float *zoomy); @@ -58,6 +65,13 @@ void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2]); void ED_clip_point_stable_pos(struct bContext *C, float x, float y, float *xr, float *yr); void ED_clip_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]); +int ED_space_clip_texture_buffer_supported(struct SpaceClip *sc); +int ED_space_clip_load_movieclip_buffer(struct SpaceClip *sc, struct ImBuf *ibuf); +void ED_space_clip_unload_movieclip_buffer(struct SpaceClip *sc); +void ED_space_clip_free_texture_buffer(struct SpaceClip *sc); + +int ED_space_clip_show_trackedit(struct SpaceClip *sc); + /* clip_ops.c */ void ED_operatormacros_clip(void); diff --git a/source/blender/editors/include/ED_fluidsim.h b/source/blender/editors/include/ED_fluidsim.h index 54acf73aacd..1a0c90978e6 100644 --- a/source/blender/editors/include/ED_fluidsim.h +++ b/source/blender/editors/include/ED_fluidsim.h @@ -1,7 +1,4 @@ /* - * BKE_fluidsim.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/include/ED_particle.h b/source/blender/editors/include/ED_particle.h index 1c7f5cf0641..36e5ca5485f 100644 --- a/source/blender/editors/include/ED_particle.h +++ b/source/blender/editors/include/ED_particle.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/include/ED_physics.h b/source/blender/editors/include/ED_physics.h index 6c885b9336f..cd9ddd3d7d1 100644 --- a/source/blender/editors/include/ED_physics.h +++ b/source/blender/editors/include/ED_physics.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h index 9cb32c31f5b..2df699255be 100644 --- a/source/blender/editors/include/ED_sculpt.h +++ b/source/blender/editors/include/ED_sculpt.h @@ -42,6 +42,8 @@ void ED_operatortypes_sculpt(void); void sculpt_get_redraw_planes(float planes[4][4], struct ARegion *ar, struct RegionView3D *rv3d, struct Object *ob); void ED_sculpt_force_update(struct bContext *C); +float *ED_sculpt_get_last_stroke(struct Object *ob); +int ED_sculpt_minmax(struct bContext *C, float *min, float *max); /* paint_ops.c */ void ED_operatortypes_paint(void); diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index 041ab08a37d..cd037681eb5 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 226d9a3d493..c7fb523dcba 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -498,7 +498,7 @@ static int ui_but_float_precision(uiBut *but, double value) return prec; } -static void ui_draw_linkline(uiLinkLine *line) +static void ui_draw_linkline(uiLinkLine *line, int hilightActiveLines) { rcti rect; @@ -509,8 +509,10 @@ static void ui_draw_linkline(uiLinkLine *line) rect.xmax = (line->to->x1 + line->to->x2) / 2.0f; rect.ymax = (line->to->y1 + line->to->y2) / 2.0f; - if (line->flag & UI_SELECT) - glColor3ub(100, 100, 100); + if(line->flag & UI_SELECT) + glColor3ub(100,100,100); + else if(hilightActiveLines && ((line->from->flag & UI_ACTIVE) || (line->to->flag & UI_ACTIVE))) + UI_ThemeColor(TH_TEXT_HI); else glColor3ub(0, 0, 0); @@ -521,18 +523,37 @@ static void ui_draw_links(uiBlock *block) { uiBut *but; uiLinkLine *line; - - but = block->buttons.first; - while (but) { - if (but->type == LINK && but->link) { - line = but->link->lines.first; - while (line) { - ui_draw_linkline(line); - line = line->next; + + // Draw the inactive lines (lines with neither button being hovered over). + // As we go, remember if we see any active or selected lines. + int foundselectline = 0; + int foundactiveline = 0; + for (but=block->buttons.first; but; but=but->next) { + if(but->type==LINK && but->link) { + for (line=but->link->lines.first; line; line=line->next) { + if (!(line->from->flag & UI_ACTIVE) && !(line->to->flag & UI_ACTIVE)) + ui_draw_linkline(line, 0); + else + foundactiveline = 1; + + if ((line->from->flag & UI_SELECT) || (line->to->flag & UI_SELECT)) + foundselectline = 1; } } - but = but->next; } + + // Draw any active lines (lines with either button being hovered over). + // Do this last so they appear on top of inactive lines. + if (foundactiveline) { + for (but=block->buttons.first; but; but=but->next) { + if(but->type==LINK && but->link) { + for (line=but->link->lines.first; line; line=line->next) { + if ((line->from->flag & UI_ACTIVE) || (line->to->flag & UI_ACTIVE)) + ui_draw_linkline(line, !foundselectline); + } + } + } + } } /* ************** BLOCK ENDING FUNCTION ************* */ @@ -694,7 +715,7 @@ int uiButActiveOnly(const bContext *C, uiBlock *block, uiBut *but) } } if (activate || found == 0) { - ui_button_activate_do( (bContext *)C, CTX_wm_region(C), but); + ui_button_activate_do((bContext *)C, CTX_wm_region(C), but); } else if (found && isactive == 0) { @@ -2644,9 +2665,9 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, const char *str, */ #define UI_DEF_BUT_RNA_DISABLE(but) \ - but->flag |= UI_BUT_DISABLED; \ - but->lock = 1; \ - but->lockstr = "" + but->flag |= UI_BUT_DISABLED; \ + but->lock = 1; \ + but->lockstr = "" static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip) diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 91d3c890df3..8c5913e23fb 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -1196,7 +1196,7 @@ void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect) ui_get_but_vectorf(but, dir); - dir[3] = 0.0f; /* glLight needs 4 args, 0.0 is sun */ + dir[3] = 0.0f; /* glLightfv needs 4 args, 0.0 is sun */ glLightfv(GL_LIGHT7, GL_POSITION, dir); glLightfv(GL_LIGHT7, GL_DIFFUSE, diffn); glLightfv(GL_LIGHT7, GL_SPECULAR, vec0); @@ -1281,7 +1281,7 @@ static void ui_draw_but_curve_grid(rcti *rect, float zoomx, float zoomy, float o } -static void glColor3ubvShade(unsigned char *col, int shade) +static void gl_shaded_color(unsigned char *col, int shade) { glColor3ub(col[0] - shade > 0 ? col[0] - shade : 0, col[1] - shade > 0 ? col[1] - shade : 0, @@ -1318,7 +1318,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect /* backdrop */ if (cumap->flag & CUMA_DO_CLIP) { - glColor3ubvShade((unsigned char *)wcol->inner, -20); + gl_shaded_color((unsigned char *)wcol->inner, -20); glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax); glColor3ubv((unsigned char *)wcol->inner); glRectf(rect->xmin + zoomx * (cumap->clipr.xmin - offsx), @@ -1332,13 +1332,13 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect } /* grid, every .25 step */ - glColor3ubvShade((unsigned char *)wcol->inner, -16); + gl_shaded_color((unsigned char *)wcol->inner, -16); ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.25f); /* grid, every 1.0 step */ - glColor3ubvShade((unsigned char *)wcol->inner, -24); + gl_shaded_color((unsigned char *)wcol->inner, -24); ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 1.0f); /* axes */ - glColor3ubvShade((unsigned char *)wcol->inner, -50); + gl_shaded_color((unsigned char *)wcol->inner, -50); glBegin(GL_LINES); glVertex2f(rect->xmin, rect->ymin + zoomy * (-offsy)); glVertex2f(rect->xmax, rect->ymin + zoomy * (-offsy)); @@ -1469,8 +1469,11 @@ static ImBuf *scale_trackpreview_ibuf(ImBuf *ibuf, float track_pos[2], int width ImBuf *scaleibuf; const float scalex = ((float)ibuf->x - 2 * margin) / width; const float scaley = ((float)ibuf->y - 2 * margin) / height; - float off_x = (int)track_pos[0] - track_pos[0] + 0.5f; - float off_y = (int)track_pos[1] - track_pos[1] + 0.5f; + /* NOTE: 1.0f = 0.5f for integer coordinate coorrection (center of pixel vs. left bottom corner of bixel) + * and 0.5f for centering image in preview (cross is draving at exact center of widget so image + * should be shifted by half of pixel for correct centering) - sergey */ + float off_x = (int)track_pos[0] - track_pos[0] + 1.0f; + float off_y = (int)track_pos[1] - track_pos[1] + 1.0f; int x, y; scaleibuf = IMB_allocImBuf(width, height, 32, IB_rect); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 42005c0888c..4cc478aa7c4 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -781,7 +781,8 @@ static void ui_add_smart_controller(bContext *C, uiBut *from, uiBut *to) act_to = (bActuator *)(to->poin); /* (1) get the object */ - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { for (sens_iter = ob_iter->sensors.first; sens_iter; sens_iter = sens_iter->next) { if (&(sens_iter->links) == sens_from_links) { ob = ob_iter; @@ -1206,7 +1207,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, but->poin = MEM_callocN(sizeof(ColorBand), "colorband"); button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); - memcpy(data->coba, &but_copypaste_coba, sizeof(ColorBand) ); + memcpy(data->coba, &but_copypaste_coba, sizeof(ColorBand)); button_activate_state(C, but, BUTTON_STATE_EXIT); } } diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 31bc9497ab5..3c913b26dec 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -857,7 +857,7 @@ void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char PointerRNA ptr; PropertyRNA *prop; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); @@ -888,7 +888,7 @@ void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char EnumPropertyItem *item; int value, free; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); @@ -926,7 +926,7 @@ void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *op wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */ PointerRNA ptr; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); RNA_boolean_set(&ptr, propname, value); @@ -939,7 +939,7 @@ void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */ PointerRNA ptr; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); RNA_int_set(&ptr, propname, value); @@ -952,7 +952,7 @@ void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opna wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */ PointerRNA ptr; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); RNA_float_set(&ptr, propname, value); @@ -965,7 +965,7 @@ void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opn wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */ PointerRNA ptr; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); WM_operator_properties_create_ptr(&ptr, ot); RNA_string_set(&ptr, propname, value); @@ -1265,7 +1265,8 @@ static void rna_search_cb(const struct bContext *C, void *arg_but, const char *s const int skip_filter = !but->changed; /* build a temporary list of relevant items first */ - RNA_PROP_BEGIN (&but->rnasearchpoin, itemptr, but->rnasearchprop) { + RNA_PROP_BEGIN (&but->rnasearchpoin, itemptr, but->rnasearchprop) + { if (flag & PROP_ID_SELF_CHECK) if (itemptr.data == but->rnapoin.id.data) continue; @@ -1333,7 +1334,8 @@ static void search_id_collection(StructRNA *ptype, PointerRNA *ptr, PropertyRNA *prop = NULL; - RNA_STRUCT_BEGIN (ptr, iprop) { + RNA_STRUCT_BEGIN (ptr, iprop) + { /* if it's a collection and has same pointer type, we've got it */ if (RNA_property_type(iprop) == PROP_COLLECTION) { srna = RNA_property_pointer_type(ptr, iprop); @@ -1609,7 +1611,7 @@ void uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */ MenuItemLevel *lvl; - UI_OPERATOR_ERROR_RET(ot, opname, return ); + UI_OPERATOR_ERROR_RET(ot, opname, return); if (!ot->srna) { ui_item_disabled(layout, opname); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 254735934db..36e8dedee97 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2363,7 +2363,8 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN (ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) + { /* create button */ if (!(i % 9)) row = uiLayoutRow(col, 0); @@ -2385,7 +2386,8 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN (ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) + { found = (activei == i); if (found) { @@ -2447,7 +2449,8 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN (ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) + { if (i >= pa->list_scroll && i < pa->list_scroll + items) list_item_row(C, col, ptr, &itemptr, i, rnaicon, activeptr, activeprop, prop_list); @@ -2704,7 +2707,8 @@ static void template_keymap_item_properties(uiLayout *layout, const char *title, flow = uiLayoutColumnFlow(layout, 2, 0); - RNA_STRUCT_BEGIN (ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) + { int flag = RNA_property_flag(prop); if (flag & PROP_HIDDEN) diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 9220491a60c..a0b83b5fef4 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -139,7 +139,8 @@ int uiDefAutoButsRNA(uiLayout *layout, PointerRNA *ptr, int (*check_prop)(Pointe assert(ELEM3(label_align, '\0', 'H', 'V')); - RNA_STRUCT_BEGIN (ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) + { flag = RNA_property_flag(prop); if (flag & PROP_HIDDEN || (check_prop && check_prop(ptr, prop) == FALSE)) continue; diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 12da5968e48..4694a743d59 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -1,5 +1,5 @@ /* - * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -870,6 +870,9 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tclip.cframe, 0x60, 0xc0, 0x40, 255); rgba_char_args_set(btheme->tclip.handle_vertex, 0x00, 0x00, 0x00, 0xff); rgba_char_args_set(btheme->tclip.handle_vertex_select, 0xff, 0xff, 0, 0xff); + rgba_char_args_set(btheme->tclip.list, 0x66, 0x66, 0x66, 0xff); + rgba_char_args_set(btheme->tclip.strip, 0x0c, 0x0a, 0x0a, 0x80); + rgba_char_args_set(btheme->tclip.strip_select, 0xff, 0x8c, 0x00, 0xff); btheme->tclip.handle_vertex_size = 4; } @@ -1781,6 +1784,17 @@ void init_userdef_do_versions(void) } } + if (bmain->versionfile < 263 || (bmain->versionfile == 263 && bmain->subversionfile < 2)) { + bTheme *btheme; + for (btheme = U.themes.first; btheme; btheme = btheme->next) { + if (btheme->tclip.strip[0] == 0) { + rgba_char_args_set(btheme->tclip.list, 0x66, 0x66, 0x66, 0xff); + rgba_char_args_set(btheme->tclip.strip, 0x0c, 0x0a, 0x0a, 0x80); + rgba_char_args_set(btheme->tclip.strip_select, 0xff, 0x8c, 0x00, 0xff); + } + } + } + /* Freestyle color settings */ { bTheme *btheme; diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index c2a97b3ea70..60c0ebbc7b3 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -475,7 +475,7 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op) ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, &view_aligned); if (!view_aligned) - rot[0] += M_PI / 2.0f; + rot[0] += (float)M_PI / 2.0f; make_prim_init(C, "Monkey", &dia, mat, &state, loc, rot, layer); diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 6f33fcd05b7..57d7869d3db 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -1412,7 +1412,7 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo float co[3], cageco[3], sco[3], maxdist = knife_snap_size(kcd, kcd->ethresh); if (kcd->ignore_vert_snapping) - maxdist *= 0.5; + maxdist *= 0.5f; f = knife_find_closest_face(kcd, co, cageco, NULL); *is_space = !f; @@ -1502,7 +1502,7 @@ static KnifeVert *knife_find_closest_vert(KnifeTool_OpData *kcd, float p[3], flo float co[3], cageco[3], sco[3], maxdist = knife_snap_size(kcd, kcd->vthresh); if (kcd->ignore_vert_snapping) - maxdist *= 0.5; + maxdist *= 0.5f; f = knife_find_closest_face(kcd, co, cageco, is_space); @@ -1877,11 +1877,11 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd) if (face_nets[i].first) BMO_elem_flag_enable(bm, f, DEL); - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); for (entry = face_nets[i].first; entry; entry = entry->next) { if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v1)) { - eve = BLI_addfillvert(&sf_ctx, entry->kfe->v1->v->co); + eve = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v1->v->co); eve->poly_nr = 0; rnd_offset_co(eve->co, rndscale); eve->tmp.p = entry->kfe->v1->v; @@ -1889,7 +1889,7 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd) } if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v2)) { - eve = BLI_addfillvert(&sf_ctx, entry->kfe->v2->v->co); + eve = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v2->v->co); eve->poly_nr = 0; rnd_offset_co(eve->co, rndscale); eve->tmp.p = entry->kfe->v2->v; @@ -1911,7 +1911,7 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd) if (eve->poly_nr > 1 && lasteve->poly_nr > 1) { ScanFillEdge *eed; - eed = BLI_addfilledge(&sf_ctx, lasteve, eve); + eed = BLI_scanfill_edge_add(&sf_ctx, lasteve, eve); if (entry->kfe->oe) eed->f = SF_EDGE_BOUNDARY; /* mark as original boundary edge */ @@ -1926,7 +1926,7 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd) } } - BLI_edgefill(&sf_ctx, FALSE); + BLI_scanfill_calc(&sf_ctx, FALSE); for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) { BMVert *v1 = efa->v3->tmp.p, *v2 = efa->v2->tmp.p, *v3 = efa->v1->tmp.p; @@ -1959,7 +1959,7 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd) } } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); BLI_smallhash_release(hash); } bm->elem_index_dirty |= BM_FACE; @@ -2684,6 +2684,7 @@ static void knifetool_finish(bContext *C, wmOperator *op) knife_make_cuts(kcd); #endif + EDBM_mesh_normals_update(kcd->em); EDBM_update_generic(C, kcd->em, TRUE); } diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index beb5345ca9b..0b65cce20d7 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -314,7 +314,7 @@ static void ringsel_finish(bContext *C, wmOperator *op) if (lcd->do_cut) { BM_mesh_esubdivide(em->bm, BM_ELEM_SELECT, - 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, cuts, SUBDIV_SELECT_LOOPCUT, SUBD_PATH, 0, FALSE, 0); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 6af8f82ec1a..7e89025d528 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1131,7 +1131,7 @@ static float edgetag_cut_cost(BMEditMesh *UNUSED(em), BMEdge *e1, BMEdge *e2, BM /* but is biased to give higher values to sharp turns, so that it will take * paths with fewer "turns" when selecting between equal-weighted paths between * the two edges */ - cost = cost + 0.5f * cost * (2.0f - sqrt(fabs(dot_v3v3(d1, d2)))); + cost = cost + 0.5f * cost * (2.0f - sqrtf(fabsf(dot_v3v3(d1, d2)))); return cost; } @@ -2304,7 +2304,7 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) float sharp = RNA_float_get(op->ptr, "sharpness"); int i; - sharp = (sharp * M_PI) / 180.0; + sharp = (sharp * (float)M_PI) / 180.0f; BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) { BM_elem_flag_disable(f, BM_ELEM_TAG); diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index a82f34a4649..a86a274eb70 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -279,7 +279,7 @@ static void vtx_slide_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) /* Get 3d view */ View3D *view3d = CTX_wm_view3d(C); const float outline_w = UI_GetThemeValuef(TH_OUTLINE_WIDTH) + 0.8f; - const float pt_size = UI_GetThemeValuef(TH_FACEDOT_SIZE) + 1.5; + const float pt_size = UI_GetThemeValuef(TH_FACEDOT_SIZE) + 1.5f; int i = 0; @@ -577,6 +577,7 @@ static int edbm_vertex_slide_modal(bContext *C, wmOperator *op, wmEvent *event) break; } case RIGHTMOUSE: + case ESCKEY: { /* Enforce redraw */ ED_region_tag_redraw(vso->active_region); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e3916d0aa51..533b2ca12de 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -87,6 +87,7 @@ static int edbm_subdivide_exec(bContext *C, wmOperator *op) int cuts = RNA_int_get(op->ptr, "number_cuts"); float smooth = 0.292f * RNA_float_get(op->ptr, "smoothness"); float fractal = RNA_float_get(op->ptr, "fractal") / 2.5f; + float along_normal = RNA_float_get(op->ptr, "fractal_along_normal"); if (RNA_boolean_get(op->ptr, "quadtri") && RNA_enum_get(op->ptr, "quadcorner") == SUBD_STRAIGHT_CUT) @@ -95,7 +96,7 @@ static int edbm_subdivide_exec(bContext *C, wmOperator *op) } BM_mesh_esubdivide(em->bm, BM_ELEM_SELECT, - smooth, fractal, + smooth, fractal, along_normal, cuts, SUBDIV_SELECT_ORIG, RNA_enum_get(op->ptr, "quadcorner"), RNA_boolean_get(op->ptr, "quadtri"), TRUE, @@ -143,6 +144,7 @@ void MESH_OT_subdivide(wmOperatorType *ot) "Quad Corner Type", "How to subdivide quad corners (anything other than Straight Cut will prevent ngons)"); RNA_def_float(ot->srna, "fractal", 0.0f, 0.0f, FLT_MAX, "Fractal", "Fractal randomness factor", 0.0f, 1000.0f); + RNA_def_float(ot->srna, "fractal_along_normal", 0.0f, 0.0f, 1.0f, "Along Normal", "Apply fractal displacement along normal only", 0.0f, 1.0f); RNA_def_int(ot->srna, "seed", 0, 0, 10000, "Random Seed", "Seed for the random number generator", 0, 50); } @@ -896,7 +898,7 @@ static EnumPropertyItem prop_mesh_delete_types[] = { {0, "VERT", 0, "Vertices", ""}, {1, "EDGE", 0, "Edges", ""}, {2, "FACE", 0, "Faces", ""}, - {3, "EDGE_FACE", 0, "Edges & Faces", ""}, + {3, "EDGE_FACE", 0, "Only Edges & Faces", ""}, {4, "ONLY_FACE", 0, "Only Faces", ""}, {0, NULL, 0, NULL, NULL} }; @@ -2344,7 +2346,7 @@ static int edbm_select_axis_exec(bContext *C, wmOperator *op) if (!BM_elem_flag_test(ev, BM_ELEM_HIDDEN)) { switch (mode) { case -1: /* aligned */ - if (fabs(ev->co[axis] - value) < limit) + if (fabsf(ev->co[axis] - value) < limit) BM_vert_select_set(em->bm, ev, TRUE); break; case 0: /* neg */ @@ -2591,21 +2593,21 @@ static float bm_edge_seg_isect(BMEdge *e, CutCurve *c, int len, char mode, m1 = MAXSLOPE; b1 = x12; } - x2max = MAX2(x21, x22) + 0.001; /* prevent missed edges */ - x2min = MIN2(x21, x22) - 0.001; /* due to round off error */ - y2max = MAX2(y21, y22) + 0.001; - y2min = MIN2(y21, y22) - 0.001; + x2max = MAX2(x21, x22) + 0.001f; /* prevent missed edges */ + x2min = MIN2(x21, x22) - 0.001f; /* due to round off error */ + y2max = MAX2(y21, y22) + 0.001f; + y2min = MIN2(y21, y22) - 0.001f; /* Found an intersect, calc intersect point */ if (m1 == m2) { /* co-incident lines */ /* cut at 50% of overlap area */ x1max = MAX2(x11, x12); x1min = MIN2(x11, x12); - xi = (MIN2(x2max, x1max) + MAX2(x2min, x1min)) / 2.0; + xi = (MIN2(x2max, x1max) + MAX2(x2min, x1min)) / 2.0f; y1max = MAX2(y11, y12); y1min = MIN2(y11, y12); - yi = (MIN2(y2max, y1max) + MAX2(y2min, y1min)) / 2.0; + yi = (MIN2(y2max, y1max) + MAX2(y2min, y1min)) / 2.0f; } else if (m2 == MAXSLOPE) { xi = x22; @@ -2680,7 +2682,8 @@ static int edbm_knife_cut_exec(bContext *C, wmOperator *op) } /* get the cut curve */ - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { RNA_float_get_array(&itemptr, "loc", (float *)&curve[len]); len++; if (len >= MAX_CUTS) { @@ -3123,10 +3126,22 @@ static int edbm_tris_convert_to_quads_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void MESH_OT_tris_convert_to_quads(wmOperatorType *ot) +static void join_triangle_props(wmOperatorType *ot) { PropertyRNA *prop; + prop = RNA_def_float_rotation(ot->srna, "limit", 0, NULL, 0.0f, DEG2RADF(180.0f), + "Max Angle", "Angle Limit", 0.0f, DEG2RADF(180.0f)); + RNA_def_property_float_default(prop, DEG2RADF(40.0f)); + + RNA_def_boolean(ot->srna, "uvs", 0, "Compare UVs", ""); + RNA_def_boolean(ot->srna, "vcols", 0, "Compare VCols", ""); + RNA_def_boolean(ot->srna, "sharp", 0, "Compare Sharp", ""); + RNA_def_boolean(ot->srna, "materials", 0, "Compare Materials", ""); +} + +void MESH_OT_tris_convert_to_quads(wmOperatorType *ot) +{ /* identifiers */ ot->name = "Tris to Quads"; ot->idname = "MESH_OT_tris_convert_to_quads"; @@ -3139,14 +3154,7 @@ void MESH_OT_tris_convert_to_quads(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - prop = RNA_def_float_rotation(ot->srna, "limit", 0, NULL, 0.0f, DEG2RADF(180.0f), - "Max Angle", "Angle Limit", 0.0f, DEG2RADF(180.0f)); - RNA_def_property_float_default(prop, DEG2RADF(40.0f)); - - RNA_def_boolean(ot->srna, "uvs", 0, "Compare UVs", ""); - RNA_def_boolean(ot->srna, "vcols", 0, "Compare VCols", ""); - RNA_def_boolean(ot->srna, "sharp", 0, "Compare Sharp", ""); - RNA_def_boolean(ot->srna, "materials", 0, "Compare Materials", ""); + join_triangle_props(ot); } static int edbm_dissolve_exec(bContext *C, wmOperator *op) @@ -3197,11 +3205,45 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BMEdit_FromObject(obedit); + BMesh *bm = em->bm; float angle_limit = RNA_float_get(op->ptr, "angle_limit"); + char dissolve_flag; + + if (em->selectmode == SCE_SELECT_FACE) { + /* flush selection to tags and untag edges/verts with partially selected faces */ + BMIter iter; + BMIter liter; + + BMElem *ele; + BMFace *f; + BMLoop *l; + + BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) { + BM_elem_flag_set(ele, BM_ELEM_TAG, BM_elem_flag_test(ele, BM_ELEM_SELECT)); + } + BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) { + BM_elem_flag_set(ele, BM_ELEM_TAG, BM_elem_flag_test(ele, BM_ELEM_SELECT)); + } + + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + if (!BM_elem_flag_test(f, BM_ELEM_SELECT)) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + BM_elem_flag_disable(l->v, BM_ELEM_TAG); + BM_elem_flag_disable(l->e, BM_ELEM_TAG); + } + } + } + + dissolve_flag = BM_ELEM_TAG; + } + else { + dissolve_flag = BM_ELEM_SELECT; + } + if (!EDBM_op_callf(em, op, "dissolve_limit edges=%he verts=%hv angle_limit=%f", - BM_ELEM_SELECT, BM_ELEM_SELECT, angle_limit)) + dissolve_flag, dissolve_flag, angle_limit)) { return OPERATOR_CANCELLED; } @@ -3677,8 +3719,11 @@ static void xsortvert_flag(bContext *C, int flag) } } /* printf("%d verts: %d to be sorted, %d unchanged…\n", totvert, sorted, unchanged);*/ - if (sorted == 0) + if (sorted == 0) { + MEM_freeN(sortblock); + MEM_freeN(unchangedblock); return; + } ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d); mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, V3D_CLIP_TEST_OFF); @@ -3936,8 +3981,11 @@ static void hashvert_flag(BMEditMesh *em, int flag, unsigned int seed) } /* protected = totvert - randomized;*/ /* printf("%d verts: %d to be randomized, %d protected…\n", totvert, randomized, protected);*/ - if (randomized == 0) + if (randomized == 0) { + MEM_freeN(block); + MEM_freeN(randblock); return; + } /* Randomize non-protected vertices indices, and create an array mapping old idx to new @@ -4020,7 +4068,7 @@ static int edbm_noise_exec(bContext *C, wmOperator *op) if (tex->type == TEX_STUCCI) { float b2, vec[3]; - float ofs = tex->turbul / 200.0; + float ofs = tex->turbul / 200.0f; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { b2 = BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]); @@ -4107,7 +4155,7 @@ static int edbm_bevel_exec(bContext *C, wmOperator *op) w[i] = s; ftot += s; - df *= 2.0; + df *= 2.0f; } mul_vn_fl(w, recursion, 1.0f / (float)ftot); @@ -4266,6 +4314,169 @@ void MESH_OT_inset(wmOperatorType *ot) RNA_def_boolean(ot->srna, "use_select_inset", TRUE, "Select Outer", "Select the new inset faces"); } +static int edbm_wireframe_exec(bContext *C, wmOperator *op) +{ + Object *obedit = CTX_data_edit_object(C); + BMEditMesh *em = BMEdit_FromObject(obedit); + BMOperator bmop; + const int use_boundary = RNA_boolean_get(op->ptr, "use_boundary"); + const int use_even_offset = RNA_boolean_get(op->ptr, "use_even_offset"); + const int use_replace = RNA_boolean_get(op->ptr, "use_replace"); + const int use_relative_offset = RNA_boolean_get(op->ptr, "use_relative_offset"); + const int use_crease = RNA_boolean_get(op->ptr, "use_crease"); + const float thickness = RNA_float_get(op->ptr, "thickness"); + + EDBM_op_init(em, &bmop, op, + "wireframe faces=%hf use_boundary=%b use_even_offset=%b use_relative_offset=%b use_crease=%b " + "thickness=%f", + BM_ELEM_SELECT, use_boundary, use_even_offset, use_relative_offset, use_crease, + thickness); + + BMO_op_exec(em->bm, &bmop); + + if (use_replace) { + BM_mesh_elem_hflag_disable_all(em->bm, BM_FACE, BM_ELEM_TAG, FALSE); + BMO_slot_buffer_hflag_enable(em->bm, &bmop, "faces", BM_FACE, BM_ELEM_TAG, FALSE); + + BMO_op_callf(em->bm, "del geom=%hvef context=%i", BM_ELEM_TAG, DEL_FACES); + } + + BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE); + BMO_slot_buffer_hflag_enable(em->bm, &bmop, "faceout", BM_FACE, BM_ELEM_SELECT, TRUE); + + if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + return OPERATOR_CANCELLED; + } + else { + EDBM_update_generic(C, em, TRUE); + return OPERATOR_FINISHED; + } +} + +void MESH_OT_wireframe(wmOperatorType *ot) +{ + PropertyRNA *prop; + + /* identifiers */ + ot->name = "Wire Frame"; + ot->idname = "MESH_OT_wireframe"; + ot->description = "Inset new faces into selected faces"; + + /* api callbacks */ + ot->exec = edbm_wireframe_exec; + ot->poll = ED_operator_editmesh; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "use_boundary", TRUE, "Boundary", "Inset face boundaries"); + RNA_def_boolean(ot->srna, "use_even_offset", TRUE, "Offset Even", "Scale the offset to give more even thickness"); + RNA_def_boolean(ot->srna, "use_relative_offset", FALSE, "Offset Relative", "Scale the offset by surrounding geometry"); + RNA_def_boolean(ot->srna, "use_crease", FALSE, "Crease", "Crease hub edges for improved subsurf"); + + prop = RNA_def_float(ot->srna, "thickness", 0.01f, 0.0f, FLT_MAX, "Thickness", "", 0.0f, 10.0f); + /* use 1 rather then 10 for max else dragging the button moves too far */ + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 4); + + + RNA_def_boolean(ot->srna, "use_replace", TRUE, "Replace", "Remove original faces"); +} + +static int edbm_convex_hull_exec(bContext *C, wmOperator *op) +{ + Object *obedit = CTX_data_edit_object(C); + BMEditMesh *em = BMEdit_FromObject(obedit); + BMOperator bmop; + + EDBM_op_init(em, &bmop, op, "convex_hull input=%hvef " + "use_existing_faces=%b", + BM_ELEM_SELECT, + RNA_boolean_get(op->ptr, "use_existing_faces")); + BMO_op_exec(em->bm, &bmop); + + /* Hull fails if input is coplanar */ + if (BMO_error_occurred(em->bm)) { + EDBM_op_finish(em, &bmop, op, TRUE); + return OPERATOR_CANCELLED; + } + + + /* Delete unused vertices, edges, and faces */ + if (RNA_boolean_get(op->ptr, "delete_unused")) { + if (!EDBM_op_callf(em, op, "del geom=%s context=%i", + &bmop, "unused_geom", DEL_ONLYTAGGED)) + { + EDBM_op_finish(em, &bmop, op, TRUE); + return OPERATOR_CANCELLED; + } + } + + /* Delete hole edges/faces */ + if (RNA_boolean_get(op->ptr, "make_holes")) { + if (!EDBM_op_callf(em, op, "del geom=%s context=%i", + &bmop, "holes_geom", DEL_ONLYTAGGED)) + { + EDBM_op_finish(em, &bmop, op, TRUE); + return OPERATOR_CANCELLED; + } + } + + /* Merge adjacent triangles */ + if (RNA_boolean_get(op->ptr, "join_triangles")) { + if (!EDBM_op_callf(em, op, "join_triangles faces=%s limit=%f", + &bmop, "geomout", + RNA_float_get(op->ptr, "limit"))) + { + EDBM_op_finish(em, &bmop, op, TRUE); + return OPERATOR_CANCELLED; + } + } + + if (!EDBM_op_finish(em, &bmop, op, TRUE)) { + return OPERATOR_CANCELLED; + } + else { + EDBM_update_generic(C, em, TRUE); + EDBM_selectmode_flush(em); + return OPERATOR_FINISHED; + } +} + +void MESH_OT_convex_hull(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Convex Hull"; + ot->description = "Enclose selected vertices in a convex polyhedron"; + ot->idname = "MESH_OT_convex_hull"; + + /* api callbacks */ + ot->exec = edbm_convex_hull_exec; + ot->poll = EM_view3d_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* props */ + RNA_def_boolean(ot->srna, "delete_unused", TRUE, + "Delete Unused", + "Delete selected elements that are not used by the hull"); + + RNA_def_boolean(ot->srna, "use_existing_faces", TRUE, + "Use Existing Faces", + "Skip hull triangles that are covered by a pre-existing face"); + + RNA_def_boolean(ot->srna, "make_holes", FALSE, + "Make Holes", + "Delete selected faces that are used by the hull"); + + RNA_def_boolean(ot->srna, "join_triangles", TRUE, + "Join Triangles", + "Merge adjacent triangles into quads"); + + join_triangle_props(ot); +} + static int edbm_mark_freestyle_edge(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 2ebeb9ca224..a17f335091b 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -671,7 +671,7 @@ UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx sub_v2_v2v2(uvdiff, uv2, uv); - if (fabs(uvdiff[0]) < limit[0] && fabs(uvdiff[1]) < limit[1]) { + if (fabsf(uvdiff[0]) < limit[0] && fabsf(uvdiff[1]) < limit[1]) { if (lastv) lastv->next = next; else vlist = next; iterv->next = newvlist; diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index 5aea6f8d1c3..f611a985797 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -189,42 +189,6 @@ static void delete_customdata_layer(bContext *C, Object *ob, CustomDataLayer *la } } -/* copies from active to 'index' */ -static void editmesh_face_copy_customdata(BMEditMesh *em, int type, int index) -{ - BMesh *bm = em->bm; - CustomData *pdata = &bm->pdata; - BMIter iter; - BMFace *efa; - const int n = CustomData_get_active_layer(pdata, type); - - /* ensure all current elements follow new customdata layout */ - BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { - void *data = CustomData_bmesh_get_n(pdata, efa->head.data, type, n); - CustomData_bmesh_set_n(pdata, efa->head.data, type, index, data); - } -} - -/* copies from active to 'index' */ -static void editmesh_loop_copy_customdata(BMEditMesh *em, int type, int index) -{ - BMesh *bm = em->bm; - CustomData *ldata = &bm->ldata; - BMIter iter; - BMIter liter; - BMFace *efa; - BMLoop *loop; - const int n = CustomData_get_active_layer(ldata, type); - - /* ensure all current elements follow new customdata layout */ - BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { - BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) { - void *data = CustomData_bmesh_get_n(ldata, loop->head.data, type, n); - CustomData_bmesh_set_n(ldata, loop->head.data, type, index, data); - } - } -} - int ED_mesh_uv_loop_reset_ex(struct bContext *C, struct Mesh *me, const int layernum) { BMEditMesh *em = me->edit_btmesh; @@ -311,11 +275,11 @@ int ED_mesh_uv_loop_reset_ex(struct bContext *C, struct Mesh *me, const int laye else if (len > 2) { float fac = 0.0f, dfac = 1.0f / (float)len; - dfac *= M_PI * 2; + dfac *= (float)M_PI * 2.0f; for (i = 0; i < len; i++) { - fuvs[i][0] = 0.5f * sin(fac) + 0.5f; - fuvs[i][1] = 0.5f * cos(fac) + 0.5f; + fuvs[i][0] = 0.5f * sinf(fac) + 0.5f; + fuvs[i][1] = 0.5f * cosf(fac) + 0.5f; fac += dfac; } @@ -360,7 +324,8 @@ int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_s BM_data_layer_add_named(em->bm, &em->bm->pdata, CD_MTEXPOLY, name); /* copy data from active UV */ if (layernum) { - editmesh_face_copy_customdata(em, CD_MTEXPOLY, layernum); + const int layernum_dst = CustomData_get_active_layer(&em->bm->pdata, CD_MTEXPOLY); + BM_data_layer_copy(em->bm, &em->bm->pdata, CD_MTEXPOLY, layernum, layernum_dst); } if (active_set || layernum == 0) { CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum); @@ -370,7 +335,9 @@ int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_s BM_data_layer_add_named(em->bm, &em->bm->ldata, CD_MLOOPUV, name); /* copy data from active UV */ if (layernum) { - editmesh_loop_copy_customdata(em, CD_MLOOPUV, layernum); + const int layernum_dst = CustomData_get_active_layer(&em->bm->ldata, CD_MLOOPUV); + BM_data_layer_copy(em->bm, &em->bm->ldata, CD_MLOOPUV, layernum, layernum_dst); + is_init = TRUE; } if (active_set || layernum == 0) { @@ -457,7 +424,8 @@ int ED_mesh_color_add(bContext *C, Scene *UNUSED(scene), Object *UNUSED(ob), Mes BM_data_layer_add_named(em->bm, &em->bm->ldata, CD_MLOOPCOL, name); /* copy data from active vertex color layer */ if (layernum) { - editmesh_loop_copy_customdata(em, CD_MLOOPCOL, layernum); + const int layernum_dst = CustomData_get_active_layer(&em->bm->ldata, CD_MLOOPCOL); + BM_data_layer_copy(em->bm, &em->bm->ldata, CD_MLOOPUV, layernum, layernum_dst); } if (active_set || layernum == 0) { CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPCOL, layernum); diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 20adc219bf9..a5eb39c7da4 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -213,8 +213,11 @@ void MESH_OT_bevel(struct wmOperatorType *ot); void MESH_OT_bridge_edge_loops(struct wmOperatorType *ot); void MESH_OT_inset(struct wmOperatorType *ot); +void MESH_OT_wireframe(struct wmOperatorType *ot); void MESH_OT_vert_slide(struct wmOperatorType *ot); +void MESH_OT_convex_hull(struct wmOperatorType *ot); + /* ******************* mesh_navmesh.c */ void MESH_OT_navmesh_make(struct wmOperatorType *ot); void MESH_OT_navmesh_face_copy(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 43cd89af3ac..cc640e38fc2 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -316,6 +316,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, } else { obedit = base->object; + scene_deselect_all(scene); scene_select_base(scene, base); copy_v3_v3(obedit->loc, co); copy_v3_v3(obedit->rot, rot); @@ -430,7 +431,8 @@ static int navmesh_create_exec(bContext *C, wmOperator *op) LinkNode *obs = NULL; Base *navmeshBase = NULL; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { if (base->object->type == OB_MESH) { if (base->object->body_type == OB_BODY_TYPE_NAVMESH) { if (!navmeshBase || base == scene->basact) { diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 15f9ddd0f90..37ae5b4a967 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -166,8 +166,11 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_bridge_edge_loops); WM_operatortype_append(MESH_OT_inset); + WM_operatortype_append(MESH_OT_wireframe); WM_operatortype_append(MESH_OT_edge_split); + WM_operatortype_append(MESH_OT_convex_hull); + #ifdef WITH_GAMEENGINE WM_operatortype_append(MESH_OT_navmesh_make); WM_operatortype_append(MESH_OT_navmesh_face_copy); diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index d8e9dea598c..e41807787f1 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -122,7 +122,8 @@ int join_mesh_exec(bContext *C, wmOperator *op) } /* count & check */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { if (base->object->type == OB_MESH) { me = base->object->data; @@ -198,7 +199,8 @@ int join_mesh_exec(bContext *C, wmOperator *op) } /* first pass over objects - copying materials and vertexgroups across */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { /* only act if a mesh, and not the one we're joining to */ if ((ob != base->object) && (base->object->type == OB_MESH)) { me = base->object->data; @@ -298,7 +300,8 @@ int join_mesh_exec(bContext *C, wmOperator *op) /* inverse transform for all selected meshes in this object */ invert_m4_m4(imat, ob->obmat); - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { /* only join if this is a mesh */ if (base->object->type == OB_MESH) { me = base->object->data; @@ -567,7 +570,8 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op) KeyBlock *kb; int ok = 0, nonequal_verts = 0; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { if (base->object == ob) continue; if (base->object->type == OB_MESH) { @@ -599,7 +603,8 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op) } /* now ready to add new keys from selected meshes */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { if (base->object == ob) continue; if (base->object->type == OB_MESH) { @@ -642,9 +647,9 @@ static int mesh_octree_get_base_offs(const float co[3], const float offs[3], con { int vx, vy, vz; - vx = floor( (co[0] - offs[0]) / div[0]); - vy = floor( (co[1] - offs[1]) / div[1]); - vz = floor( (co[2] - offs[2]) / div[2]); + vx = floor((co[0] - offs[0]) / div[0]); + vy = floor((co[1] - offs[1]) / div[1]); + vz = floor((co[2] - offs[2]) / div[2]); CLAMP(vx, 0, MOC_RES - 1); CLAMP(vy, 0, MOC_RES - 1); diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index 1407d38ed0f..fd842ce4f7c 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -195,7 +195,7 @@ static int select_random_metaelems_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; ml= mb->editelems->first; - BLI_srand( BLI_rand() ); /* Random seed */ + BLI_srand(BLI_rand()); /* Random seed */ /* Stupid version of random selection. Should be improved. */ while (ml) { diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index fcce65c9326..d030e61952e 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -906,7 +906,8 @@ static int object_delete_exec(bContext *C, wmOperator *op) if (CTX_data_edit_object(C)) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) + { /* if (base->object->type==OB_LAMP) islamp= 1; */ @@ -972,7 +973,8 @@ static void copy_object_set_idnew(bContext *C, int dupflag) int a; /* XXX check object pointers */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { object_relink(ob); } CTX_DATA_END; @@ -1100,7 +1102,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, if (dupli_gh) BLI_ghash_insert(dupli_gh, dob, ob); if (parent_gh) - BLI_ghash_insert(parent_gh, BLI_ghashutil_pairalloc(dob->ob, dob->index), ob); + BLI_ghash_insert(parent_gh, BLI_ghashutil_pairalloc(dob->ob, SET_INT_IN_POINTER(dob->index)), ob); } if (use_hierarchy) { @@ -1114,7 +1116,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, /* find parent that was also made real */ if (ob_src_par) { - GHashPair *pair = BLI_ghashutil_pairalloc(ob_src_par, dob->index); + GHashPair *pair = BLI_ghashutil_pairalloc(ob_src_par, SET_INT_IN_POINTER(dob->index)); ob_dst_par = BLI_ghash_lookup(parent_gh, pair); BLI_ghashutil_pairfree(pair); } @@ -1189,7 +1191,8 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op) clear_id_newpoins(); - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { make_object_duplilist_real(C, scene, base, use_base_parent, use_hierarchy); /* dependencies were changed */ @@ -1295,7 +1298,8 @@ static int convert_exec(bContext *C, wmOperator *op) /* don't forget multiple users! */ /* reset flags */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { ob = base->object; ob->flag &= ~OB_DONE; @@ -1306,7 +1310,8 @@ static int convert_exec(bContext *C, wmOperator *op) } CTX_DATA_END; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { ob = base->object; if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) { @@ -1778,7 +1783,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base if (dupflag != 0) { ID_NEW_US2(obn->data) else { - obn->data = copy_camera(obn->data); + obn->data = BKE_camera_copy(obn->data); didit = 1; } id->us--; @@ -1826,7 +1831,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base for (a = 0; a < obn->totcol; a++) { id = (ID *)(*matarar)[a]; if (id) { - ID_NEW_US( (*matarar)[a]) + ID_NEW_US((*matarar)[a]) else (*matarar)[a] = copy_material((*matarar)[a]); id->us--; @@ -1880,7 +1885,8 @@ static int duplicate_exec(bContext *C, wmOperator *op) clear_id_newpoins(); clear_sca_new_poins(); /* sensor/contr/act */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { Base *basen = object_add_duplicate_internal(bmain, scene, base, dupflag); /* note that this is safe to do with this context iterator, diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 9e8381a72c6..593a5b6f1fe 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -922,7 +922,8 @@ static int multiresbake_check(bContext *C, wmOperator *op) MultiresModifierData *mmd; int ok = 1, a; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { ob = base->object; if (ob->type != OB_MESH) { @@ -1079,7 +1080,8 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; if (scene->r.bake_flag & R_BAKE_CLEAR) { /* clear images */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { Mesh *me; ob = base->object; @@ -1090,7 +1092,8 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { MultiresBakeRender bkr = {0}; ob = base->object; @@ -1139,7 +1142,8 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) bkj->use_lores_mesh = scene->r.bake_flag & R_BAKE_LORES_MESH; bkj->bake_clear = scene->r.bake_flag & R_BAKE_CLEAR; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { MultiresBakerJobData *data; DerivedMesh *lores_dm; int lvl; diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index a865b1d015d..e63e0e34934 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -1150,7 +1150,8 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob = object_pose_armature_get(CTX_data_active_object(C)); /* free constraints for all selected bones */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { free_constraints(&pchan->constraints); pchan->constflag &= ~(PCHAN_HAS_IK | PCHAN_HAS_SPLINEIK | PCHAN_HAS_CONST); } @@ -1187,7 +1188,8 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene = CTX_data_scene(C); /* do freeing */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { free_constraints(&ob->constraints); DAG_id_tag_update(&ob->id, OB_RECALC_OB); } @@ -1229,7 +1231,8 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op) } /* copy all constraints from active posebone to all selected posebones */ - CTX_DATA_BEGIN (C, bPoseChannel *, chan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, chan, selected_pose_bones) + { /* if we're not handling the object we're copying from, copy all constraints over */ if (pchan != chan) { copy_constraints(&chan->constraints, &pchan->constraints, TRUE); @@ -1269,7 +1272,8 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op)) Object *obact = ED_object_active_context(C); /* copy all constraints from active object to all selected objects */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { /* if we're not handling the object we're copying from, copy all constraints over */ if (obact != ob) { copy_constraints(&ob->constraints, &obact->constraints, TRUE); @@ -1359,7 +1363,8 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if the active Object is Armature, and we can search for bones, do so... */ if ((obact->type == OB_ARMATURE) && (only_ob == 0)) { /* search in list of selected Pose-Channels for target */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { /* just use the first one that we encounter, as long as it is not the active one */ if (pchan != pchanact) { *tar_ob = obact; @@ -1375,7 +1380,8 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if not yet found, try selected Objects... */ if (found == 0) { /* search in selected objects context */ - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { /* just use the first object we encounter (that isn't the active object) * and which fulfills the criteria for the object-target that we've got */ @@ -1770,7 +1776,8 @@ static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob = object_pose_armature_get(CTX_data_active_object(C)); /* only remove IK Constraints */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + { bConstraint *con, *next; // TODO: should we be checking if these contraints were local before we try and remove them? diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index d5385d00c8a..c669bbfe3b2 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -181,7 +181,8 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op) short changed = 0; const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (!unselected) { if (base->flag & SELECT) { base->flag &= ~SELECT; @@ -237,7 +238,8 @@ static int object_hide_render_clear_exec(bContext *C, wmOperator *UNUSED(op)) short changed = 0; /* XXX need a context loop to handle such cases */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->restrictflag & OB_RESTRICT_RENDER) { ob->restrictflag &= ~OB_RESTRICT_RENDER; changed = 1; @@ -271,7 +273,8 @@ static int object_hide_render_set_exec(bContext *C, wmOperator *op) { const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (!unselected) { if (base->flag & SELECT) { base->object->restrictflag |= OB_RESTRICT_RENDER; @@ -1099,7 +1102,7 @@ void OBJECT_OT_forcefield_toggle(wmOperatorType *ot) /* ********************************************** */ /* Motion Paths */ -/* For the object with pose/action: update paths for those that have got them +/* For the objects with animation: update paths for those that have got them * This should selectively update paths that exist... * * To be called from various tools that do incremental updates @@ -1109,8 +1112,9 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) ListBase targets = {NULL, NULL}; /* loop over objects in scene */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - /* set flag to force recalc, then grab the relevant bones to target */ + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { + /* set flag to force recalc, then grab path(s) from object */ ob->avs.recalc |= ANIMVIZ_RECALC_PATHS; animviz_get_object_motionpaths(ob, &targets); } @@ -1121,27 +1125,53 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) BLI_freelistN(&targets); } -/* For the object with pose/action: create path curves for selected bones - * This recalculates the WHOLE path within the pchan->pathsf and pchan->pathef range - */ +/* show popup to determine settings */ +static int object_calculate_paths_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) +{ + Object *ob = CTX_data_active_object(C); + + if (ob == NULL) + return OPERATOR_CANCELLED; + + /* set default settings from existing/stored settings */ + { + bAnimVizSettings *avs = &ob->avs; + + RNA_int_set(op->ptr, "start_frame", avs->path_sf); + RNA_int_set(op->ptr, "end_frame", avs->path_ef); + } + + /* show popup dialog to allow editing of range... */ + // FIXME: hardcoded dimensions here are just arbitrary + return WM_operator_props_dialog_popup(C, op, 200, 200); +} + +/* Calculate/recalculate whole paths (avs.path_sf to avs.path_ef) */ static int object_calculate_paths_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); + int start = RNA_int_get(op->ptr, "start_frame"); + int end = RNA_int_get(op->ptr, "end_frame"); /* set up path data for bones being calculated */ CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - /* verify makes sure that the selected bone has a bone with the appropriate settings */ + bAnimVizSettings *avs = &ob->avs; + + /* grab baking settings from operator settings */ + avs->path_sf = start; + avs->path_ef = end; + + /* verify that the selected object has the appropriate settings */ animviz_verify_motionpaths(op->reports, scene, ob, NULL); } CTX_DATA_END; - /* calculate the bones that now have motionpaths... */ - // TODO: only make for the selected bones? + /* calculate the paths for objects that have them (and are tagged to get refreshed) */ ED_objects_recalculate_paths(C, scene); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -1151,19 +1181,26 @@ void OBJECT_OT_paths_calculate(wmOperatorType *ot) /* identifiers */ ot->name = "Calculate Object Paths"; ot->idname = "OBJECT_OT_paths_calculate"; - ot->description = "Calculate paths for the selected bones"; + ot->description = "Calculate motion paths for the selected objects"; /* api callbacks */ + ot->invoke = object_calculate_paths_invoke; ot->exec = object_calculate_paths_exec; ot->poll = ED_operator_object_active_editable; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_int(ot->srna, "start_frame", 1, MINAFRAME, MAXFRAME, "Start", + "First frame to calculate object paths on", MINFRAME, MAXFRAME/2.0); + RNA_def_int(ot->srna, "end_frame", 250, MINAFRAME, MAXFRAME, "End", + "Last frame to calculate object paths on", MINFRAME, MAXFRAME/2.0); } /* --------- */ -/* for the object with pose/action: clear path curves for selected bones only */ +/* Clear motion paths for selected objects only */ void ED_objects_clear_paths(bContext *C) { /* loop over objects in scene */ @@ -1185,7 +1222,7 @@ static int object_clear_paths_exec(bContext *C, wmOperator *UNUSED(op)) ED_objects_clear_paths(C); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -1195,7 +1232,7 @@ void OBJECT_OT_paths_clear(wmOperatorType *ot) /* identifiers */ ot->name = "Clear Object Paths"; ot->idname = "OBJECT_OT_paths_clear"; - ot->description = "Clear path caches for selected bones"; + ot->description = "Clear path caches for selected objects"; /* api callbacks */ ot->exec = object_clear_paths_exec; @@ -1215,7 +1252,8 @@ static int shade_smooth_exec(bContext *C, wmOperator *op) int clear = (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); int done = 0; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->type == OB_MESH) { mesh_set_smooth_flag(ob, !clear); @@ -1632,7 +1670,8 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) prop = BLI_findlink(&ob->prop, propid - 1); if (prop) { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { if (ob != ob_iter) set_ob_property(ob_iter, prop); } CTX_DATA_END; @@ -1640,7 +1679,8 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) } else { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { if (ob != ob_iter) { if (type == COPY_PROPERTIES_REPLACE) copy_properties(&ob_iter->prop, &ob->prop); @@ -1679,7 +1719,8 @@ void OBJECT_OT_game_property_copy(wmOperatorType *ot) static int game_property_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { free_properties(&ob_iter->prop); } CTX_DATA_END; @@ -1707,7 +1748,8 @@ static int logicbricks_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { if (ob != ob_iter) { /* first: free all logic */ free_sensors(&ob_iter->sensors); @@ -1763,7 +1805,8 @@ static int game_physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { if (ob != ob_iter) { ob_iter->gameflag = ob->gameflag; ob_iter->gameflag2 = ob->gameflag2; diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c index 702671d8d9b..dd6c08a2247 100644 --- a/source/blender/editors/object/object_group.c +++ b/source/blender/editors/object/object_group.c @@ -75,7 +75,8 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) for (group = bmain->group.first; group; group = group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { if (base->object->dup_group != group) add_to_group(group, base->object, scene, base); else @@ -127,7 +128,8 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op) for (group = bmain->group.first; group; group = group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { rem_from_group(group, base->object, scene, base); ok = 1; } @@ -164,7 +166,8 @@ static int group_objects_remove_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene = CTX_data_scene(C); Group *group = NULL; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { group = NULL; while ((group = find_group(base->object, group))) rem_from_group(group, base->object, scene, base); @@ -203,7 +206,8 @@ static int group_create_exec(bContext *C, wmOperator *op) group = add_group(name); - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + { add_to_group(group, base->object, scene, base); } CTX_DATA_END; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 4ffc3e8c19f..2cfefa61a18 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -313,6 +313,9 @@ static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int * em = me->edit_btmesh; + EDBM_mesh_normals_update(em); + BMEdit_RecalcTessellation(em); + /* check selected vertices first */ if (return_editmesh_indexar(em, tot, indexar, cent_r)) { return 1; @@ -483,7 +486,8 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op) Object *obedit = CTX_data_edit_object(C); Object *obsel = NULL; - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { if (ob != obedit) { obsel = ob; break; diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index f2d682cd0cb..281ca7e59b6 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -1119,7 +1119,8 @@ static int multires_reshape_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object *, selob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, selob, selected_editable_objects) + { if (selob->type == OB_MESH && selob != ob) { secondob = selob; break; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 077ae2830a9..4678416e1c9 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -211,7 +211,8 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob != obedit) { ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; par = obedit->parent; @@ -428,7 +429,8 @@ void ED_object_parent_clear(bContext *C, int type) Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->parent == NULL) continue; @@ -673,7 +675,8 @@ static int parent_set_exec(bContext *C, wmOperator *op) int partype = RNA_enum_get(op->ptr, "type"); int ok = 1; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (!ED_object_parent_set(op->reports, bmain, scene, ob, par, partype)) { ok = 0; break; @@ -754,7 +757,8 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op) par->recalc |= OB_RECALC_OB; /* context iterator */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob != par) { if (BKE_object_parent_loop_check(par, ob)) { BKE_report(op->reports, RPT_ERROR, "Loop in parents"); @@ -805,7 +809,8 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op)) Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->parent) { if (ob->partype & PARSLOW) { ob->partype -= PARSLOW; @@ -847,7 +852,8 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->parent) ob->partype |= PARSLOW; @@ -898,7 +904,8 @@ static int object_track_clear_exec(bContext *C, wmOperator *op) BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed in EditMode"); return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { bConstraint *con, *pcon; /* remove track-object for old track */ @@ -964,7 +971,8 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bDampTrackConstraint *data; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_DAMPTRACK); @@ -983,7 +991,8 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bTrackToConstraint *data; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); @@ -1004,7 +1013,8 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bLockTrackConstraint *data; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_LOCKTRACK); @@ -1058,7 +1068,8 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op) if (!RNA_struct_property_is_set(op->ptr, "layers")) { /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) + { lay |= base->lay; } CTX_DATA_END; @@ -1107,7 +1118,8 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) if (v3d && v3d->localvd) { /* now we can move out of localview. */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) + { lay = base->lay & ~v3d->lay; base->lay = lay; base->object->lay = lay; @@ -1120,7 +1132,8 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) else { /* normal non localview operation */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) + { /* upper byte is used for local view */ local = base->lay & 0xFF000000; base->lay = lay + local; @@ -1202,7 +1215,8 @@ static int make_links_scene_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) + { if (!object_in_scene(base->object, scene_to)) { Base *nbase = MEM_mallocN(sizeof(Base), "newbase"); *nbase = *base; @@ -1262,7 +1276,8 @@ static int make_links_data_exec(bContext *C, wmOperator *op) ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object *, obt, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, obt, selected_editable_objects) + { if (ob != obt) { if (allow_make_links_data(event, ob, obt)) { switch (event) { @@ -1471,7 +1486,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag) } break; case OB_CAMERA: - ob->data = copy_camera(ob->data); + ob->data = BKE_camera_copy(ob->data); break; case OB_MESH: ob->data = copy_mesh(ob->data); @@ -1611,7 +1626,7 @@ static void single_tex_users_expand(Main *bmain) if (ma->id.flag & LIB_NEW) { for (b = 0; b < MAX_MTEX; b++) { if (ma->mtex[b] && ma->mtex[b]->tex) { - do_single_tex_user(&(ma->mtex[b]->tex) ); + do_single_tex_user(&(ma->mtex[b]->tex)); } } } @@ -1621,7 +1636,7 @@ static void single_tex_users_expand(Main *bmain) if (la->id.flag & LIB_NEW) { for (b = 0; b < MAX_MTEX; b++) { if (la->mtex[b] && la->mtex[b]->tex) { - do_single_tex_user(&(la->mtex[b]->tex) ); + do_single_tex_user(&(la->mtex[b]->tex)); } } } @@ -1631,7 +1646,7 @@ static void single_tex_users_expand(Main *bmain) if (wo->id.flag & LIB_NEW) { for (b = 0; b < MAX_MTEX; b++) { if (wo->mtex[b] && wo->mtex[b]->tex) { - do_single_tex_user(&(wo->mtex[b]->tex) ); + do_single_tex_user(&(wo->mtex[b]->tex)); } } } @@ -1725,21 +1740,24 @@ static int make_local_exec(bContext *C, wmOperator *op) clear_id_newpoins(); - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { if (ob->id.lib) id_make_local(&ob->id, 0); } CTX_DATA_END; /* maybe object pointers */ - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { if (ob->id.lib == NULL) { ID_NEW(ob->parent); } } CTX_DATA_END; - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { id = ob->data; if (id && mode > 1) { @@ -1767,7 +1785,8 @@ static int make_local_exec(bContext *C, wmOperator *op) CTX_DATA_END; if (mode > 1) { - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { if (ob->type == OB_LAMP) { la = ob->data; diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 7a4db175ee4..ed53e4a9b91 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -144,13 +144,15 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (base->object->type == obtype) { ED_base_object_select(base, BA_SELECT); } @@ -218,7 +220,8 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; @@ -263,7 +266,8 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) else return OPERATOR_CANCELLED; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (nr == 1) { // XXX old animation system //if (base->object->ipo==ipo) base->flag |= SELECT; @@ -386,7 +390,8 @@ static short select_grouped_children(bContext *C, Object *ob, int recursive) { short changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if (ob == base->object->parent) { if (!(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); @@ -444,7 +449,8 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in return 0; else if (group_count == 1) { group = ob_groups[0]; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (!(base->flag & SELECT) && object_in_group(base->object, group)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -498,7 +504,8 @@ static short select_grouped_siblings(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if ((base->object->parent == ob->parent) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -512,7 +519,8 @@ static short select_grouped_type(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if ((base->object->type == ob->type) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -526,7 +534,8 @@ static short select_grouped_layer(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if ((base->lay & ob->lay) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -540,7 +549,8 @@ static short select_grouped_index_object(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if ((base->object->index == ob->index) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -554,7 +564,8 @@ static short select_grouped_color(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if (!(base->flag & SELECT) && (compare_v3v3(base->object->col, ob->col, 0.005f))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -580,7 +591,8 @@ static short select_grouped_gameprops(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if (!(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -602,7 +614,8 @@ static short select_grouped_keyingset(bContext *C, Object *UNUSED(ob)) /* select each object that Keying Set refers to */ // TODO: perhaps to be more in line with the rest of these, we should only take objects // if the passed in object is included in this too - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { /* only check for this object if it isn't selected already, to limit time wasted */ if ((base->flag & SELECT) == 0) { KS_Path *ksp; @@ -635,7 +648,8 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { ED_base_object_select(base, BA_DESELECT); changed = 1; } @@ -700,13 +714,15 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op) layernum = RNA_int_get(op->ptr, "layers"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (base->lay == (1 << (layernum - 1))) ED_base_object_select(base, BA_SELECT); } @@ -749,7 +765,8 @@ static int object_select_all_exec(bContext *C, wmOperator *op) if (action == SEL_TOGGLE) { action = SEL_SELECT; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (base->flag & SELECT) { action = SEL_DESELECT; break; @@ -758,7 +775,8 @@ static int object_select_all_exec(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { switch (action) { case SEL_SELECT: ED_base_object_select(base, BA_SELECT); @@ -821,7 +839,8 @@ static int object_select_same_group_exec(bContext *C, wmOperator *op) if (!group) return OPERATOR_PASS_THROUGH; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (!(base->flag & SELECT) && object_in_group(base->object, group)) ED_base_object_select(base, BA_SELECT); } @@ -858,7 +877,8 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); - CTX_DATA_BEGIN (C, Base *, primbase, selected_bases) { + CTX_DATA_BEGIN (C, Base *, primbase, selected_bases) + { char tmpname[MAXBONENAME]; flip_side_name(tmpname, primbase->object->id.name + 2, TRUE); @@ -914,14 +934,16 @@ static int object_select_random_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } percent = RNA_float_get(op->ptr, "percent") / 100.0f; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) + { if (BLI_frand() < percent) { ED_base_object_select(base, BA_SELECT); } diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index e416bd5b762..b8a7ce999f1 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -227,7 +227,8 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, /* operate on selected objects only if they aren't in weight-paint mode * (so that object-transform clearing won't be applied at same time as bone-clearing) */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (!(ob->mode & OB_MODE_WEIGHT_PAINT)) { /* run provided clearing function */ clear_func(ob); @@ -319,7 +320,8 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op)) float *v1, *v3; float mat[3][3]; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->parent) { /* vectors pointed to by v1 and v3 will get modified */ v1 = ob->loc; @@ -383,7 +385,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo int a, change = 0; /* first check if we can execute */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->type == OB_MESH) { if (ID_REAL_USERS(ob->data) > 1) { @@ -426,7 +429,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo CTX_DATA_END; /* now execute */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { /* calculate rotation/scale matrix */ if (apply_scale && apply_rot) @@ -567,7 +571,8 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene = CTX_data_scene(C); int change = 0; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { where_is_object(scene, ob); object_apply_mat4(ob, ob->obmat, TRUE, TRUE); where_is_object(scene, ob); @@ -709,7 +714,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } /* reset flags */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { ob->flag &= ~OB_DONE; } CTX_DATA_END; @@ -721,7 +727,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) ((ID *)tob->dup_group)->flag &= ~LIB_DOIT; } - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if ((ob->flag & OB_DONE) == 0) { int do_inverse_offset = FALSE; ob->flag |= OB_DONE; @@ -894,7 +901,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) ignore_parent_tx(bmain, scene, ob); /* other users? */ - CTX_DATA_BEGIN (C, Object *, ob_other, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_other, selected_editable_objects) + { if ((ob_other->flag & OB_DONE) == 0 && ((ob->data && (ob->data == ob_other->data)) || (ob->dup_group == ob_other->dup_group && diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 6d5e098770a..acafe62150f 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -1257,7 +1257,7 @@ static void vgroup_blend(Object *ob, const float fac) int i, dvert_tot = 0; const int def_nr = ob->actdef - 1; - BLI_assert(fac >= 0.0 && fac <= 1.0f); + BLI_assert(fac >= 0.0f && fac <= 1.0f); if (ob->type != OB_MESH) { return; @@ -2102,7 +2102,7 @@ static int vertex_group_poll_edit_or_wpaint_vert_select(bContext *C) return 0; return (vgroup_object_in_edit_mode(ob) || - vgroup_object_in_wpaint_vert_select(ob) ); + vgroup_object_in_wpaint_vert_select(ob)); } static int vertex_group_add_exec(bContext *C, wmOperator *UNUSED(op)) @@ -2713,7 +2713,8 @@ static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op) int change = 0; int fail = 0; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (obact != ob) { if (ED_vgroup_copy_array(ob, obact)) change++; else fail++; diff --git a/source/blender/editors/physics/particle_boids.c b/source/blender/editors/physics/particle_boids.c index 7a7c16b23ff..23ce4776b73 100644 --- a/source/blender/editors/physics/particle_boids.c +++ b/source/blender/editors/physics/particle_boids.c @@ -145,6 +145,7 @@ void BOID_OT_rule_del(wmOperatorType *ot) /* identifiers */ ot->name = "Remove Boid Rule"; ot->idname = "BOID_OT_rule_del"; + ot->description = "Delete current boid rule"; /* api callbacks */ ot->exec = rule_del_exec; @@ -318,6 +319,7 @@ void BOID_OT_state_del(wmOperatorType *ot) /* identifiers */ ot->name = "Remove Boid State"; ot->idname = "BOID_OT_state_del"; + ot->description = "Delete current boid state"; /* api callbacks */ ot->exec = state_del_exec; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 131034848de..7fb5352979d 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -403,7 +403,7 @@ static int key_test_depth(PEData *data, const float co[3]) View3D *v3d= data->vc.v3d; double ux, uy, uz; float depth; - short wco[3], x,y; + short wco[3], x, y; /* nothing to do */ if ((v3d->drawtype<=OB_WIRE) || (v3d->flag & V3D_ZBUF_SELECT)==0) @@ -414,7 +414,7 @@ static int key_test_depth(PEData *data, const float co[3]) if (wco[0] == IS_CLIPPED) return 0; - gluProject(co[0],co[1],co[2], data->mats.modelview, data->mats.projection, + gluProject(co[0], co[1], co[2], data->mats.modelview, data->mats.projection, (GLint *)data->mats.viewport, &ux, &uy, &uz); x=wco[0]; @@ -473,7 +473,7 @@ static int key_inside_rect(PEData *data, const float co[3]) { int sco[2]; - project_int(data->vc.ar, co,sco); + project_int(data->vc.ar, co, sco); if (sco[0] == IS_CLIPPED) return 0; @@ -622,7 +622,7 @@ static void foreach_mouse_hit_key(PEData *data, ForKeyMatFunc func, int selected if (key_inside_circle(data, data->rad, KEY_WCO, &data->dist)) { if (edit->psys && !(edit->psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(data->ob, psmd->dm, psys->part->from, psys->particles + p, mat); - invert_m4_m4(imat,mat); + invert_m4_m4(imat, mat); } func(data, mat, imat, p, point->totkey-1, key); @@ -636,7 +636,7 @@ static void foreach_mouse_hit_key(PEData *data, ForKeyMatFunc func, int selected if (key_inside_circle(data, data->rad, KEY_WCO, &data->dist)) { if (edit->psys && !(edit->psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(data->ob, psmd->dm, psys->part->from, psys->particles + p, mat); - invert_m4_m4(imat,mat); + invert_m4_m4(imat, mat); } func(data, mat, imat, p, k, key); @@ -902,7 +902,7 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) return; psys = edit->psys; - psmd = psys_get_modifier(ob,psys); + psmd = psys_get_modifier(ob, psys); if (!psmd->dm) return; @@ -920,26 +920,26 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) dist_1st *= 0.75f * pset->emitterdist; } else { - index= BLI_kdtree_find_nearest(edit->emitter_field,key->co,NULL,NULL); + index= BLI_kdtree_find_nearest(edit->emitter_field, key->co, NULL, NULL); vec=edit->emitter_cosnos +index*6; nor=vec+3; sub_v3_v3v3(dvec, key->co, vec); - dot=dot_v3v3(dvec,nor); - copy_v3_v3(dvec,nor); + dot=dot_v3v3(dvec, nor); + copy_v3_v3(dvec, nor); if (dot>0.0f) { if (dot<dist_1st) { normalize_v3(dvec); - mul_v3_fl(dvec,dist_1st-dot); + mul_v3_fl(dvec, dist_1st-dot); add_v3_v3(key->co, dvec); } } else { normalize_v3(dvec); - mul_v3_fl(dvec,dist_1st-dot); + mul_v3_fl(dvec, dist_1st-dot); add_v3_v3(key->co, dvec); } if (k==1) @@ -947,7 +947,7 @@ static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) } } - invert_m4_m4(hairimat,hairmat); + invert_m4_m4(hairimat, hairmat); LOOP_KEYS { mul_m4_v3(hairimat, key->co); @@ -1053,7 +1053,7 @@ static void recalc_lengths(PTCacheEdit *edit) /* calculate a tree for finding nearest emitter's vertice */ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) { - DerivedMesh *dm=psys_get_modifier(ob,psys)->dm; + DerivedMesh *dm=psys_get_modifier(ob, psys)->dm; PTCacheEdit *edit= psys->edit; float *vec, *nor; int i, totface /*, totvert*/; @@ -1069,7 +1069,7 @@ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) totface=dm->getNumTessFaces(dm); /*totvert=dm->getNumVerts(dm);*/ /*UNSUED*/ - edit->emitter_cosnos=MEM_callocN(totface*6*sizeof(float),"emitter cosnos"); + edit->emitter_cosnos=MEM_callocN(totface*6*sizeof(float), "emitter cosnos"); edit->emitter_field= BLI_kdtree_new(totface); @@ -1077,30 +1077,30 @@ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) nor=vec+3; for (i=0; i<totface; i++, vec+=6, nor+=6) { - MFace *mface=dm->getTessFaceData(dm,i,CD_MFACE); + MFace *mface=dm->getTessFaceData(dm, i, CD_MFACE); MVert *mvert; - mvert=dm->getVertData(dm,mface->v1,CD_MVERT); - copy_v3_v3(vec,mvert->co); - VECCOPY(nor,mvert->no); + mvert=dm->getVertData(dm, mface->v1, CD_MVERT); + copy_v3_v3(vec, mvert->co); + VECCOPY(nor, mvert->no); - mvert=dm->getVertData(dm,mface->v2,CD_MVERT); - add_v3_v3v3(vec,vec,mvert->co); - VECADD(nor,nor,mvert->no); + mvert=dm->getVertData(dm, mface->v2, CD_MVERT); + add_v3_v3v3(vec, vec, mvert->co); + VECADD(nor, nor, mvert->no); - mvert=dm->getVertData(dm,mface->v3,CD_MVERT); - add_v3_v3v3(vec,vec,mvert->co); - VECADD(nor,nor,mvert->no); + mvert=dm->getVertData(dm, mface->v3, CD_MVERT); + add_v3_v3v3(vec, vec, mvert->co); + VECADD(nor, nor, mvert->no); if (mface->v4) { - mvert=dm->getVertData(dm,mface->v4,CD_MVERT); - add_v3_v3v3(vec,vec,mvert->co); - VECADD(nor,nor,mvert->no); + mvert=dm->getVertData(dm, mface->v4, CD_MVERT); + add_v3_v3v3(vec, vec, mvert->co); + VECADD(nor, nor, mvert->no); - mul_v3_fl(vec,0.25); + mul_v3_fl(vec, 0.25); } else - mul_v3_fl(vec,0.3333f); + mul_v3_fl(vec, 0.3333f); normalize_v3(nor); @@ -1154,7 +1154,7 @@ static void update_world_cos(Object *ob, PTCacheEdit *edit) psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, psys->particles+p, hairmat); LOOP_KEYS { - copy_v3_v3(key->world_co,key->co); + copy_v3_v3(key->world_co, key->co); if (!(psys->flag & PSYS_GLOBAL_HAIR)) mul_m4_v3(hairmat, key->world_co); } @@ -1239,7 +1239,7 @@ void PE_update_object(Scene *scene, Object *ob, int useflag) pe_deflect_emitter(scene, ob, edit); PE_apply_lengths(scene, edit); if (pe_x_mirror(ob)) - PE_apply_mirror(ob,edit->psys); + PE_apply_mirror(ob, edit->psys); if (edit->psys) update_world_cos(ob, edit); if (pset->flag & PE_AUTO_VELOCITY) @@ -1637,7 +1637,7 @@ int PE_lasso_select(bContext *C, int mcords[][2], short moves, short extend, sho copy_v3_v3(co, key->co); mul_m4_v3(mat, co); project_int(ar, co, vertco); - if (BLI_lasso_is_point_inside(mcords,moves,vertco[0],vertco[1], IS_CLIPPED) && + if (BLI_lasso_is_point_inside(mcords, moves, vertco[0], vertco[1], IS_CLIPPED) && key_test_depth(&data, co)) { if (select && !(key->flag & PEK_SELECT)) { @@ -1656,8 +1656,8 @@ int PE_lasso_select(bContext *C, int mcords[][2], short moves, short extend, sho copy_v3_v3(co, key->co); mul_m4_v3(mat, co); - project_int(ar, co,vertco); - if (BLI_lasso_is_point_inside(mcords,moves,vertco[0],vertco[1], IS_CLIPPED) && + project_int(ar, co, vertco); + if (BLI_lasso_is_point_inside(mcords, moves, vertco[0], vertco[1], IS_CLIPPED) && key_test_depth(&data, co)) { if (select && !(key->flag & PEK_SELECT)) { @@ -1908,7 +1908,7 @@ static void rekey_particle(PEData *data, int pa_index) pa->flag |= PARS_REKEY; - key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey),"Hair re-key keys"); + key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey), "Hair re-key keys"); okey = pa->hair; /* root and tip stay the same */ @@ -1920,7 +1920,7 @@ static void rekey_particle(PEData *data, int pa_index) dval= (end - sta) / (float)(data->totrekey - 1); /* interpolate new keys from old ones */ - for (k=1,key++; k<data->totrekey-1; k++,key++) { + for (k=1, key++; k<data->totrekey-1; k++, key++) { state.time= (float)k / (float)(data->totrekey-1); psys_get_particle_on_path(&sim, pa_index, &state, 0); copy_v3_v3(key->co, state.co); @@ -1937,7 +1937,7 @@ static void rekey_particle(PEData *data, int pa_index) if (point->keys) MEM_freeN(point->keys); - ekey= point->keys= MEM_callocN(pa->totkey * sizeof(PTCacheEditKey),"Hair re-key edit keys"); + ekey= point->keys= MEM_callocN(pa->totkey * sizeof(PTCacheEditKey), "Hair re-key edit keys"); for (k=0, key=pa->hair; k<pa->totkey; k++, key++, ekey++) { ekey->co= key->co; @@ -2223,7 +2223,7 @@ static void subdivide_particle(PEData *data, int pa_index) sim.ob= data->ob; sim.psys= edit->psys; - for (k=0, ekey=point->keys; k<pa->totkey-1; k++,ekey++) { + for (k=0, ekey=point->keys; k<pa->totkey-1; k++, ekey++) { if (ekey->flag&PEK_SELECT && (ekey+1)->flag&PEK_SELECT) totnewkey++; } @@ -2232,16 +2232,16 @@ static void subdivide_particle(PEData *data, int pa_index) pa->flag |= PARS_REKEY; - nkey= new_keys= MEM_callocN((pa->totkey+totnewkey)*(sizeof(HairKey)),"Hair subdivide keys"); - nekey= new_ekeys= MEM_callocN((pa->totkey+totnewkey)*(sizeof(PTCacheEditKey)),"Hair subdivide edit keys"); + nkey= new_keys= MEM_callocN((pa->totkey+totnewkey)*(sizeof(HairKey)), "Hair subdivide keys"); + nekey= new_ekeys= MEM_callocN((pa->totkey+totnewkey)*(sizeof(PTCacheEditKey)), "Hair subdivide edit keys"); key = pa->hair; endtime= key[pa->totkey-1].time; for (k=0, ekey=point->keys; k<pa->totkey-1; k++, key++, ekey++) { - memcpy(nkey,key,sizeof(HairKey)); - memcpy(nekey,ekey,sizeof(PTCacheEditKey)); + memcpy(nkey, key, sizeof(HairKey)); + memcpy(nekey, ekey, sizeof(PTCacheEditKey)); nekey->co= nkey->co; nekey->time= &nkey->time; @@ -2266,8 +2266,8 @@ static void subdivide_particle(PEData *data, int pa_index) } } /*tip still not copied*/ - memcpy(nkey,key,sizeof(HairKey)); - memcpy(nekey,ekey,sizeof(PTCacheEditKey)); + memcpy(nkey, key, sizeof(HairKey)); + memcpy(nekey, ekey, sizeof(PTCacheEditKey)); nekey->co= nkey->co; nekey->time= &nkey->time; @@ -2356,7 +2356,7 @@ static int remove_doubles_exec(bContext *C, wmOperator *op) copy_v3_v3(co, point->keys->co); mul_m4_v3(mat, co); - totn= BLI_kdtree_find_n_nearest(tree,10,co,NULL,nearest); + totn= BLI_kdtree_find_n_nearest(tree, 10, co, NULL, nearest); for (n=0; n<totn; n++) { /* this needs a custom threshold still */ @@ -2471,11 +2471,11 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata) glTranslatef((float)x, (float)y, 0.0f); glColor4ub(255, 255, 255, 128); - glEnable(GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glutil_draw_lined_arc(0.0, M_PI*2.0, brush->size, 40); glDisable(GL_BLEND); - glDisable(GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glPopMatrix(); } @@ -2666,7 +2666,7 @@ static void PE_mirror_x(Scene *scene, Object *ob, int tagged) /* assign face inddex */ newpa->num= mirrorfaces[pa->num*2]; - newpa->num_dmcache= psys_particle_dm_face_lookup(ob,psmd->dm,newpa->num,newpa->fuv, NULL); + newpa->num_dmcache= psys_particle_dm_face_lookup(ob, psmd->dm, newpa->num, newpa->fuv, NULL); /* update edit key pointers */ key= newpoint->keys; @@ -2730,8 +2730,8 @@ static void brush_comb(PEData *data, float UNUSED(mat[][4]), float imat[][4], in fac= (float)pow((double)(1.0f - data->dist / data->rad), (double)data->combfac); - copy_v3_v3(cvec,data->dvec); - mul_mat3_m4_v3(imat,cvec); + copy_v3_v3(cvec, data->dvec); + mul_mat3_m4_v3(imat, cvec); mul_v3_fl(cvec, fac); add_v3_v3(key->co, cvec); @@ -2840,17 +2840,17 @@ static void brush_length(PEData *data, int point_index) PTCacheEdit *edit= data->edit; PTCacheEditPoint *point = edit->points + point_index; KEY_K; - float dvec[3],pvec[3] = {0.0f, 0.0f, 0.0f}; + float dvec[3], pvec[3] = {0.0f, 0.0f, 0.0f}; LOOP_KEYS { if (k==0) { - copy_v3_v3(pvec,key->co); + copy_v3_v3(pvec, key->co); } else { - sub_v3_v3v3(dvec,key->co,pvec); - copy_v3_v3(pvec,key->co); - mul_v3_fl(dvec,data->growfac); - add_v3_v3v3(key->co,(key-1)->co,dvec); + sub_v3_v3v3(dvec, key->co, pvec); + copy_v3_v3(pvec, key->co); + mul_v3_fl(dvec, data->growfac); + add_v3_v3v3(key->co, (key-1)->co, dvec); } } @@ -2877,7 +2877,7 @@ static void brush_puff(PEData *data, int point_index) if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(data->ob, data->dm, psys->part->from, psys->particles + point_index, mat); - invert_m4_m4(imat,mat); + invert_m4_m4(imat, mat); } else { unit_m4(mat); @@ -2990,7 +2990,7 @@ static void brush_puff(PEData *data, int point_index) } -static void brush_weight(PEData *data, float UNUSED(mat[][4]), float UNUSED(imat[][4]), int point_index, int key_index, PTCacheEditKey *UNUSED(key)) +static void BKE_brush_weight_get(PEData *data, float UNUSED(mat[][4]), float UNUSED(imat[][4]), int point_index, int key_index, PTCacheEditKey *UNUSED(key)) { /* roots have full weight allways */ if (key_index) { @@ -3009,8 +3009,8 @@ static void brush_smooth_get(PEData *data, float mat[][4], float UNUSED(imat[][4 if (key_index) { float dvec[3]; - sub_v3_v3v3(dvec,key->co,(key-1)->co); - mul_mat3_m4_v3(mat,dvec); + sub_v3_v3v3(dvec, key->co, (key-1)->co); + mul_mat3_m4_v3(mat, dvec); add_v3_v3(data->vec, dvec); data->tot++; } @@ -3022,12 +3022,12 @@ static void brush_smooth_do(PEData *data, float UNUSED(mat[][4]), float imat[][4 if (key_index) { copy_v3_v3(vec, data->vec); - mul_mat3_m4_v3(imat,vec); + mul_mat3_m4_v3(imat, vec); - sub_v3_v3v3(dvec,key->co,(key-1)->co); + sub_v3_v3v3(dvec, key->co, (key-1)->co); - sub_v3_v3v3(dvec,vec,dvec); - mul_v3_fl(dvec,data->smoothfac); + sub_v3_v3v3(dvec, vec, dvec); + mul_v3_fl(dvec, data->smoothfac); add_v3_v3(key->co, dvec); } @@ -3063,7 +3063,7 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, MFace *mface= NULL; MVert *mvert= NULL; int i, totface, intersect=0; - float cur_d, cur_uv[2], v1[3], v2[3], v3[3], v4[3], min[3], max[3], p_min[3],p_max[3]; + float cur_d, cur_uv[2], v1[3], v2[3], v3[3], v4[3], min[3], max[3], p_min[3], p_max[3]; float cur_ipoint[3]; if (dm == NULL) { @@ -3084,50 +3084,50 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, if (pa_minmax==0) { - INIT_MINMAX(p_min,p_max); - DO_MINMAX(co1,p_min,p_max); - DO_MINMAX(co2,p_min,p_max); + INIT_MINMAX(p_min, p_max); + DO_MINMAX(co1, p_min, p_max); + DO_MINMAX(co2, p_min, p_max); } else { - copy_v3_v3(p_min,pa_minmax); - copy_v3_v3(p_max,pa_minmax+3); + copy_v3_v3(p_min, pa_minmax); + copy_v3_v3(p_max, pa_minmax+3); } totface=dm->getNumTessFaces(dm); - mface=dm->getTessFaceDataArray(dm,CD_MFACE); - mvert=dm->getVertDataArray(dm,CD_MVERT); + mface=dm->getTessFaceDataArray(dm, CD_MFACE); + mvert=dm->getVertDataArray(dm, CD_MVERT); /* lets intersect the faces */ - for (i=0; i<totface; i++,mface++) { + for (i=0; i<totface; i++, mface++) { if (vert_cos) { - copy_v3_v3(v1,vert_cos+3*mface->v1); - copy_v3_v3(v2,vert_cos+3*mface->v2); - copy_v3_v3(v3,vert_cos+3*mface->v3); + copy_v3_v3(v1, vert_cos+3*mface->v1); + copy_v3_v3(v2, vert_cos+3*mface->v2); + copy_v3_v3(v3, vert_cos+3*mface->v3); if (mface->v4) - copy_v3_v3(v4,vert_cos+3*mface->v4); + copy_v3_v3(v4, vert_cos+3*mface->v4); } else { - copy_v3_v3(v1,mvert[mface->v1].co); - copy_v3_v3(v2,mvert[mface->v2].co); - copy_v3_v3(v3,mvert[mface->v3].co); + copy_v3_v3(v1, mvert[mface->v1].co); + copy_v3_v3(v2, mvert[mface->v2].co); + copy_v3_v3(v3, mvert[mface->v3].co); if (mface->v4) - copy_v3_v3(v4,mvert[mface->v4].co); + copy_v3_v3(v4, mvert[mface->v4].co); } if (face_minmax==0) { - INIT_MINMAX(min,max); - DO_MINMAX(v1,min,max); - DO_MINMAX(v2,min,max); - DO_MINMAX(v3,min,max); + INIT_MINMAX(min, max); + DO_MINMAX(v1, min, max); + DO_MINMAX(v2, min, max); + DO_MINMAX(v3, min, max); if (mface->v4) DO_MINMAX(v4, min, max); - if (isect_aabb_aabb_v3(min,max,p_min,p_max)==0) + if (isect_aabb_aabb_v3(min, max, p_min, p_max)==0) continue; } else { copy_v3_v3(min, face_minmax+6*i); copy_v3_v3(max, face_minmax+6*i+3); - if (isect_aabb_aabb_v3(min,max,p_min,p_max)==0) + if (isect_aabb_aabb_v3(min, max, p_min, p_max)==0) continue; } @@ -3135,7 +3135,7 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, if (isect_sweeping_sphere_tri_v3(co1, co2, radius, v2, v3, v1, &cur_d, cur_ipoint)) { if (cur_d<*min_d) { *min_d=cur_d; - copy_v3_v3(ipoint,cur_ipoint); + copy_v3_v3(ipoint, cur_ipoint); *min_face=i; intersect=1; } @@ -3144,7 +3144,7 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, if (isect_sweeping_sphere_tri_v3(co1, co2, radius, v4, v1, v3, &cur_d, cur_ipoint)) { if (cur_d<*min_d) { *min_d=cur_d; - copy_v3_v3(ipoint,cur_ipoint); + copy_v3_v3(ipoint, cur_ipoint); *min_face=i; intersect=1; } @@ -3190,8 +3190,8 @@ static int brush_add(PEData *data, short number) Object *ob= data->ob; PTCacheEdit *edit = data->edit; ParticleSystem *psys= edit->psys; - ParticleData *add_pars= MEM_callocN(number*sizeof(ParticleData),"ParticleData add"); - ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys); + ParticleData *add_pars= MEM_callocN(number*sizeof(ParticleData), "ParticleData add"); + ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys); ParticleSimulationData sim= {0}; ParticleEditSettings *pset= PE_settings(scene); int i, k, n= 0, totpart= psys->totpart; @@ -3202,7 +3202,7 @@ static int brush_add(PEData *data, short number) short size= pset->brush[PE_BRUSH_ADD].size; short size2= size*size; DerivedMesh *dm=0; - invert_m4_m4(imat,ob->obmat); + invert_m4_m4(imat, ob->obmat); if (psys->flag & PSYS_GLOBAL_HAIR) return 0; @@ -3235,13 +3235,13 @@ static int brush_add(PEData *data, short number) mco[1]= data->mval[1] + dmy; ED_view3d_win_to_segment_clip(data->vc.ar, data->vc.v3d, mco, co1, co2); - mul_m4_v3(imat,co1); - mul_m4_v3(imat,co2); + mul_m4_v3(imat, co1); + mul_m4_v3(imat, co2); min_d=2.0; /* warning, returns the derived mesh face */ - if (particle_intersect_dm(scene, ob,dm,0,co1,co2,&min_d,&add_pars[n].num,add_pars[n].fuv,0,0,0,0)) { - add_pars[n].num_dmcache= psys_particle_dm_face_lookup(ob,psmd->dm,add_pars[n].num,add_pars[n].fuv,NULL); + if (particle_intersect_dm(scene, ob, dm, 0, co1, co2, &min_d, &add_pars[n].num, add_pars[n].fuv, 0, 0, 0, 0)) { + add_pars[n].num_dmcache= psys_particle_dm_face_lookup(ob, psmd->dm, add_pars[n].num, add_pars[n].fuv, NULL); n++; } } @@ -3249,8 +3249,8 @@ static int brush_add(PEData *data, short number) int newtotpart=totpart+n; float hairmat[4][4], cur_co[3]; KDTree *tree=0; - ParticleData *pa, *new_pars= MEM_callocN(newtotpart*sizeof(ParticleData),"ParticleData new"); - PTCacheEditPoint *point, *new_points= MEM_callocN(newtotpart*sizeof(PTCacheEditPoint),"PTCacheEditPoint array new"); + ParticleData *pa, *new_pars= MEM_callocN(newtotpart*sizeof(ParticleData), "ParticleData new"); + PTCacheEditPoint *point, *new_points= MEM_callocN(newtotpart*sizeof(PTCacheEditPoint), "PTCacheEditPoint array new"); PTCacheEditKey *key; HairKey *hkey; @@ -3275,7 +3275,7 @@ static int brush_add(PEData *data, short number) tree=BLI_kdtree_new(psys->totpart); for (i=0, pa=psys->particles; i<totpart; i++, pa++) { - psys_particle_on_dm(psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,cur_co,0,0,0,0,0); + psys_particle_on_dm(psmd->dm, psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, cur_co, 0, 0, 0, 0, 0); BLI_kdtree_insert(tree, i, cur_co, NULL); } @@ -3303,7 +3303,7 @@ static int brush_add(PEData *data, short number) } pa->size= 1.0f; - initialize_particle(&sim, pa,i); + initialize_particle(&sim, pa, i); reset_particle(&sim, pa, 0.0, 1.0); point->flag |= PEP_EDIT_RECALC; if (pe_x_mirror(ob)) @@ -3319,8 +3319,8 @@ static int brush_add(PEData *data, short number) int w, maxw; float maxd, totw=0.0, weight[3]; - psys_particle_on_dm(psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,0,0); - maxw= BLI_kdtree_find_n_nearest(tree,3,co1,NULL,ptn); + psys_particle_on_dm(psmd->dm, psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co1, 0, 0, 0, 0, 0); + maxw= BLI_kdtree_find_n_nearest(tree, 3, co1, NULL, ptn); maxd= ptn[maxw-1].dist; @@ -3379,7 +3379,7 @@ static int brush_add(PEData *data, short number) } for (k=0, hkey=pa->hair; k<pset->totaddkey; k++, hkey++) { psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - invert_m4_m4(imat,hairmat); + invert_m4_m4(imat, hairmat); mul_m4_v3(imat, hkey->co); } } @@ -3622,7 +3622,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) data.weightfac = brush->strength; /* note that this will never be zero */ - foreach_mouse_hit_key(&data, brush_weight, selected); + foreach_mouse_hit_key(&data, BKE_brush_weight_get, selected); } break; @@ -3635,7 +3635,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) if (pset->brushtype == PE_BRUSH_ADD && pe_x_mirror(ob)) PE_mirror_x(scene, ob, 1); - update_world_cos(ob,edit); + update_world_cos(ob, edit); psys_free_path_cache(NULL, edit); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } @@ -3671,7 +3671,8 @@ static int brush_edit_exec(bContext *C, wmOperator *op) if (!brush_edit_init(C, op)) return OPERATOR_CANCELLED; - RNA_BEGIN (op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") + { brush_edit_apply(C, op, &itemptr); } RNA_END; @@ -3931,7 +3932,7 @@ void PE_undo_push(Scene *scene, const char *str) } /* copy */ - make_PTCacheUndo(edit,edit->curundo); + make_PTCacheUndo(edit, edit->curundo); } void PE_undo_step(Scene *scene, int step) @@ -3941,7 +3942,7 @@ void PE_undo_step(Scene *scene, int step) if (!edit) return; if (step==0) { - get_PTCacheUndo(edit,edit->curundo); + get_PTCacheUndo(edit, edit->curundo); } else if (step==1) { @@ -4100,7 +4101,7 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, totpoint = psys ? psys->totpart : (int)((PTCacheMem*)cache->mem_cache.first)->totpoint; edit= MEM_callocN(sizeof(PTCacheEdit), "PE_create_particle_edit"); - edit->points=MEM_callocN(totpoint*sizeof(PTCacheEditPoint),"PTCacheEditPoints"); + edit->points=MEM_callocN(totpoint*sizeof(PTCacheEditPoint), "PTCacheEditPoints"); edit->totpoint = totpoint; if (psys && !cache) { @@ -4115,7 +4116,7 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, pa = psys->particles; LOOP_POINTS { point->totkey = pa->totkey; - point->keys= MEM_callocN(point->totkey*sizeof(PTCacheEditKey),"ParticleEditKeys"); + point->keys= MEM_callocN(point->totkey*sizeof(PTCacheEditKey), "ParticleEditKeys"); point->flag |= PEP_EDIT_RECALC; hkey = pa->hair; @@ -4151,7 +4152,7 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, continue; if (!point->totkey) { - key = point->keys = MEM_callocN(totframe*sizeof(PTCacheEditKey),"ParticleEditKeys"); + key = point->keys = MEM_callocN(totframe*sizeof(PTCacheEditKey), "ParticleEditKeys"); point->flag |= PEP_EDIT_RECALC; } else diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c index 3d50ec26a40..13e407040c3 100644 --- a/source/blender/editors/physics/particle_object.c +++ b/source/blender/editors/physics/particle_object.c @@ -532,7 +532,7 @@ void PARTICLE_OT_dupliob_move_down(wmOperatorType *ot) static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSystemModifierData *psmd = psys_get_modifier(ob,psys); + ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys); ParticleEditSettings *pset= PE_settings(scene); ParticleData *pa; PTCacheEdit *edit; @@ -551,7 +551,7 @@ static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys) edit = psys->edit; point= edit ? edit->points : NULL; - for (i=0, pa=psys->particles; i<psys->totpart; i++,pa++) { + for (i=0, pa=psys->particles; i<psys->totpart; i++, pa++) { if (point) { ekey = point->keys; point++; @@ -559,8 +559,8 @@ static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys) psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - for (k=0,key=pa->hair; k<pa->totkey; k++,key++) { - mul_m4_v3(hairmat,key->co); + for (k=0, key=pa->hair; k<pa->totkey; k++, key++) { + mul_m4_v3(hairmat, key->co); if (ekey) { ekey->flag &= ~PEK_USE_WCO; @@ -622,7 +622,7 @@ void PARTICLE_OT_disconnect_hair(wmOperatorType *ot) static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSystemModifierData *psmd = psys_get_modifier(ob,psys); + ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys); ParticleData *pa; PTCacheEdit *edit; PTCacheEditPoint *point; @@ -661,7 +661,7 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) bvhtree_from_mesh_faces(&bvhtree, dm, 0.0, 2, 6); - for (i=0, pa= psys->particles; i<psys->totpart; i++,pa++) { + for (i=0, pa= psys->particles; i<psys->totpart; i++, pa++) { key = pa->hair; nearest.index = -1; @@ -675,23 +675,23 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) continue; } - mface = CDDM_get_tessface(dm,nearest.index); + mface = CDDM_get_tessface(dm, nearest.index); - copy_v3_v3(v[0], CDDM_get_vert(dm,mface->v1)->co); - copy_v3_v3(v[1], CDDM_get_vert(dm,mface->v2)->co); - copy_v3_v3(v[2], CDDM_get_vert(dm,mface->v3)->co); + copy_v3_v3(v[0], CDDM_get_vert(dm, mface->v1)->co); + copy_v3_v3(v[1], CDDM_get_vert(dm, mface->v2)->co); + copy_v3_v3(v[2], CDDM_get_vert(dm, mface->v3)->co); if (mface->v4) { - copy_v3_v3(v[3], CDDM_get_vert(dm,mface->v4)->co); - interp_weights_poly_v3( pa->fuv,v, 4, nearest.co); + copy_v3_v3(v[3], CDDM_get_vert(dm, mface->v4)->co); + interp_weights_poly_v3(pa->fuv, v, 4, nearest.co); } else - interp_weights_poly_v3( pa->fuv,v, 3, nearest.co); + interp_weights_poly_v3(pa->fuv, v, 3, nearest.co); pa->num = nearest.index; - pa->num_dmcache = psys_particle_dm_face_lookup(ob,psmd->dm,pa->num,pa->fuv,NULL); + pa->num_dmcache = psys_particle_dm_face_lookup(ob, psmd->dm, pa->num, pa->fuv, NULL); psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - invert_m4_m4(imat,hairmat); + invert_m4_m4(imat, hairmat); sub_v3_v3v3(vec, nearest.co, key->co); @@ -700,9 +700,9 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) point++; } - for (k=0,key=pa->hair; k<pa->totkey; k++,key++) { + for (k=0, key=pa->hair; k<pa->totkey; k++, key++) { add_v3_v3(key->co, vec); - mul_m4_v3(imat,key->co); + mul_m4_v3(imat, key->co); if (ekey) { ekey->flag |= PEK_USE_WCO; diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index c0d3e505873..068e93e7a5a 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -1,7 +1,4 @@ /* - * fluidsim.c - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -32,9 +29,6 @@ * \ingroup edphys */ - - - #include <math.h> #include <stdlib.h> #include <string.h> @@ -150,8 +144,8 @@ static int fluid_is_animated_mesh(FluidsimSettings *fss) /* helper function */ void fluidsimGetGeometryObjFilename(Object *ob, char *dst) { //, char *srcname) { - //BLI_snprintf(dst,FILE_MAXFILE, "%s_cfgdata_%s.bobj.gz", srcname, ob->id.name); - BLI_snprintf(dst,FILE_MAXFILE, "fluidcfgdata_%s.bobj.gz", ob->id.name); + //BLI_snprintf(dst, FILE_MAXFILE, "%s_cfgdata_%s.bobj.gz", srcname, ob->id.name); + BLI_snprintf(dst, FILE_MAXFILE, "fluidcfgdata_%s.bobj.gz", ob->id.name); } #endif @@ -199,30 +193,30 @@ typedef struct FluidObject { #if 0 static void fluidsimPrintChannel(FILE *file, float *channel, int paramsize, char *str, int entries) { - int i,j; + int i, j; int channelSize = paramsize; if (entries==3) { - elbeemSimplifyChannelVec3( channel, &channelSize); + elbeemSimplifyChannelVec3(channel, &channelSize); } else if (entries==1) { - elbeemSimplifyChannelFloat( channel, &channelSize); + elbeemSimplifyChannelFloat(channel, &channelSize); } else { // invalid, cant happen? } fprintf(file, " CHANNEL %s =\n", str); - for (i=0; i<channelSize;i++) { - fprintf(file," "); - for (j=0;j<=entries;j++) { // also print time value - fprintf(file," %f ", channel[i*(entries+1)+j] ); - if (j==entries-1) { fprintf(file," "); } + for (i=0; i < channelSize; i++) { + fprintf(file, " "); + for (j=0;j <= entries;j++) { // also print time value + fprintf(file, " %f ", channel[i*(entries + 1) + j]); + if (j==entries-1) { fprintf(file, " "); } } - fprintf(file,"\n"); + fprintf(file, "\n"); } - fprintf(file, " ;\n" ); + fprintf(file, " ;\n"); } #endif @@ -243,7 +237,7 @@ static void init_time(FluidsimSettings *domainSettings, FluidAnimChannels *chann { int i; - channels->timeAtFrame = MEM_callocN( (channels->length+1)*sizeof(float), "timeAtFrame channel"); + channels->timeAtFrame = MEM_callocN((channels->length+1)*sizeof(float), "timeAtFrame channel"); channels->timeAtFrame[0] = channels->timeAtFrame[1] = domainSettings->animStart; // start at index 1 @@ -361,9 +355,9 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid init_time(domainSettings, channels); /* allocate domain animation channels */ - channels->DomainGravity = MEM_callocN( length * (CHANNEL_VEC+1) * sizeof(float), "channel DomainGravity"); - channels->DomainViscosity = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainViscosity"); - channels->DomainTime = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainTime"); + channels->DomainGravity = MEM_callocN(length * (CHANNEL_VEC+1) * sizeof(float), "channel DomainGravity"); + channels->DomainViscosity = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainViscosity"); + channels->DomainTime = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainTime"); /* allocate fluid objects */ for (base=scene->base.first; base; base= base->next) { @@ -379,17 +373,17 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid continue; } - fobj->Translation = MEM_callocN( length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Translation"); - fobj->Rotation = MEM_callocN( length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Rotation"); - fobj->Scale = MEM_callocN( length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Scale"); - fobj->Active = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject Active"); - fobj->InitialVelocity = MEM_callocN( length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject InitialVelocity"); + fobj->Translation = MEM_callocN(length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Translation"); + fobj->Rotation = MEM_callocN(length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Rotation"); + fobj->Scale = MEM_callocN(length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject Scale"); + fobj->Active = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject Active"); + fobj->InitialVelocity = MEM_callocN(length * (CHANNEL_VEC+1) * sizeof(float), "fluidobject InitialVelocity"); if (fluidmd->fss->type == OB_FLUIDSIM_CONTROL) { - fobj->AttractforceStrength = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject AttractforceStrength"); - fobj->AttractforceRadius = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject AttractforceRadius"); - fobj->VelocityforceStrength = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject VelocityforceStrength"); - fobj->VelocityforceRadius = MEM_callocN( length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject VelocityforceRadius"); + fobj->AttractforceStrength = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject AttractforceStrength"); + fobj->AttractforceRadius = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject AttractforceRadius"); + fobj->VelocityforceStrength = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject VelocityforceStrength"); + fobj->VelocityforceRadius = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "fluidobject VelocityforceRadius"); } if (fluid_is_animated_mesh(fluidmd->fss)) { @@ -397,7 +391,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid int *tris=NULL, modifierIndex = modifiers_indexInObject(ob, (ModifierData *)fluidmd); initElbeemMesh(scene, ob, &fobj->numVerts, &verts, &fobj->numTris, &tris, 0, modifierIndex); - fobj->VertexCache = MEM_callocN( length *((fobj->numVerts*CHANNEL_VEC)+1) * sizeof(float), "fluidobject VertexCache"); + fobj->VertexCache = MEM_callocN(length *((fobj->numVerts*CHANNEL_VEC)+1) * sizeof(float), "fluidobject VertexCache"); MEM_freeN(verts); MEM_freeN(tris); @@ -507,7 +501,7 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length) if (ELEM(fluidmd->fss->type, OB_FLUIDSIM_DOMAIN, OB_FLUIDSIM_PARTICLE)) continue; - elbeemResetMesh( &fsmesh ); + elbeemResetMesh(&fsmesh); fsmesh.type = fluidmd->fss->type; fsmesh.name = ob->id.name; @@ -679,7 +673,7 @@ static int fluid_init_filepaths(Object *fsDomain, char *targetDir, char *targetF if (fileCfg) { dirExist = 1; fclose(fileCfg); // remove cfg dummy from directory test - BLI_delete(targetFile, 0,0); + BLI_delete(targetFile, 0, 0); } if (targetDir[0] == '\0' || (!dirExist)) { @@ -691,7 +685,7 @@ static int fluid_init_filepaths(Object *fsDomain, char *targetDir, char *targetF BLI_splitdirstring(blendDir, blendFile); BLI_replace_extension(blendFile, FILE_MAX, ""); /* strip .blend */ - BLI_snprintf(newSurfdataPath, FILE_MAX ,"//fluidsimdata/%s_%s_", blendFile, fsDomain->id.name); + BLI_snprintf(newSurfdataPath, FILE_MAX, "//fluidsimdata/%s_%s_", blendFile, fsDomain->id.name); BLI_snprintf(debugStrBuffer, 256, "fluidsimBake::error - warning resetting output dir to '%s'\n", newSurfdataPath); elbeemDebugOut(debugStrBuffer); @@ -703,7 +697,7 @@ static int fluid_init_filepaths(Object *fsDomain, char *targetDir, char *targetF if (outStringsChanged) { char dispmsg[FILE_MAX+256]; int selection=0; - BLI_strncpy(dispmsg,"Output settings set to: '", sizeof(dispmsg)); + BLI_strncpy(dispmsg, "Output settings set to: '", sizeof(dispmsg)); strcat(dispmsg, newSurfdataPath); strcat(dispmsg, "'%t|Continue with changed settings%x1|Discard and abort%x0"); @@ -792,7 +786,7 @@ int runSimulationCallback(void *data, int status, int frame) if (status == FLUIDSIM_CBSTATUS_NEWFRAME) { fluidbake_updatejob(fb, frame / (float)settings->noOfFrames); - //printf("elbeem blender cb s%d, f%d, domainid:%d noOfFrames: %d\n", status,frame, settings->domainId, settings->noOfFrames ); // DEBUG + //printf("elbeem blender cb s%d, f%d, domainid:%d noOfFrames: %d\n", status, frame, settings->domainId, settings->noOfFrames ); // DEBUG } if (fluidbake_breakjob(fb)) { @@ -898,7 +892,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor if (getenv(strEnvName)) { int dlevel = atoi(getenv(strEnvName)); elbeemSetDebugLevel(dlevel); - BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer),"fluidsimBake::msg: Debug messages activated due to envvar '%s'\n",strEnvName); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "fluidsimBake::msg: Debug messages activated due to envvar '%s'\n", strEnvName); elbeemDebugOut(debugStrBuffer); } @@ -935,7 +929,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor /* rough check of settings... */ if (domainSettings->previewresxyz > domainSettings->resolutionxyz) { - BLI_snprintf(debugStrBuffer,sizeof(debugStrBuffer),"fluidsimBake::warning - Preview (%d) >= Resolution (%d)... setting equal.\n", domainSettings->previewresxyz , domainSettings->resolutionxyz); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "fluidsimBake::warning - Preview (%d) >= Resolution (%d)... setting equal.\n", domainSettings->previewresxyz, domainSettings->resolutionxyz); elbeemDebugOut(debugStrBuffer); domainSettings->previewresxyz = domainSettings->resolutionxyz; } @@ -958,7 +952,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor else { gridlevels = domainSettings->maxRefine; } - BLI_snprintf(debugStrBuffer,sizeof(debugStrBuffer),"fluidsimBake::msg: Baking %s, refine: %d\n", fsDomain->id.name , gridlevels ); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "fluidsimBake::msg: Baking %s, refine: %d\n", fsDomain->id.name, gridlevels); elbeemDebugOut(debugStrBuffer); @@ -978,7 +972,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor /* ******** init domain object's matrix ******** */ copy_m4_m4(domainMat, fsDomain->obmat); if (!invert_m4_m4(invDomMat, domainMat)) { - BLI_snprintf(debugStrBuffer,sizeof(debugStrBuffer),"fluidsimBake::error - Invalid obj matrix?\n"); + BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "fluidsimBake::error - Invalid obj matrix?\n"); elbeemDebugOut(debugStrBuffer); BKE_report(reports, RPT_ERROR, "Invalid object matrix"); diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index f9737b02a01..9f611b52669 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -146,6 +146,13 @@ static void screen_opengl_render_apply(OGLRender *oglrender) BLI_assert((oglrender->sizex == ibuf->x) && (oglrender->sizey == ibuf->y)); if (ibuf->rect_float == NULL) { + /* internally sequencer working in sRGB space and stores both bytes and float + * buffers in sRGB space, but if byte->float onversion doesn't happen in sequencer + * (e.g. when adding image sequence/movie into sequencer) there'll be only + * byte buffer and profile will still indicate sRGB->linear space conversion is needed + * here we're ensure there'll be no conversion happen and float buffer would store + * linear frame (sergey) */ + ibuf->profile = IB_PROFILE_NONE; IMB_float_from_rect(ibuf); } @@ -185,7 +192,7 @@ static void screen_opengl_render_apply(OGLRender *oglrender) float *accum_tmp = MEM_mallocN(sizex * sizey * sizeof(float) * 4, "accum2"); int j; - BLI_initjit(jit_ofs[0], scene->r.osa); + BLI_jitter_init(jit_ofs[0], scene->r.osa); /* first sample buffer, also initializes 'rv3d->persmat' */ ED_view3d_draw_offscreen(scene, v3d, ar, sizex, sizey, NULL, winmat, TRUE); @@ -348,7 +355,7 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op) oglrender->is_sequencer = is_sequencer; if (is_sequencer) { - oglrender->sseq = CTX_wm_space_seq(C);; + oglrender->sseq = CTX_wm_space_seq(C); } @@ -364,7 +371,7 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op) /* MUST be cleared on exit */ oglrender->scene->customdata_mask_modal = (ED_view3d_datamask(oglrender->scene, oglrender->v3d) | - ED_view3d_object_datamask(oglrender->scene) ); + ED_view3d_object_datamask(oglrender->scene)); /* apply immediately in case we're rendering from a script, * running notifiers again will overwrite */ diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 9899f39de75..32ed74097e1 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 903fb87265b..6231970ae40 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -333,7 +333,8 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op)) if (!ob || !(matar = give_matarar(ob))) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + { if (ob != ob_iter && give_matarar(ob_iter)) { if (ob->data != ob_iter->data) assign_matarar(ob_iter, matar, ob->totcol); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 2a561a6bc6c..2fa1e759e21 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -80,26 +80,26 @@ static void region_draw_emboss(ARegion *ar, rcti *scirct) rect.ymax = scirct->ymax - ar->winrct.ymin; /* set transp line */ - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* right */ - glColor4ub(0,0,0, 30); + glColor4ub(0, 0, 0, 30); sdrawline(rect.xmax, rect.ymin, rect.xmax, rect.ymax); /* bottom */ - glColor4ub(0,0,0, 30); + glColor4ub(0, 0, 0, 30); sdrawline(rect.xmin, rect.ymin, rect.xmax, rect.ymin); /* top */ - glColor4ub(255,255,255, 30); + glColor4ub(255, 255, 255, 30); sdrawline(rect.xmin, rect.ymax, rect.xmax, rect.ymax); /* left */ - glColor4ub(255,255,255, 30); + glColor4ub(255, 255, 255, 30); sdrawline(rect.xmin, rect.ymin, rect.xmin, rect.ymax); - glDisable( GL_BLEND ); + glDisable(GL_BLEND); } void ED_region_pixelspace(ARegion *ar) @@ -172,8 +172,8 @@ static void area_draw_azone(short x1, short y1, short x2, short y2) int dx = x2 - x1; int dy = y2 - y1; - dx= copysign(ceil(0.3f*fabs(dx)), dx); - dy= copysign(ceil(0.3f*fabs(dy)), dy); + dx = copysign(ceilf(0.3f * fabsf(dx)), dx); + dy = copysign(ceilf(0.3f * fabsf(dy)), dy); glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); @@ -213,12 +213,12 @@ static void region_draw_azone_icon(AZone *az) glColor4f(1.f, 1.f, 1.f, 0.8f); gluQuadricDrawStyle(qobj, GLU_FILL); - gluDisk( qobj, 0.0, 4.25f, 16, 1); + gluDisk(qobj, 0.0, 4.25f, 16, 1); glColor4f(0.2f, 0.2f, 0.2f, 0.9f); gluQuadricDrawStyle(qobj, GLU_SILHOUETTE); - gluDisk( qobj, 0.0, 4.25f, 16, 1); + gluDisk(qobj, 0.0, 4.25f, 16, 1); glDisable(GL_LINE_SMOOTH); @@ -357,8 +357,8 @@ void ED_area_overdraw(bContext *C) /* Draw AZones, in screenspace */ wmSubWindowSet(win, screen->mainwin); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (sa= screen->areabase.first; sa; sa= sa->next) { AZone *az; @@ -388,7 +388,7 @@ void ED_area_overdraw(bContext *C) } } } - glDisable( GL_BLEND ); + glDisable(GL_BLEND); } @@ -1530,17 +1530,17 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) if (sa->flag & HEADER_NO_PULLDOWN) { but = uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, - ICON_DISCLOSURE_TRI_RIGHT, - xco,yco,UI_UNIT_X,UI_UNIT_Y-2, - &(sa->flag), 0, 0, 0, 0, - "Show pulldown menus"); + ICON_DISCLOSURE_TRI_RIGHT, + xco, yco, UI_UNIT_X, UI_UNIT_Y - 2, + &(sa->flag), 0, 0, 0, 0, + "Show pulldown menus"); } else { but = uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, - ICON_DISCLOSURE_TRI_DOWN, - xco,yco,UI_UNIT_X,UI_UNIT_Y-2, - &(sa->flag), 0, 0, 0, 0, - "Hide pulldown menus"); + ICON_DISCLOSURE_TRI_DOWN, + xco, yco, UI_UNIT_X, UI_UNIT_Y - 2, + &(sa->flag), 0, 0, 0, 0, + "Hide pulldown menus"); } uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */ @@ -1803,7 +1803,7 @@ void ED_region_info_draw(ARegion *ar, const char *text, int block, float alpha) rect.ymax = ar->winrct.ymax - ar->winrct.ymin; glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0f, 0.0f, 0.0f, alpha); glRecti(rect.xmin, rect.ymin, rect.xmax+1, rect.ymax+1); glDisable(GL_BLEND); @@ -1820,7 +1820,7 @@ void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy) float fac, blendfac; int x1, y1, x2, y2; - /* the image is located inside (0,0),(1, 1) as set by view2d */ + /* the image is located inside (0, 0), (1, 1) as set by view2d */ UI_ThemeColorShade(TH_BACK, 20); UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x1, &y1); diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c index 5b73645abde..69db65fda1c 100644 --- a/source/blender/editors/screen/glutil.c +++ b/source/blender/editors/screen/glutil.c @@ -81,14 +81,14 @@ GLubyte stipple_halftone[128] = { GLubyte stipple_quarttone[128] = { - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, - 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0}; + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, + 136, 136, 136, 136, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0}; GLubyte stipple_diag_stripes_pos[128] = { @@ -195,16 +195,15 @@ void fdrawcheckerboard(float x1, float y1, float x2, float y2) { unsigned char col1[4]= {40, 40, 40}, col2[4]= {50, 50, 50}; - GLubyte checker_stipple[32*32/8] = { - 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, - 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, - 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, - 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, - 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, - 255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, - 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, - 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, - }; + GLubyte checker_stipple[32 * 32 / 8] = { + 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, + 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, + 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, + 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, + 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, + 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, + 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, + 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255}; glColor3ubv(col1); glRectf(x1, y1, x2, y2); @@ -298,13 +297,13 @@ void setlinestyle(int nr) /* Invert line handling */ -#define glToggle(mode, onoff) (((onoff)?glEnable:glDisable)(mode)) +#define gl_toggle(mode, onoff) (((onoff)?glEnable:glDisable)(mode)) void set_inverted_drawing(int enable) { glLogicOp(enable?GL_INVERT:GL_COPY); - glToggle(GL_COLOR_LOGIC_OP, enable); - glToggle(GL_DITHER, !enable); + gl_toggle(GL_COLOR_LOGIC_OP, enable); + gl_toggle(GL_DITHER, !enable); } void sdrawXORline(int x0, int y0, int x1, int y1) @@ -370,8 +369,8 @@ void fdrawXORellipse(float xofs, float yofs, float hw, float hh) set_inverted_drawing(1); glPushMatrix(); - glTranslatef(xofs, yofs, 0.0); - glScalef(1,hh/hw,1); + glTranslatef(xofs, yofs, 0.0f); + glScalef(1.0f, hh / hw, 1.0f); glutil_draw_lined_arc(0.0, M_PI*2.0, hw, 20); glPopMatrix(); @@ -782,14 +781,14 @@ void glaEnd2DDraw(gla2DDrawInfo *di) } #endif -/* **************** glPoint hack ************************ */ +/* **************** GL_POINT hack ************************ */ static int curmode=0; static int pointhack=0; -static GLubyte Squaredot[16] = { 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff}; +static GLubyte Squaredot[16] = {0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff}; void bglBegin(int mode) { diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 3777547fa90..49672b77d43 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -1505,13 +1505,13 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event) RNA_enum_set(op->ptr, "direction", 'h'); sd->sarea->flag |= AREA_FLAG_DRAWSPLIT_H; - WM_cursor_set(CTX_wm_window(C),CURSOR_X_MOVE); + WM_cursor_set(CTX_wm_window(C), CURSOR_X_MOVE); } else { RNA_enum_set(op->ptr, "direction", 'v'); sd->sarea->flag |= AREA_FLAG_DRAWSPLIT_V; - WM_cursor_set(CTX_wm_window(C),CURSOR_Y_MOVE); + WM_cursor_set(CTX_wm_window(C), CURSOR_Y_MOVE); } } } diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index 553a9a335d7..c681f8ddb75 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -69,7 +69,7 @@ typedef struct Snapshot { float size[3]; float ofs[3]; float rot; - int brush_size; + int BKE_brush_size_get; int winx; int winy; int brush_map_mode; @@ -87,8 +87,8 @@ static int same_snap(Snapshot *snap, Brush *brush, ViewContext *vc) /* make brush smaller shouldn't cause a resample */ ((mtex->brush_map_mode == MTEX_MAP_MODE_FIXED && - (brush_size(vc->scene, brush) <= snap->brush_size)) || - (brush_size(vc->scene, brush) == snap->brush_size)) && + (BKE_brush_size_get(vc->scene, brush) <= snap->BKE_brush_size_get)) || + (BKE_brush_size_get(vc->scene, brush) == snap->BKE_brush_size_get)) && (mtex->brush_map_mode == snap->brush_map_mode) && (vc->ar->winx == snap->winx) && @@ -110,7 +110,7 @@ static void make_snap(Snapshot *snap, Brush *brush, ViewContext *vc) snap->rot = -1; } - snap->brush_size = brush_size(vc->scene, brush); + snap->BKE_brush_size_get = BKE_brush_size_get(vc->scene, brush); snap->winx = vc->ar->winx; snap->winy = vc->ar->winy; } @@ -155,7 +155,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc) make_snap(&snap, br, vc); if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) { - int s = brush_size(vc->scene, br); + int s = BKE_brush_size_get(vc->scene, br); int r = 1; for (s >>= 1; s > 0; s >>= 1) @@ -196,7 +196,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc) // largely duplicated from tex_strength const float rotation = -br->mtex.rot; - float radius = brush_size(vc->scene, br); + float radius = BKE_brush_size_get(vc->scene, br); int index = j * size + i; float x; float avg; @@ -240,7 +240,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc) avg += br->texture_sample_bias; if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) - avg *= brush_curve_strength(br, len, 1); /* Falloff curve */ + avg *= BKE_brush_curve_strength(br, len, 1); /* Falloff curve */ buffer[index] = 255 - (GLubyte)(255 * avg); } @@ -345,11 +345,11 @@ static int sculpt_get_brush_geometry(bContext *C, ViewContext *vc, sculpt_stroke_get_location(C, location, window)) { *pixel_radius = project_brush_radius(vc, - brush_unprojected_radius(scene, brush), + BKE_brush_unprojected_radius_get(scene, brush), location); if (*pixel_radius == 0) - *pixel_radius = brush_size(scene, brush); + *pixel_radius = BKE_brush_size_get(scene, brush); mul_m4_v3(vc->obact->obmat, location); @@ -359,7 +359,7 @@ static int sculpt_get_brush_geometry(bContext *C, ViewContext *vc, Sculpt *sd = CTX_data_tool_settings(C)->sculpt; Brush *brush = paint_brush(&sd->paint); - *pixel_radius = brush_size(scene, brush); + *pixel_radius = BKE_brush_size_get(scene, brush); hit = 0; } @@ -414,7 +414,7 @@ static void paint_draw_alpha_overlay(Sculpt *sd, Brush *brush, glTranslatef(-0.5f, -0.5f, 0); /* scale based on tablet pressure */ - if (sd->draw_pressure && brush_use_size_pressure(vc->scene, brush)) { + if (sd->draw_pressure && BKE_brush_use_size_pressure(vc->scene, brush)) { glTranslatef(0.5f, 0.5f, 0); glScalef(1.0f / sd->pressure_value, 1.0f / sd->pressure_value, 1); glTranslatef(-0.5f, -0.5f, 0); @@ -429,7 +429,7 @@ static void paint_draw_alpha_overlay(Sculpt *sd, Brush *brush, quad.ymax = aim[1] + sd->anchored_size - win->ymin; } else { - const int radius = brush_size(vc->scene, brush); + const int radius = BKE_brush_size_get(vc->scene, brush); quad.xmin = x - radius; quad.ymin = y - radius; quad.xmax = x + radius; @@ -475,7 +475,7 @@ static void paint_cursor_on_hit(Sculpt *sd, Brush *brush, ViewContext *vc, float unprojected_radius, projected_radius; /* update the brush's cached 3D radius */ - if (!brush_use_locked_size(vc->scene, brush)) { + if (!BKE_brush_use_locked_size(vc->scene, brush)) { /* get 2D brush radius */ if (sd->draw_anchored) projected_radius = sd->anchored_size; @@ -483,7 +483,7 @@ static void paint_cursor_on_hit(Sculpt *sd, Brush *brush, ViewContext *vc, if (brush->flag & BRUSH_ANCHORED) projected_radius = 8; else - projected_radius = brush_size(vc->scene, brush); + projected_radius = BKE_brush_size_get(vc->scene, brush); } /* convert brush radius from 2D to 3D */ @@ -491,11 +491,11 @@ static void paint_cursor_on_hit(Sculpt *sd, Brush *brush, ViewContext *vc, projected_radius); /* scale 3D brush radius by pressure */ - if (sd->draw_pressure && brush_use_size_pressure(vc->scene, brush)) + if (sd->draw_pressure && BKE_brush_use_size_pressure(vc->scene, brush)) unprojected_radius *= sd->pressure_value; /* set cached value in either Brush or UnifiedPaintSettings */ - brush_set_unprojected_radius(vc->scene, brush, unprojected_radius); + BKE_brush_unprojected_radius_set(vc->scene, brush, unprojected_radius); } } @@ -514,7 +514,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) translation[1] = y; outline_alpha = 0.5; outline_col = brush->add_col; - final_radius = brush_size(scene, brush); + final_radius = BKE_brush_size_get(scene, brush); /* check that brush drawing is enabled */ if (!(paint->flags & PAINT_SHOW_BRUSH)) @@ -557,8 +557,8 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) /* draw overlay */ paint_draw_alpha_overlay(sd, brush, &vc, x, y); - if (brush_use_locked_size(scene, brush)) - brush_set_size(scene, brush, pixel_radius); + if (BKE_brush_use_locked_size(scene, brush)) + BKE_brush_size_set(scene, brush, pixel_radius); /* check if brush is subtracting, use different color then */ /* TODO: no way currently to know state of pen flip or diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c index c75c1be36f5..47536d99fcb 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.c +++ b/source/blender/editors/sculpt_paint/paint_hide.c @@ -1,6 +1,4 @@ /* - * $Id$ - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index ac327b56fb9..a025a84bea9 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -1,8 +1,4 @@ /* - * imagepaint.c - * - * Functions to paint images in 2D and 3D. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,9 +26,9 @@ /** \file blender/editors/sculpt_paint/paint_image.c * \ingroup edsculpt + * \brief Functions to paint images in 2D and 3D. */ - #include <float.h> #include <string.h> #include <stdio.h> @@ -1461,7 +1457,7 @@ static float project_paint_uvpixel_mask( // This only works when the opacity dosnt change while painting, stylus pressure messes with this // so don't use it. - // if (ps->is_airbrush==0) mask *= brush_alpha(ps->brush); + // if (ps->is_airbrush==0) mask *= BKE_brush_alpha_get(ps->brush); return mask; } @@ -2957,7 +2953,7 @@ static void project_paint_begin(ProjPaintState *ps) MemArena *arena; /* at the moment this is just ps->arena_mt[0], but use this to show were not multithreading */ - const int diameter = 2 * brush_size(ps->scene, ps->brush); + const int diameter = 2 * BKE_brush_size_get(ps->scene, ps->brush); /* ---- end defines ---- */ @@ -3095,10 +3091,10 @@ static void project_paint_begin(ProjPaintState *ps) invert_m4_m4(viewmat, viewinv); /* window matrix, clipping and ortho */ - camera_params_init(¶ms); - camera_params_from_object(¶ms, cam_ob); - camera_params_compute_viewplane(¶ms, ps->winx, ps->winy, 1.0f, 1.0f); - camera_params_compute_matrix(¶ms); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, cam_ob); + BKE_camera_params_compute_viewplane(¶ms, ps->winx, ps->winy, 1.0f, 1.0f); + BKE_camera_params_compute_matrix(¶ms); copy_m4_m4(winmat, params.winmat); ps->clipsta = params.clipsta; @@ -3601,7 +3597,7 @@ static int project_bucket_iter_init(ProjPaintState *ps, const float mval_f[2]) { if (ps->source == PROJ_SRC_VIEW) { float min_brush[2], max_brush[2]; - const float radius = (float)brush_size(ps->scene, ps->brush); + const float radius = (float)BKE_brush_size_get(ps->scene, ps->brush); /* so we don't have a bucket bounds that is way too small to paint into */ // if (radius < 1.0f) radius = 1.0f; // this doesn't work yet :/ @@ -3639,7 +3635,7 @@ static int project_bucket_iter_init(ProjPaintState *ps, const float mval_f[2]) static int project_bucket_iter_next(ProjPaintState *ps, int *bucket_index, rctf *bucket_bounds, const float mval[2]) { - const int diameter = 2 * brush_size(ps->scene, ps->brush); + const int diameter = 2 * BKE_brush_size_get(ps->scene, ps->brush); if (ps->thread_tot > 1) BLI_lock_thread(LOCK_CUSTOM1); @@ -3863,7 +3859,7 @@ static void *do_projectpaint_thread(void *ph_v) float co[2]; float mask = 1.0f; /* airbrush wont use mask */ unsigned short mask_short; - const float radius = (float)brush_size(ps->scene, ps->brush); + const float radius = (float)BKE_brush_size_get(ps->scene, ps->brush); const float radius_squared = radius * radius; /* avoid a square root with every dist comparison */ short lock_alpha = ELEM(ps->brush->blend, IMB_BLEND_ERASE_ALPHA, IMB_BLEND_ADD_ALPHA) ? 0 : ps->brush->flag & BRUSH_LOCK_ALPHA; @@ -3917,12 +3913,12 @@ static void *do_projectpaint_thread(void *ph_v) if (dist_nosqrt <= radius_squared) { dist = sqrtf(dist_nosqrt); - falloff = brush_curve_strength_clamp(ps->brush, dist, radius); + falloff = BKE_brush_curve_strength_clamp(ps->brush, dist, radius); if (falloff > 0.0f) { if (ps->is_texbrush) { /* note, for clone and smear, we only use the alpha, could be a special function */ - brush_sample_tex(ps->scene, ps->brush, projPixel->projCoSS, rgba, thread_index); + BKE_brush_sample_tex(ps->scene, ps->brush, projPixel->projCoSS, rgba, thread_index); alpha = rgba[3]; } else { @@ -3931,7 +3927,7 @@ static void *do_projectpaint_thread(void *ph_v) if (ps->is_airbrush) { /* for an aurbrush there is no real mask, so just multiply the alpha by it */ - alpha *= falloff * brush_alpha(ps->scene, ps->brush); + alpha *= falloff * BKE_brush_alpha_get(ps->scene, ps->brush); mask = ((float)projPixel->mask) / 65535.0f; } else { @@ -3939,7 +3935,7 @@ static void *do_projectpaint_thread(void *ph_v) falloff = 1.0f - falloff; falloff = 1.0f - (falloff * falloff); - mask_short = (unsigned short)(projPixel->mask * (brush_alpha(ps->scene, ps->brush) * falloff)); + mask_short = (unsigned short)(projPixel->mask * (BKE_brush_alpha_get(ps->scene, ps->brush) * falloff)); if (mask_short > projPixel->mask_max) { mask = ((float)mask_short) / 65535.0f; projPixel->mask_max = mask_short; @@ -4105,9 +4101,9 @@ static int project_paint_sub_stroke(ProjPaintState *ps, BrushPainter *painter, c pos[1] = (float)(mval_i[1]); // we may want to use this later - // brush_painter_require_imbuf(painter, ((ibuf->rect_float)? 1: 0), 0, 0); + // BKE_brush_painter_require_imbuf(painter, ((ibuf->rect_float)? 1: 0), 0, 0); - if (brush_painter_paint(painter, project_paint_op, pos, time, pressure, ps, 0)) { + if (BKE_brush_painter_paint(painter, project_paint_op, pos, time, pressure, ps, 0)) { return 1; } else return 0; @@ -4529,9 +4525,9 @@ static int imapaint_paint_sub_stroke(ImagePaintState *s, BrushPainter *painter, pos[0] = uv[0] * ibuf->x; pos[1] = uv[1] * ibuf->y; - brush_painter_require_imbuf(painter, ((ibuf->rect_float) ? 1 : 0), 0, 0); + BKE_brush_painter_require_imbuf(painter, ((ibuf->rect_float) ? 1 : 0), 0, 0); - if (brush_painter_paint(painter, imapaint_paint_op, pos, time, pressure, s, ibuf->profile == IB_PROFILE_LINEAR_RGB)) { + if (BKE_brush_painter_paint(painter, imapaint_paint_op, pos, time, pressure, s, ibuf->profile == IB_PROFILE_LINEAR_RGB)) { if (update) imapaint_image_update(s->sima, image, ibuf, texpaint); return 1; @@ -4584,7 +4580,7 @@ static int imapaint_paint_stroke(ViewContext *vc, ImagePaintState *s, BrushPaint redraw |= imapaint_paint_sub_stroke(s, painter, s->image, texpaint, fwuv, time, 1, pressure); imapaint_clear_partial_redraw(); - brush_painter_break_stroke(painter); + BKE_brush_painter_break_stroke(painter); } /* set new canvas */ @@ -4858,7 +4854,7 @@ static int texture_paint_init(bContext *C, wmOperator *op) if (pop->mode == PAINT_MODE_3D && (pop->s.tool == PAINT_TOOL_CLONE)) pop->s.tool = PAINT_TOOL_DRAW; pop->s.blend = brush->blend; - pop->orig_brush_size = brush_size(scene, brush); + pop->orig_brush_size = BKE_brush_size_get(scene, brush); if (pop->mode != PAINT_MODE_2D) { Object *ob = OBACT; @@ -4924,8 +4920,8 @@ static int texture_paint_init(bContext *C, wmOperator *op) return 0; /* Don't allow brush size below 2 */ - if (brush_size(scene, brush) < 2) - brush_set_size(scene, brush, 2); + if (BKE_brush_size_get(scene, brush) < 2) + BKE_brush_size_set(scene, brush, 2); /* allocate and initialize spacial data structures */ project_paint_begin(&pop->ps); @@ -4939,7 +4935,7 @@ static int texture_paint_init(bContext *C, wmOperator *op) image_undo_restore, image_undo_free); /* create painter */ - pop->painter = brush_painter_new(scene, pop->s.brush); + pop->painter = BKE_brush_painter_new(scene, pop->s.brush); return 1; } @@ -5006,10 +5002,10 @@ static void paint_exit(bContext *C, wmOperator *op) settings->imapaint.flag &= ~IMAGEPAINT_DRAWING; imapaint_canvas_free(&pop->s); - brush_painter_free(pop->painter); + BKE_brush_painter_free(pop->painter); if (pop->mode == PAINT_MODE_3D_PROJECT) { - brush_set_size(scene, pop->ps.brush, pop->orig_brush_size); + BKE_brush_size_set(scene, pop->ps.brush, pop->orig_brush_size); paint_brush_exit_tex(pop->ps.brush); project_paint_end(&pop->ps); @@ -5038,7 +5034,8 @@ static int paint_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - RNA_BEGIN (op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") + { paint_apply(C, op, &itemptr); } RNA_END; @@ -5082,13 +5079,13 @@ static void paint_apply_event(bContext *C, wmOperator *op, wmEvent *event) /* special exception here for too high pressure values on first touch in * windows for some tablets, then we just skip first touch .. */ - if (tablet && (pressure >= 0.99f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || brush_use_alpha_pressure(scene, pop->s.brush) || brush_use_size_pressure(scene, pop->s.brush))) + if (tablet && (pressure >= 0.99f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || BKE_brush_use_alpha_pressure(scene, pop->s.brush) || BKE_brush_use_size_pressure(scene, pop->s.brush))) return; /* This can be removed once fixed properly in - * brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, double time, float pressure, void *user) + * BKE_brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, double time, float pressure, void *user) * at zero pressure we should do nothing 1/2^12 is .0002 which is the sensitivity of the most sensitive pen tablet available */ - if (tablet && (pressure < .0002f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || brush_use_alpha_pressure(scene, pop->s.brush) || brush_use_size_pressure(scene, pop->s.brush))) + if (tablet && (pressure < .0002f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || BKE_brush_use_alpha_pressure(scene, pop->s.brush) || BKE_brush_use_size_pressure(scene, pop->s.brush))) return; } @@ -5211,7 +5208,7 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata) if (paint && brush && paint->flags & PAINT_SHOW_BRUSH) { ToolSettings *ts; float zoomx, zoomy; - const float size = (float)brush_size(scene, brush); + const float size = (float)BKE_brush_size_get(scene, brush); short use_zoom; float pixel_size; float alpha = 0.5f; @@ -5705,8 +5702,8 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op) /* override */ ps.is_texbrush = 0; ps.is_airbrush = 1; - orig_brush_size = brush_size(scene, ps.brush); - brush_set_size(scene, ps.brush, 32); /* cover the whole image */ + orig_brush_size = BKE_brush_size_get(scene, ps.brush); + BKE_brush_size_set(scene, ps.brush, 32); /* cover the whole image */ ps.tool = PAINT_TOOL_DRAW; /* so pixels are initialized with minimal info */ @@ -5719,7 +5716,7 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op) project_paint_begin(&ps); if (ps.dm == NULL) { - brush_set_size(scene, ps.brush, orig_brush_size); + BKE_brush_size_set(scene, ps.brush, orig_brush_size); return OPERATOR_CANCELLED; } else { @@ -5743,7 +5740,7 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op) project_paint_end(&ps); scene->toolsettings->imapaint.flag &= ~IMAGEPAINT_DRAWING; - brush_set_size(scene, ps.brush, orig_brush_size); + BKE_brush_size_set(scene, ps.brush, orig_brush_size); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index 200fd8e65c7..65fb65c1553 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -53,15 +53,16 @@ struct wmOperatorType; typedef int (*StrokeGetLocation)(struct bContext *C, float location[3], float mouse[2]); typedef int (*StrokeTestStart)(struct bContext *C, struct wmOperator *op, struct wmEvent *event); typedef void (*StrokeUpdateStep)(struct bContext *C, struct PaintStroke *stroke, struct PointerRNA *itemptr); -typedef void (*StrokeDone)(struct bContext *C, struct PaintStroke *stroke); +typedef void (*StrokeDone)(const struct bContext *C, struct PaintStroke *stroke); struct PaintStroke *paint_stroke_new(struct bContext *C, StrokeGetLocation get_location, StrokeTestStart test_start, StrokeUpdateStep update_step, StrokeDone done, int event_type); -void paint_stroke_free(struct PaintStroke *stroke); +void paint_stroke_data_free(struct wmOperator *op); int paint_space_stroke_enabled(struct Brush *br); +struct wmKeyMap *paint_stroke_modal_keymap(struct wmKeyConfig *keyconf); int paint_stroke_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int paint_stroke_exec(struct bContext *C, struct wmOperator *op); int paint_stroke_cancel(struct bContext *C, struct wmOperator *op); diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index b5d6f20aa79..2699e9f56f8 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -63,9 +63,9 @@ static int brush_add_exec(bContext *C, wmOperator *UNUSED(op)) struct Brush *br = paint_brush(paint); if (br) - br = copy_brush(br); + br = BKE_brush_copy(br); else - br = add_brush("Brush"); + br = BKE_brush_add("Brush"); paint_brush_set(paint_get_active(CTX_data_scene(C)), br); @@ -98,7 +98,7 @@ static int brush_scale_size_exec(bContext *C, wmOperator *op) if (brush) { // pixel radius { - const int old_size = brush_size(scene, brush); + const int old_size = BKE_brush_size_get(scene, brush); int size = (int)(scalar * old_size); if (old_size == size) { @@ -111,17 +111,17 @@ static int brush_scale_size_exec(bContext *C, wmOperator *op) } CLAMP(size, 1, 2000); // XXX magic number - brush_set_size(scene, brush, size); + BKE_brush_size_set(scene, brush, size); } // unprojected radius { - float unprojected_radius = scalar * brush_unprojected_radius(scene, brush); + float unprojected_radius = scalar * BKE_brush_unprojected_radius_get(scene, brush); if (unprojected_radius < 0.001f) // XXX magic number unprojected_radius = 0.001f; - brush_set_unprojected_radius(scene, brush, unprojected_radius); + BKE_brush_unprojected_radius_set(scene, brush, unprojected_radius); } } @@ -178,7 +178,7 @@ static int brush_reset_exec(bContext *C, wmOperator *UNUSED(op)) if (!ob) return OPERATOR_CANCELLED; if (ob->mode & OB_MODE_SCULPT) - brush_reset_sculpt(brush); + BKE_brush_sculpt_reset(brush); /* TODO: other modes */ return OPERATOR_FINISHED; @@ -530,6 +530,9 @@ static void ed_keymap_paint_brush_radial_control(wmKeyMap *keymap, const char *p kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0); set_brush_rc_props(kmi->ptr, paint, "strength", "use_unified_strength", flags); + kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", WKEY, KM_PRESS, 0, 0); + set_brush_rc_props(kmi->ptr, paint, "weight", "use_unified_weight", flags); + if (flags & RC_ROTATION) { kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_CTRL, 0); set_brush_rc_props(kmi->ptr, paint, "texture_slot.angle", NULL, flags); @@ -709,4 +712,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_uv_sculpt_tool_set", PKEY, KM_PRESS, 0, 0)->ptr, "tool", UV_SCULPT_TOOL_PINCH); RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_uv_sculpt_tool_set", GKEY, KM_PRESS, 0, 0)->ptr, "tool", UV_SCULPT_TOOL_GRAB); + /* paint stroke */ + keymap = paint_stroke_modal_keymap(keyconf); + WM_modalkeymap_assign(keymap, "SCULPT_OT_brush_stroke"); } diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 9fe941253f6..fe228839c47 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -146,10 +146,10 @@ static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, wmEvent *ev if (stroke->vc.obact->sculpt) { float delta[2]; - brush_jitter_pos(scene, brush, mouse_in, mouse); + BKE_brush_jitter_pos(scene, brush, mouse_in, mouse); /* XXX: meh, this is round about because - * brush_jitter_pos isn't written in the best way to + * BKE_brush_jitter_pos isn't written in the best way to * be reused here */ if (brush->flag & BRUSH_JITTER_PRESSURE) { sub_v2_v2v2(delta, mouse, mouse_in); @@ -231,11 +231,11 @@ static int paint_space_stroke(bContext *C, wmOperator *op, wmEvent *event, const float pressure = 1.0f; /* XXX mysterious :) what has 'use size' do with this here... if you don't check for it, pressure fails */ - if (brush_use_size_pressure(scene, stroke->brush)) + if (BKE_brush_use_size_pressure(scene, stroke->brush)) pressure = event_tablet_data(event, NULL); if (pressure > FLT_EPSILON) { - scale = (brush_size(scene, stroke->brush) * pressure * stroke->brush->spacing / 50.0f) / length; + scale = (BKE_brush_size_get(scene, stroke->brush) * pressure * stroke->brush->spacing / 50.0f) / length; if (scale > FLT_EPSILON) { mul_v2_fl(vec, scale); @@ -276,9 +276,30 @@ PaintStroke *paint_stroke_new(bContext *C, return stroke; } -void paint_stroke_free(PaintStroke *stroke) +void paint_stroke_data_free(struct wmOperator *op) { - MEM_freeN(stroke); + MEM_freeN(op->customdata); + op->customdata= NULL; +} + +static void stroke_done(struct bContext *C, struct wmOperator *op) +{ + struct PaintStroke *stroke = op->customdata; + + if (stroke->stroke_started && stroke->done) + stroke->done(C, stroke); + + if (stroke->timer) { + WM_event_remove_timer( + CTX_wm_manager(C), + CTX_wm_window(C), + stroke->timer); + } + + if (stroke->smooth_stroke_cursor) + WM_paint_cursor_end(CTX_wm_manager(C), stroke->smooth_stroke_cursor); + + paint_stroke_data_free(op); } /* Returns zero if the stroke dots should not be spaced, non-zero otherwise */ @@ -289,6 +310,35 @@ int paint_space_stroke_enabled(Brush *br) !ELEM4(br->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_THUMB, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SNAKE_HOOK); } +#define PAINT_STROKE_MODAL_CANCEL 1 + +/* called in paint_ops.c, on each regeneration of keymaps */ +struct wmKeyMap *paint_stroke_modal_keymap(struct wmKeyConfig *keyconf) +{ + static struct EnumPropertyItem modal_items[] = { + {PAINT_STROKE_MODAL_CANCEL, "CANCEL", 0, + "Cancel", + "Cancel and undo a stroke in progress"}, + + { 0 } + }; + + static const char *name= "Paint Stroke Modal"; + + struct wmKeyMap *keymap= WM_modalkeymap_get(keyconf, name); + + /* this function is called for each spacetype, only needs to add map once */ + if (!keymap) { + keymap= WM_modalkeymap_add(keyconf, name, modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item( + keymap, ESCKEY, KM_PRESS, KM_ANY, 0, PAINT_STROKE_MODAL_CANCEL); + } + + return keymap; +} + int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) { PaintStroke *stroke = op->customdata; @@ -319,16 +369,16 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) //ED_region_tag_redraw(ar); } - if (event->type == stroke->event_type && event->val == KM_RELEASE) { - /* exit stroke, free data */ - if (stroke->smooth_stroke_cursor) - WM_paint_cursor_end(CTX_wm_manager(C), stroke->smooth_stroke_cursor); - - if (stroke->timer) - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), stroke->timer); + /* Cancel */ + if (event->type == EVT_MODAL_MAP && event->val == PAINT_STROKE_MODAL_CANCEL) { + if (op->type->cancel) + return op->type->cancel(C, op); + else + return paint_stroke_cancel(C, op); + } - stroke->done(C, stroke); - MEM_freeN(stroke); + if (event->type == stroke->event_type && event->val == KM_RELEASE) { + stroke_done(C, op); return OPERATOR_FINISHED; } else if ((first) || @@ -377,29 +427,20 @@ int paint_stroke_exec(bContext *C, wmOperator *op) stroke->stroke_started = 1; } - RNA_BEGIN (op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") + { stroke->update_step(C, stroke, &itemptr); } RNA_END; - stroke->done(C, stroke); - - MEM_freeN(stroke); - op->customdata = NULL; + stroke_done(C, op); return OPERATOR_FINISHED; } int paint_stroke_cancel(bContext *C, wmOperator *op) { - PaintStroke *stroke = op->customdata; - - if (stroke->done) - stroke->done(C, stroke); - - MEM_freeN(stroke); - op->customdata = NULL; - + stroke_done(C, op); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/sculpt_paint/paint_undo.c b/source/blender/editors/sculpt_paint/paint_undo.c index 65bcfcb7024..8e6c87c1510 100644 --- a/source/blender/editors/sculpt_paint/paint_undo.c +++ b/source/blender/editors/sculpt_paint/paint_undo.c @@ -1,7 +1,4 @@ /* - * - * Undo system for painting and sculpting. - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -23,6 +20,7 @@ /** \file blender/editors/sculpt_paint/paint_undo.c * \ingroup edsculpt + * \brief Undo system for painting and sculpting. */ diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 89a46272a8f..fb5ddda7a3e 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -358,7 +358,7 @@ void paint_sample_color(Scene *scene, ARegion *ar, int x, int y) /* frontbuf static int brush_curve_preset_exec(bContext *C, wmOperator *op) { Brush *br = paint_brush(paint_get_active(CTX_data_scene(C))); - brush_curve_preset(br, RNA_enum_get(op->ptr, "shape")); + BKE_brush_curve_preset(br, RNA_enum_get(op->ptr, "shape")); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index bd448cc8288..37d5af553ab 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -198,8 +198,8 @@ static void do_shared_vertex_tesscol(Mesh *me) { /* if no mcol: do not do */ /* if tface: only the involved faces, otherwise all */ + const int use_face_sel = (me->editflag & ME_EDIT_PAINT_MASK); MFace *mface; - MTFace *tface; int a; short *scolmain, *scol; char *mcol; @@ -208,11 +208,10 @@ static void do_shared_vertex_tesscol(Mesh *me) scolmain = MEM_callocN(4 * sizeof(short) * me->totvert, "colmain"); - tface = me->mtface; mface = me->mface; mcol = (char *)me->mcol; for (a = me->totface; a > 0; a--, mface++, mcol += 16) { - if ((tface && tface->mode & TF_SHAREDCOL) || (me->editflag & ME_EDIT_PAINT_MASK) == 0) { + if ((use_face_sel == FALSE) || (mface->flag & ME_FACE_SEL)) { scol = scolmain + 4 * mface->v1; scol[0]++; scol[1] += mcol[1]; scol[2] += mcol[2]; scol[3] += mcol[3]; scol = scolmain + 4 * mface->v2; @@ -224,7 +223,6 @@ static void do_shared_vertex_tesscol(Mesh *me) scol[0]++; scol[1] += mcol[13]; scol[2] += mcol[14]; scol[3] += mcol[15]; } } - if (tface) tface++; } a = me->totvert; @@ -237,12 +235,11 @@ static void do_shared_vertex_tesscol(Mesh *me) } scol += 4; } - - tface = me->mtface; + mface = me->mface; mcol = (char *)me->mcol; for (a = me->totface; a > 0; a--, mface++, mcol += 16) { - if ((tface && tface->mode & TF_SHAREDCOL) || (me->editflag & ME_EDIT_PAINT_MASK) == 0) { + if ((use_face_sel == FALSE)|| (mface->flag & ME_FACE_SEL)) { scol = scolmain + 4 * mface->v1; mcol[1] = scol[1]; mcol[2] = scol[2]; mcol[3] = scol[3]; scol = scolmain + 4 * mface->v2; @@ -254,7 +251,6 @@ static void do_shared_vertex_tesscol(Mesh *me) mcol[13] = scol[1]; mcol[14] = scol[2]; mcol[15] = scol[3]; } } - if (tface) tface++; } MEM_freeN(scolmain); @@ -262,12 +258,12 @@ static void do_shared_vertex_tesscol(Mesh *me) void do_shared_vertexcol(Mesh *me, int do_tessface) { + const int use_face_sel = (me->editflag & ME_EDIT_PAINT_MASK); MLoop *ml = me->mloop; MLoopCol *lcol = me->mloopcol; - MTexPoly *mtp = me->mtpoly; - MPoly *mp = me->mpoly; - float (*scol)[5]; - int i, has_shared = 0; + MPoly *mp; + float (*scol)[4]; + int i, j, has_shared = 0; /* if no mloopcol: do not do */ /* if mtexpoly: only the involved faces, otherwise all */ @@ -276,42 +272,37 @@ void do_shared_vertexcol(Mesh *me, int do_tessface) scol = MEM_callocN(sizeof(float) * me->totvert * 5, "scol"); - for (i = 0; i < me->totloop; i++, ml++, lcol++) { - if (i >= mp->loopstart + mp->totloop) { - mp++; - if (mtp) mtp++; + for (i = 0, mp = me->mpoly; i < me->totpoly; i++, mp++) { + if ((use_face_sel == FALSE) || (mp->flag & ME_FACE_SEL)) { + ml = me->mloop + mp->loopstart; + lcol = me->mloopcol + mp->loopstart; + for (j = 0; j < mp->totloop; j++, ml++, lcol++) { + scol[ml->v][0] += lcol->r; + scol[ml->v][1] += lcol->g; + scol[ml->v][2] += lcol->b; + scol[ml->v][3] += 1.0f; + has_shared = 1; + } } - - if (!(mtp && (mtp->mode & TF_SHAREDCOL)) && (me->editflag & ME_EDIT_PAINT_MASK) != 0) - continue; - - scol[ml->v][0] += lcol->r; - scol[ml->v][1] += lcol->g; - scol[ml->v][2] += lcol->b; - scol[ml->v][3] += lcol->a; - scol[ml->v][4] += 1.0; - has_shared = 1; } - + if (has_shared) { for (i = 0; i < me->totvert; i++) { - if (!scol[i][4]) continue; - - scol[i][0] /= scol[i][4]; - scol[i][1] /= scol[i][4]; - scol[i][2] /= scol[i][4]; - scol[i][3] /= scol[i][4]; + if (scol[i][3] != 0.0f) { + mul_v3_fl(scol[i], 1.0f / scol[i][3]); + } } - - ml = me->mloop; - lcol = me->mloopcol; - for (i = 0; i < me->totloop; i++, ml++, lcol++) { - if (!scol[ml->v][4]) continue; - lcol->r = scol[ml->v][0]; - lcol->g = scol[ml->v][1]; - lcol->b = scol[ml->v][2]; - lcol->a = scol[ml->v][3]; + for (i = 0, mp = me->mpoly; i < me->totpoly; i++, mp++) { + if ((use_face_sel == FALSE) || (mp->flag & ME_FACE_SEL)) { + ml = me->mloop + mp->loopstart; + lcol = me->mloopcol + mp->loopstart; + for (j = 0; j < mp->totloop; j++, ml++, lcol++) { + lcol->r = scol[ml->v][0]; + lcol->g = scol[ml->v][1]; + lcol->b = scol[ml->v][2]; + } + } } } @@ -868,7 +859,7 @@ static float calc_vp_strength_dl(VPaint *vp, ViewContext *vc, const float *vert_ } else { const float dist = sqrtf(dist_squared); - return brush_curve_strength_clamp(brush, dist, brush_size_pressure); + return BKE_brush_curve_strength_clamp(brush, dist, brush_size_pressure); } } @@ -1034,7 +1025,9 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, wmEvent *event) else { MPoly *mp = ((MPoly *)me->mpoly) + (index - 1); const int vgroup_active = vc.obact->actdef - 1; + Scene *scene = vc.scene; ToolSettings *ts = vc.scene->toolsettings; + Brush *brush = paint_brush(&ts->wpaint->paint); float mval_f[2]; int v_idx_best = -1; int fidx; @@ -1057,7 +1050,8 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, wmEvent *event) } while (fidx--); if (v_idx_best != -1) { /* should always be valid */ - ts->vgroup_weight = defvert_find_weight(&me->dvert[v_idx_best], vgroup_active); + float vgroup_weight = defvert_find_weight(&me->dvert[v_idx_best], vgroup_active); + BKE_brush_weight_set(scene, brush, vgroup_weight); change = TRUE; } } @@ -1647,7 +1641,7 @@ typedef struct WeightPaintInfo { char do_multipaint; char do_auto_normalize; - float brush_alpha_value; /* result of brush_alpha() */ + float brush_alpha_value; /* result of BKE_brush_alpha_get() */ } WeightPaintInfo; /* fresh start to make multi-paint and locking modular */ @@ -2250,9 +2244,9 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P char *defbase_sel; const float pressure = RNA_float_get(itemptr, "pressure"); - const float brush_size_pressure = brush_size(scene, brush) * (brush_use_size_pressure(scene, brush) ? pressure : 1.0f); - const float brush_alpha_value = brush_alpha(scene, brush); - const float brush_alpha_pressure = brush_alpha_value * (brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f); + const float brush_size_pressure = BKE_brush_size_get(scene, brush) * (BKE_brush_use_size_pressure(scene, brush) ? pressure : 1.0f); + const float brush_alpha_value = BKE_brush_alpha_get(scene, brush); + const float brush_alpha_pressure = brush_alpha_value * (BKE_brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f); /* intentionally don't initialize as NULL, make sure we initialize all members below */ WeightPaintInfo wpi; @@ -2348,7 +2342,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P if (brush->vertexpaint_tool == PAINT_BLEND_BLUR) paintweight = 0.0f; else - paintweight = ts->vgroup_weight; + paintweight = BKE_brush_weight_get(scene, brush); for (index = 0; index < totindex; index++) { if (indexar[index] && indexar[index] <= me->totpoly) { @@ -2427,7 +2421,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P ED_region_tag_redraw(vc->ar); } -static void wpaint_stroke_done(bContext *C, struct PaintStroke *stroke) +static void wpaint_stroke_done(const bContext *C, struct PaintStroke *stroke) { ToolSettings *ts = CTX_data_tool_settings(C); Object *ob = CTX_data_active_object(C); @@ -2514,8 +2508,11 @@ static int weight_paint_set_exec(bContext *C, wmOperator *UNUSED(op)) { struct Scene *scene = CTX_data_scene(C); Object *obact = CTX_data_active_object(C); + ToolSettings *ts = CTX_data_tool_settings(C); + Brush *brush = paint_brush(&ts->wpaint->paint); + float vgroup_weight = BKE_brush_weight_get(scene, brush); - wpaint_fill(scene->toolsettings->wpaint, obact, scene->toolsettings->vgroup_weight); + wpaint_fill(scene->toolsettings->wpaint, obact, vgroup_weight); ED_region_tag_redraw(CTX_wm_region(C)); /* XXX - should redraw all 3D views */ return OPERATOR_FINISHED; } @@ -2873,8 +2870,8 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P float mval[2]; const float pressure = RNA_float_get(itemptr, "pressure"); - const float brush_size_pressure = brush_size(scene, brush) * (brush_use_size_pressure(scene, brush) ? pressure : 1.0f); - const float brush_alpha_pressure = brush_alpha(scene, brush) * (brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f); + const float brush_size_pressure = BKE_brush_size_get(scene, brush) * (BKE_brush_use_size_pressure(scene, brush) ? pressure : 1.0f); + const float brush_alpha_pressure = BKE_brush_alpha_get(scene, brush) * (BKE_brush_use_alpha_pressure(scene, brush) ? pressure : 1.0f); RNA_float_get_array(itemptr, "mouse", mval); @@ -2948,7 +2945,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P } } -static void vpaint_stroke_done(bContext *C, struct PaintStroke *stroke) +static void vpaint_stroke_done(const bContext *C, struct PaintStroke *stroke) { ToolSettings *ts = CTX_data_tool_settings(C); struct VPaintData *vpd = paint_stroke_mode_data(stroke); diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 8d2dfc8dbfa..fa560dc138c 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -101,6 +101,26 @@ void ED_sculpt_force_update(bContext *C) multires_force_update(ob); } +float *ED_sculpt_get_last_stroke(struct Object *ob) +{ + return (ob && ob->sculpt && ob->sculpt->last_stroke_valid) ? ob->sculpt->last_stroke : NULL; +} + +int ED_sculpt_minmax(bContext *C, float *min, float *max) +{ + Object *ob= CTX_data_active_object(C); + + if (ob && ob->sculpt && ob->sculpt->last_stroke_valid) { + copy_v3_v3(min, ob->sculpt->last_stroke); + copy_v3_v3(max, ob->sculpt->last_stroke); + + return 1; + } + else { + return 0; + } +} + /* Sculpt mode handles multires differently from regular meshes, but only if * it's the last modifier on the stack and it is not on the first level */ struct MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob) @@ -244,6 +264,54 @@ typedef struct StrokeCache { rcti previous_r; /* previous redraw rectangle */ } StrokeCache; + +/*** paint mesh ***/ + +static void paint_mesh_restore_co(Sculpt *sd, SculptSession *ss) +{ + StrokeCache *cache = ss->cache; + int i; + + PBVHNode **nodes; + int n, totnode; + +#ifndef _OPENMP + (void)sd; /* quied unused warning */ +#endif + + BLI_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + + #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP) + for (n = 0; n < totnode; n++) { + SculptUndoNode *unode; + + unode = sculpt_undo_get_node(nodes[n]); + if (unode) { + PBVHVertexIter vd; + + BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) { + copy_v3_v3(vd.co, unode->co[vd.i]); + if (vd.no) copy_v3_v3_short(vd.no, unode->no[vd.i]); + else normal_short_to_float_v3(vd.fno, unode->no[vd.i]); + + if (vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } + } + + if (ss->face_normals) { + float *fn = ss->face_normals; + for (i = 0; i < ss->totpoly; ++i, fn += 3) + copy_v3_v3(fn, cache->face_norms[i]); + } + + if (nodes) + MEM_freeN(nodes); +} + /*** BVH Tree ***/ /* Get a screen-space rectangle of the modified area */ @@ -357,11 +425,11 @@ static int sculpt_brush_test_cube(SculptBrushTest *test, float co[3], float loca local_co[2] = fabs(local_co[2]); if (local_co[0] <= side && local_co[1] <= side && local_co[2] <= side) { - float p = 4; + float p = 4.0f; test->dist = ((powf(local_co[0], p) + powf(local_co[1], p) + - powf(local_co[2], p)) / pow(side, p)); + powf(local_co[2], p)) / powf(side, p)); return 1; } @@ -437,7 +505,7 @@ static float overlapped_curve(Brush *br, float x) xx = fabs(x0 + i * h); if (xx < 1.0f) - sum += brush_curve_strength(br, xx, 1); + sum += BKE_brush_curve_strength(br, xx, 1); } return sum; @@ -550,10 +618,10 @@ static float brush_strength(Sculpt *sd, StrokeCache *cache, float feather) Brush *brush = paint_brush(&sd->paint); /* Primary strength input; square it to make lower values more sensitive */ - const float root_alpha = brush_alpha(scene, brush); + const float root_alpha = BKE_brush_alpha_get(scene, brush); float alpha = root_alpha * root_alpha; float dir = brush->flag & BRUSH_DIR_IN ? -1 : 1; - float pressure = brush_use_alpha_pressure(scene, brush) ? cache->pressure : 1; + float pressure = BKE_brush_use_alpha_pressure(scene, brush) ? cache->pressure : 1; float pen_flip = cache->pen_flip ? -1 : 1; float invert = cache->invert ? -1 : 1; float accum = integrate_overlap(brush); @@ -684,7 +752,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3], /* leave the coordinates relative to the screen */ /* use unadjusted size for tiled mode */ - radius = brush_size(ss->cache->vc->scene, br); + radius = BKE_brush_size_get(ss->cache->vc->scene, br); x = point_2d[0]; y = point_2d[1]; @@ -724,7 +792,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3], avg += br->texture_sample_bias; /* Falloff curve */ - avg *= brush_curve_strength(br, len, ss->cache->radius); + avg *= BKE_brush_curve_strength(br, len, ss->cache->radius); avg *= frontface(br, sculpt_normal, vno, fno); @@ -1182,8 +1250,8 @@ static void do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod /* we divide out the squared alpha and multiply by the squared crease to give us the pinch strength */ - if (brush_alpha(scene, brush) > 0.0f) - crease_correction = brush->crease_pinch_factor * brush->crease_pinch_factor / (brush_alpha(scene, brush) * brush_alpha(scene, brush)); + if (BKE_brush_alpha_get(scene, brush) > 0.0f) + crease_correction = brush->crease_pinch_factor * brush->crease_pinch_factor / (BKE_brush_alpha_get(scene, brush) * BKE_brush_alpha_get(scene, brush)); else crease_correction = brush->crease_pinch_factor * brush->crease_pinch_factor; @@ -2652,7 +2720,7 @@ static void do_symmetrical_brush_actions(Sculpt *sd, Object *ob) static void sculpt_update_tex(const Scene *scene, Sculpt *sd, SculptSession *ss) { Brush *brush = paint_brush(&sd->paint); - const int radius = brush_size(scene, brush); + const int radius = BKE_brush_size_get(scene, brush); if (ss->texcache) { MEM_freeN(ss->texcache); @@ -2662,7 +2730,7 @@ static void sculpt_update_tex(const Scene *scene, Sculpt *sd, SculptSession *ss) /* Need to allocate a bigger buffer for bigger brush size */ ss->texcache_side = 2 * radius; if (!ss->texcache || ss->texcache_side > ss->texcache_actual) { - ss->texcache = brush_gen_texture_cache(brush, radius); + ss->texcache = BKE_brush_gen_texture_cache(brush, radius); ss->texcache_actual = ss->texcache_side; } } @@ -3062,19 +3130,19 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, sd->pressure_value = cache->pressure; cache->previous_pixel_radius = cache->pixel_radius; - cache->pixel_radius = brush_size(scene, brush); + cache->pixel_radius = BKE_brush_size_get(scene, brush); if (cache->first_time) { - if (!brush_use_locked_size(scene, brush)) { - cache->initial_radius = paint_calc_object_space_radius(cache->vc, cache->true_location, brush_size(scene, brush)); - brush_set_unprojected_radius(scene, brush, cache->initial_radius); + if (!BKE_brush_use_locked_size(scene, brush)) { + cache->initial_radius = paint_calc_object_space_radius(cache->vc, cache->true_location, BKE_brush_size_get(scene, brush)); + BKE_brush_unprojected_radius_set(scene, brush, cache->initial_radius); } else { - cache->initial_radius = brush_unprojected_radius(scene, brush); + cache->initial_radius = BKE_brush_unprojected_radius_get(scene, brush); } } - if (brush_use_size_pressure(scene, brush)) { + if (BKE_brush_use_size_pressure(scene, brush)) { cache->pixel_radius *= cache->pressure; cache->radius = cache->initial_radius * cache->pressure; } @@ -3173,7 +3241,7 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, sd->special_rotation = cache->special_rotation; } -static void sculpt_stroke_modifiers_check(bContext *C, Object *ob) +static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob) { SculptSession *ss = ob->sculpt; @@ -3306,46 +3374,10 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss) /* Restore the mesh before continuing with anchored stroke */ if ((brush->flag & BRUSH_ANCHORED) || (brush->sculpt_tool == SCULPT_TOOL_GRAB && - brush_use_size_pressure(ss->cache->vc->scene, brush)) || + BKE_brush_use_size_pressure(ss->cache->vc->scene, brush)) || (brush->flag & BRUSH_RESTORE_MESH)) { - StrokeCache *cache = ss->cache; - int i; - - PBVHNode **nodes; - int n, totnode; - - BLI_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); - - #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP) - for (n = 0; n < totnode; n++) { - SculptUndoNode *unode; - - unode = sculpt_undo_get_node(nodes[n]); - if (unode) { - PBVHVertexIter vd; - - BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) { - copy_v3_v3(vd.co, unode->co[vd.i]); - if (vd.no) copy_v3_v3_short(vd.no, unode->no[vd.i]); - else normal_short_to_float_v3(vd.fno, unode->no[vd.i]); - - if (vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; - } - BLI_pbvh_vertex_iter_end; - - BLI_pbvh_node_mark_update(nodes[n]); - } - } - - if (ss->face_normals) { - float *fn = ss->face_normals; - for (i = 0; i < ss->totpoly; ++i, fn += 3) - copy_v3_v3(fn, cache->face_norms[i]); - } - - if (nodes) - MEM_freeN(nodes); + paint_mesh_restore_co(sd, ss); } } @@ -3455,7 +3487,7 @@ static void sculpt_brush_exit_tex(Sculpt *sd) ntreeTexEndExecTree(mtex->tex->nodetree->execdata, 1); } -static void sculpt_stroke_done(bContext *C, struct PaintStroke *UNUSED(stroke)) +static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(stroke)) { Object *ob = CTX_data_active_object(C); SculptSession *ss = ob->sculpt; @@ -3482,6 +3514,11 @@ static void sculpt_stroke_done(bContext *C, struct PaintStroke *UNUSED(stroke)) } } + /* update last stroke position */ + ob->sculpt->last_stroke_valid= 1; + copy_v3_v3(ob->sculpt->last_stroke, ss->cache->true_location); + mul_m4_v3(ob->obmat, ob->sculpt->last_stroke); + sculpt_cache_free(ss->cache); ss->cache = NULL; @@ -3526,7 +3563,7 @@ static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, wmEvent *even "ignore_background_click"); if (ignore_background_click && !over_mesh(C, op, event->x, event->y)) { - paint_stroke_free(stroke); + paint_stroke_data_free(op); return OPERATOR_PASS_THROUGH; } @@ -3558,6 +3595,10 @@ static int sculpt_brush_stroke_cancel(bContext *C, wmOperator *op) SculptSession *ss = ob->sculpt; Sculpt *sd = CTX_data_tool_settings(C)->sculpt; + if (ss->cache) { + paint_mesh_restore_co(sd, ss); + } + paint_stroke_cancel(C, op); if (ss->cache) { diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index 4545c498fed..95441600d77 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -205,10 +205,10 @@ void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; - strength = alpha * brush_curve_strength(brush, sqrt(dist), radius_root); + strength = alpha * BKE_brush_curve_strength(brush, sqrt(dist), radius_root); - sculptdata->uv[i].uv[0] = (1.0 - strength) * sculptdata->uv[i].uv[0] + strength * (tmp_uvdata[i].p[0] - 0.5f * (tmp_uvdata[i].b[0] + tmp_uvdata[i].sum_b[0] / tmp_uvdata[i].ncounter)); - sculptdata->uv[i].uv[1] = (1.0 - strength) * sculptdata->uv[i].uv[1] + strength * (tmp_uvdata[i].p[1] - 0.5f * (tmp_uvdata[i].b[1] + tmp_uvdata[i].sum_b[1] / tmp_uvdata[i].ncounter)); + sculptdata->uv[i].uv[0] = (1.0f - strength) * sculptdata->uv[i].uv[0] + strength * (tmp_uvdata[i].p[0] - 0.5f * (tmp_uvdata[i].b[0] + tmp_uvdata[i].sum_b[0] / tmp_uvdata[i].ncounter)); + sculptdata->uv[i].uv[1] = (1.0f - strength) * sculptdata->uv[i].uv[1] + strength * (tmp_uvdata[i].p[1] - 0.5f * (tmp_uvdata[i].b[1] + tmp_uvdata[i].sum_b[1] / tmp_uvdata[i].ncounter)); for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; @@ -269,10 +269,10 @@ static void laplacian_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *scul if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; - strength = alpha * brush_curve_strength(brush, sqrt(dist), radius_root); + strength = alpha * BKE_brush_curve_strength(brush, sqrt(dist), radius_root); - sculptdata->uv[i].uv[0] = (1.0 - strength) * sculptdata->uv[i].uv[0] + strength * tmp_uvdata[i].p[0]; - sculptdata->uv[i].uv[1] = (1.0 - strength) * sculptdata->uv[i].uv[1] + strength * tmp_uvdata[i].p[1]; + sculptdata->uv[i].uv[0] = (1.0f - strength) * sculptdata->uv[i].uv[0] + strength * tmp_uvdata[i].p[0]; + sculptdata->uv[i].uv[1] = (1.0f - strength) * sculptdata->uv[i].uv[1] + strength * tmp_uvdata[i].p[1]; for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; @@ -311,14 +311,14 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, ToolSettings *toolsettings = CTX_data_tool_settings(C); tool = sculptdata->tool; invert = sculptdata->invert ? -1 : 1; - alpha = brush_alpha(scene, brush); + alpha = BKE_brush_alpha_get(scene, brush); UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]); sima = CTX_wm_space_image(C); ED_space_image_size(sima, &width, &height); ED_space_image_zoom(sima, ar, &zoomx, &zoomy); - radius = brush_size(scene, brush) / (width * zoomx); + radius = BKE_brush_size_get(scene, brush) / (width * zoomx); aspectRatio = width / (float)height; /* We will compare squares to save some computation */ @@ -344,11 +344,11 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; - strength = alpha * brush_curve_strength(brush, sqrt(dist), radius_root); + strength = alpha * BKE_brush_curve_strength(brush, sqrt(dist), radius_root); normalize_v2(diff); - sculptdata->uv[i].uv[0] -= strength * diff[0] * 0.001; - sculptdata->uv[i].uv[1] -= strength * diff[1] * 0.001; + sculptdata->uv[i].uv[0] -= strength * diff[0] * 0.001f; + sculptdata->uv[i].uv[1] -= strength * diff[1] * 0.001f; for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; @@ -679,9 +679,9 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent float alpha, zoomx, zoomy; Brush *brush = paint_brush(sculptdata->uvsculpt); - alpha = brush_alpha(scene, brush); + alpha = BKE_brush_alpha_get(scene, brush); - radius = brush_size(scene, brush); + radius = BKE_brush_size_get(scene, brush); sima = CTX_wm_space_image(C); ED_space_image_size(sima, &width, &height); ED_space_image_zoom(sima, ar, &zoomx, &zoomy); @@ -715,7 +715,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent diff[1] /= aspectRatio; if ((dist = dot_v2v2(diff, diff)) <= radius) { float strength; - strength = alpha * brush_curve_strength(brush, sqrt(dist), radius_root); + strength = alpha * BKE_brush_curve_strength(brush, sqrt(dist), radius_root); data->initial_stroke->initialSelection[counter].uv = i; data->initial_stroke->initialSelection[counter].strength = strength; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index 73dfde8fd6f..24bc01989fc 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -221,7 +221,8 @@ static int sound_update_animation_flags_exec(bContext *C, wmOperator *UNUSED(op) struct FCurve* fcu; char driven; - SEQ_BEGIN (scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) + { fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "volume", 0, &driven); if (fcu || driven) seq->flag |= SEQ_AUDIO_VOLUME_ANIMATED; @@ -343,12 +344,12 @@ static int sound_mixdown_exec(bContext *C, wmOperator *op) BLI_strncpy(filename, path, sizeof(filename)); BLI_path_abs(filename, bmain->name); - if(split) + if (split) result = AUD_mixdown_per_channel(scene->sound_scene, SFRA * specs.rate / FPS, (EFRA - SFRA) * specs.rate / FPS, - accuracy, filename, specs, container, codec, bitrate); + accuracy, filename, specs, container, codec, bitrate); else result = AUD_mixdown(scene->sound_scene, SFRA * specs.rate / FPS, (EFRA - SFRA) * specs.rate / FPS, - accuracy, filename, specs, container, codec, bitrate); + accuracy, filename, specs, container, codec, bitrate); if (result) { BKE_report(op->reports, RPT_ERROR, result); diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index b8c310f8477..a44eca17dfd 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -121,7 +121,7 @@ static int act_new_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_new (wmOperatorType *ot) +void ACTION_OT_new(wmOperatorType *ot) { /* identifiers */ ot->name = "New Action"; @@ -204,7 +204,7 @@ static int act_markers_make_local_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_markers_make_local (wmOperatorType *ot) +void ACTION_OT_markers_make_local(wmOperatorType *ot) { /* identifiers */ ot->name = "Make Markers Local"; @@ -319,7 +319,7 @@ static int actkeys_previewrange_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_previewrange_set (wmOperatorType *ot) +void ACTION_OT_previewrange_set(wmOperatorType *ot) { /* identifiers */ ot->name = "Auto-Set Preview Range"; @@ -381,7 +381,7 @@ static int actkeys_viewsel_exec(bContext *C, wmOperator *UNUSED(op)) return actkeys_viewall(C, TRUE); } -void ACTION_OT_view_all (wmOperatorType *ot) +void ACTION_OT_view_all(wmOperatorType *ot) { /* identifiers */ ot->name = "View All"; @@ -396,7 +396,7 @@ void ACTION_OT_view_all (wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } -void ACTION_OT_view_selected (wmOperatorType *ot) +void ACTION_OT_view_selected(wmOperatorType *ot) { /* identifiers */ ot->name = "View Selected"; @@ -484,7 +484,7 @@ static int actkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_copy (wmOperatorType *ot) +void ACTION_OT_copy(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy Keyframes"; @@ -535,7 +535,7 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_paste (wmOperatorType *ot) +void ACTION_OT_paste(wmOperatorType *ot) { /* identifiers */ ot->name = "Paste Keyframes"; @@ -636,7 +636,7 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_keyframe_insert (wmOperatorType *ot) +void ACTION_OT_keyframe_insert(wmOperatorType *ot) { /* identifiers */ ot->name = "Insert Keyframes"; @@ -712,7 +712,7 @@ static int actkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED return OPERATOR_FINISHED; } -void ACTION_OT_duplicate (wmOperatorType *ot) +void ACTION_OT_duplicate(wmOperatorType *ot) { /* identifiers */ ot->name = "Duplicate Keyframes"; @@ -787,7 +787,7 @@ static int actkeys_delete_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_delete (wmOperatorType *ot) +void ACTION_OT_delete(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Keyframes"; @@ -851,7 +851,7 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_clean (wmOperatorType *ot) +void ACTION_OT_clean(wmOperatorType *ot) { /* identifiers */ ot->name = "Clean Keyframes"; @@ -915,7 +915,7 @@ static int actkeys_sample_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_sample (wmOperatorType *ot) +void ACTION_OT_sample(wmOperatorType *ot) { /* identifiers */ ot->name = "Sample Keyframes"; @@ -1025,7 +1025,7 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_extrapolation_type (wmOperatorType *ot) +void ACTION_OT_extrapolation_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Extrapolation"; @@ -1096,7 +1096,7 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_interpolation_type (wmOperatorType *ot) +void ACTION_OT_interpolation_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Interpolation"; @@ -1176,7 +1176,7 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_handle_type (wmOperatorType *ot) +void ACTION_OT_handle_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Handle Type"; @@ -1247,7 +1247,7 @@ static int actkeys_keytype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_keyframe_type (wmOperatorType *ot) +void ACTION_OT_keyframe_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Type"; @@ -1315,7 +1315,7 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_frame_jump (wmOperatorType *ot) +void ACTION_OT_frame_jump(wmOperatorType *ot) { /* identifiers */ ot->name = "Jump to Frame"; @@ -1415,7 +1415,7 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_snap (wmOperatorType *ot) +void ACTION_OT_snap(wmOperatorType *ot) { /* identifiers */ ot->name = "Snap Keys"; @@ -1529,7 +1529,7 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_mirror (wmOperatorType *ot) +void ACTION_OT_mirror(wmOperatorType *ot) { /* identifiers */ ot->name = "Mirror Keys"; diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index f76f5f6523e..a28f8ee1b99 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -158,7 +158,7 @@ static int actkeys_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_select_all_toggle (wmOperatorType *ot) +void ACTION_OT_select_all_toggle(wmOperatorType *ot) { /* identifiers */ ot->name = "Select All"; @@ -524,7 +524,7 @@ static int actkeys_columnselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACTION_OT_select_column (wmOperatorType *ot) +void ACTION_OT_select_column(wmOperatorType *ot) { /* identifiers */ ot->name = "Select All"; @@ -582,7 +582,7 @@ static int actkeys_select_linked_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_select_linked (wmOperatorType *ot) +void ACTION_OT_select_linked(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Linked"; @@ -659,7 +659,7 @@ static int actkeys_select_more_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_select_more (wmOperatorType *ot) +void ACTION_OT_select_more(wmOperatorType *ot) { /* identifiers */ ot->name = "Select More"; @@ -693,7 +693,7 @@ static int actkeys_select_less_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void ACTION_OT_select_less (wmOperatorType *ot) +void ACTION_OT_select_less(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Less"; @@ -860,7 +860,7 @@ static int actkeys_select_leftright_invoke (bContext *C, wmOperator *op, wmEvent return actkeys_select_leftright_exec(C, op); } -void ACTION_OT_select_leftright (wmOperatorType *ot) +void ACTION_OT_select_leftright(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Left/Right"; @@ -1174,7 +1174,7 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void ACTION_OT_clickselect (wmOperatorType *ot) +void ACTION_OT_clickselect(wmOperatorType *ot) { /* identifiers */ ot->name = "Mouse Select Keys"; diff --git a/source/blender/editors/space_clip/CMakeLists.txt b/source/blender/editors/space_clip/CMakeLists.txt index 4f9819e8e77..ec5e81e4b2c 100644 --- a/source/blender/editors/space_clip/CMakeLists.txt +++ b/source/blender/editors/space_clip/CMakeLists.txt @@ -31,6 +31,7 @@ set(INC ../../makesdna ../../makesrna ../../windowmanager + ../../gpu ../../../../intern/guardedalloc ${GLEW_INCLUDE_PATH} ) @@ -39,15 +40,17 @@ set(INC_SYS ) set(SRC - space_clip.c + clip_buttons.c + clip_dopesheet_draw.c + clip_dopesheet_ops.c clip_draw.c - clip_toolbar.c - clip_ops.c - clip_graph_ops.c - clip_graph_draw.c clip_editor.c - clip_buttons.c + clip_graph_draw.c + clip_graph_ops.c + clip_ops.c + clip_toolbar.c clip_utils.c + space_clip.c tracking_ops.c clip_intern.h diff --git a/source/blender/editors/space_clip/SConscript b/source/blender/editors/space_clip/SConscript index 70331b0ec4a..c9c82aea68e 100644 --- a/source/blender/editors/space_clip/SConscript +++ b/source/blender/editors/space_clip/SConscript @@ -4,6 +4,6 @@ Import ('env') sources = env.Glob('*.c') defs = [] incs = '../include ../../blenkernel ../../blenloader ../../blenfont ../../blenlib ../../imbuf ../../makesdna' -incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc #/extern/glew/include' +incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc #/extern/glew/include ../../gpu' env.BlenderLib ( 'bf_editors_space_clip', sources, Split(incs), defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_clip/clip_buttons.c b/source/blender/editors/space_clip/clip_buttons.c index eabd64bdc4f..5761a285d72 100644 --- a/source/blender/editors/space_clip/clip_buttons.c +++ b/source/blender/editors/space_clip/clip_buttons.c @@ -63,6 +63,13 @@ /* Panels */ +static int clip_grease_pencil_panel_poll(const bContext *C, PanelType *UNUSED(pt)) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + return sc->view == SC_VIEW_CLIP; +} + void ED_clip_buttons_register(ARegionType *art) { PanelType *pt; @@ -72,6 +79,7 @@ void ED_clip_buttons_register(ARegionType *art) strcpy(pt->label, "Grease Pencil"); pt->draw = gpencil_panel_standard; pt->flag |= PNL_DEFAULT_CLOSED; + pt->poll = clip_grease_pencil_panel_poll; BLI_addtail(&art->paneltypes, pt); } @@ -363,9 +371,9 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P block = uiLayoutGetBlock(layout); if (cb->marker_flag & MARKER_DISABLED) - tip= "Marker is disabled at current frame"; + tip = "Marker is disabled at current frame"; else - tip= "Marker is enabled at current frame"; + tip = "Marker is enabled at current frame"; bt = uiDefIconButBitI(block, TOGN, MARKER_DISABLED, 0, ICON_RESTRICT_VIEW_OFF, 0, 0, 20, 20, &cb->marker_flag, 0, 0, 1, 0, tip); uiButSetNFunc(bt, marker_update_cb, cb, NULL); @@ -385,7 +393,7 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P return; } - step= 100; + step = 100; digits = 2; sub_v2_v2v2(pat_dim, track->pat_max, track->pat_min); @@ -405,20 +413,20 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P cb->marker_flag = marker->flag; - block= uiLayoutAbsoluteBlock(layout); + block = uiLayoutAbsoluteBlock(layout); uiBlockSetHandleFunc(block, marker_block_handler, cb); uiBlockSetNFunc(block, marker_update_cb, cb, NULL); if (cb->marker_flag & MARKER_DISABLED) - tip= "Marker is disabled at current frame"; + tip = "Marker is disabled at current frame"; else - tip= "Marker is enabled at current frame"; + tip = "Marker is enabled at current frame"; uiDefButBitI(block, OPTIONN, MARKER_DISABLED, B_MARKER_FLAG, "Enabled", 10, 190, 145, 19, &cb->marker_flag, 0, 0, 0, 0, tip); col = uiLayoutColumn(layout, 1); - uiLayoutSetActive(col, (cb->marker_flag&MARKER_DISABLED)==0); + uiLayoutSetActive(col, (cb->marker_flag & MARKER_DISABLED) == 0); block = uiLayoutAbsoluteBlock(col); uiBlockBeginAlign(block); diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c new file mode 100644 index 00000000000..574eb5b2570 --- /dev/null +++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c @@ -0,0 +1,356 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_clip/clip_graph_draw.c + * \ingroup spclip + */ + +#include "DNA_movieclip_types.h" +#include "DNA_object_types.h" /* SELECT */ +#include "DNA_scene_types.h" + +#include "MEM_guardedalloc.h" + +#include "BKE_context.h" +#include "BKE_movieclip.h" +#include "BKE_tracking.h" + +#include "BLI_utildefines.h" +#include "BLI_math.h" +#include "BLI_string.h" +#include "BLI_listbase.h" +#include "BLI_math.h" + +#include "ED_screen.h" +#include "ED_clip.h" + +#include "BIF_gl.h" +#include "BIF_glutil.h" + +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "BLF_api.h" + +#include "RNA_access.h" + +#include "clip_intern.h" // own include + +static void track_channel_color(MovieTrackingTrack *track, float default_color[3], float color[3]) +{ + if (track->flag & TRACK_CUSTOMCOLOR) { + float bg[3]; + UI_GetThemeColor3fv(TH_HEADER, bg); + + interp_v3_v3v3(color, track->color, bg, 0.5); + } + else { + if (default_color) + copy_v3_v3(color, default_color); + else + UI_GetThemeColor3fv(TH_HEADER, color); + } +} + +static void draw_keyframe_shape(float x, float y, float xscale, float yscale, short sel, float alpha) +{ + /* coordinates for diamond shape */ + static const float _unit_diamond_shape[4][2] = { + {0.0f, 1.0f}, /* top vert */ + {1.0f, 0.0f}, /* mid-right */ + {0.0f, -1.0f}, /* bottom vert */ + {-1.0f, 0.0f} /* mid-left */ + }; + static GLuint displist1 = 0; + static GLuint displist2 = 0; + int hsize = STRIP_HEIGHT_HALF; + + /* initialize 2 display lists for diamond shape - one empty, one filled */ + if (displist1 == 0) { + displist1 = glGenLists(1); + glNewList(displist1, GL_COMPILE); + + glBegin(GL_LINE_LOOP); + glVertex2fv(_unit_diamond_shape[0]); + glVertex2fv(_unit_diamond_shape[1]); + glVertex2fv(_unit_diamond_shape[2]); + glVertex2fv(_unit_diamond_shape[3]); + glEnd(); + glEndList(); + } + if (displist2 == 0) { + displist2 = glGenLists(1); + glNewList(displist2, GL_COMPILE); + + glBegin(GL_QUADS); + glVertex2fv(_unit_diamond_shape[0]); + glVertex2fv(_unit_diamond_shape[1]); + glVertex2fv(_unit_diamond_shape[2]); + glVertex2fv(_unit_diamond_shape[3]); + glEnd(); + glEndList(); + } + + glPushMatrix(); + + /* adjust view transform before starting */ + glTranslatef(x, y, 0.0f); + glScalef(1.0f/xscale*hsize, 1.0f/yscale*hsize, 1.0f); + + /* anti-aliased lines for more consistent appearance */ + glEnable(GL_LINE_SMOOTH); + + if (sel) + UI_ThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255*(1.0f-alpha)); + else + glColor4f(0.91f, 0.91f, 0.91f, alpha); + + glCallList(displist2); + + /* exterior - black frame */ + glColor4f(0.0f, 0.0f, 0.0f, alpha); + glCallList(displist1); + + glDisable(GL_LINE_SMOOTH); + + /* restore view transform */ + glPopMatrix(); +} + +void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) +{ + MovieClip *clip = ED_space_clip(sc); + View2D *v2d = &ar->v2d; + + /* frame range */ + clip_draw_sfra_efra(v2d, scene); + + if (clip) { + MovieTracking *tracking = &clip->tracking; + MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; + MovieTrackingDopesheetChannel *channel; + float y, xscale, yscale; + float strip[4], selected_strip[4]; + + y = (float) CHANNEL_FIRST; + + UI_view2d_getscale(v2d, &xscale, &yscale); + + /* setup colors for regular and selected strips */ + UI_GetThemeColor3fv(TH_STRIP, strip); + UI_GetThemeColor3fv(TH_STRIP_SELECT, selected_strip); + + strip[3] = 0.5f; + selected_strip[3] = 1.0f; + + glEnable(GL_BLEND); + + for (channel = dopesheet->channels.first; channel; channel = channel->next) { + float yminc = (float) (y - CHANNEL_HEIGHT_HALF); + float ymaxc = (float) (y + CHANNEL_HEIGHT_HALF); + + /* check if visible */ + if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || + IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax)) + { + MovieTrackingTrack *track = channel->track; + float alpha; + int i, sel = track->flag & TRACK_DOPE_SEL; + + /* selection background */ + if (sel) { + float color[4] = {0.0f, 0.0f, 0.0f, 0.3f}; + float default_color[4] = {0.8f, 0.93f, 0.8f, 0.3f}; + + track_channel_color(track, default_color, color); + glColor4fv(color); + + glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, + v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF); + } + + alpha = (track->flag & TRACK_LOCKED) ? 0.5f : 1.0f; + + /* tracked segments */ + for (i = 0; i < channel->tot_segment; i++) { + int start_frame = channel->segments[2 * i]; + int end_frame = channel->segments[2 * i + 1]; + + if (sel) + glColor4fv(selected_strip); + else + glColor4fv(strip); + + if (start_frame != end_frame) { + glRectf(start_frame, (float) y - STRIP_HEIGHT_HALF, + end_frame, (float) y + STRIP_HEIGHT_HALF); + draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha); + draw_keyframe_shape(end_frame, y, xscale, yscale, sel, alpha); + } + else { + draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha); + } + } + + /* keyframes */ + i = 0; + while (i < track->markersnr) { + MovieTrackingMarker *marker = &track->markers[i]; + + if ((marker->flag & (MARKER_DISABLED | MARKER_TRACKED)) == 0) + draw_keyframe_shape(marker->framenr, y, xscale, yscale, sel, alpha); + + i++; + } + } + + /* adjust y-position for next one */ + y -= CHANNEL_STEP; + } + + glDisable(GL_BLEND); + } + + /* current frame */ + clip_draw_cfra(sc, ar, scene); +} + +void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar) +{ + ScrArea *sa = CTX_wm_area(C); + SpaceClip *sc = CTX_wm_space_clip(C); + View2D *v2d = &ar->v2d; + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking; + MovieTrackingDopesheet *dopesheet; + MovieTrackingDopesheetChannel *channel; + uiStyle *style = UI_GetStyle(); + uiBlock *block; + int fontid = style->widget.uifont_id; + int height; + float y; + + if (!clip) + return; + + tracking = &clip->tracking; + dopesheet = &tracking->dopesheet; + height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT * 2); + + if (height > (v2d->mask.ymax - v2d->mask.ymin)) { + /* don't use totrect set, as the width stays the same + * (NOTE: this is ok here, the configuration is pretty straightforward) + */ + v2d->tot.ymin = (float)(-height); + } + + /* need to do a view-sync here, so that the keys area doesn't jump around (it must copy this) */ + UI_view2d_sync(NULL, sa, v2d, V2D_LOCK_COPY); + + /* loop through channels, and set up drawing depending on their type + * first pass: just the standard GL-drawing for backdrop + text + */ + y = (float) CHANNEL_FIRST; + + BLF_size(fontid, 11.0f, U.dpi); + + for (channel = dopesheet->channels.first; channel; channel = channel->next) { + float yminc = (float) (y - CHANNEL_HEIGHT_HALF); + float ymaxc = (float) (y + CHANNEL_HEIGHT_HALF); + + /* check if visible */ + if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || + IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax)) + { + MovieTrackingTrack *track = channel->track; + float font_height, color[3]; + int sel = track->flag & TRACK_DOPE_SEL; + + track_channel_color(track, NULL, color); + glColor3fv(color); + + glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, + v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF); + + if (sel) + UI_ThemeColor(TH_TEXT_HI); + else + UI_ThemeColor(TH_TEXT); + + font_height = BLF_height(fontid, track->name); + BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD, + y - font_height / 2.0f, 0.0f); + BLF_draw(fontid, track->name, strlen(track->name)); + } + + /* adjust y-position for next one */ + y -= CHANNEL_STEP; + } + + /* second pass: widgets */ + block = uiBeginBlock(C, ar, __func__, UI_EMBOSS); + y = (float) CHANNEL_FIRST; + + glEnable(GL_BLEND); + for (channel = dopesheet->channels.first; channel; channel = channel->next) { + float yminc = (float)(y - CHANNEL_HEIGHT_HALF); + float ymaxc = (float)(y + CHANNEL_HEIGHT_HALF); + + /* check if visible */ + if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || + IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax)) + { + MovieTrackingTrack *track = channel->track; + uiBut *but; + PointerRNA ptr; + int icon; + + RNA_pointer_create(&clip->id, &RNA_MovieTrackingTrack, track, &ptr); + + if (track->flag & TRACK_LOCKED) + icon = ICON_LOCKED; + else + icon = ICON_UNLOCKED; + + uiBlockSetEmboss(block, UI_EMBOSSN); + but = uiDefIconButR(block, ICONTOG, 1, icon, + v2d->cur.xmax - UI_UNIT_X - CHANNEL_PAD, y - UI_UNIT_Y / 2.0f, + UI_UNIT_X, UI_UNIT_Y, &ptr, "lock", 0, 0, 0, 0, 0, NULL); + uiBlockSetEmboss(block, UI_EMBOSS); + } + + /* adjust y-position for next one */ + y -= CHANNEL_STEP; + } + glDisable(GL_BLEND); + + uiEndBlock(C, block); + uiDrawBlock(C, block); +} diff --git a/source/blender/editors/space_clip/clip_dopesheet_ops.c b/source/blender/editors/space_clip/clip_dopesheet_ops.c new file mode 100644 index 00000000000..9b9190e3e05 --- /dev/null +++ b/source/blender/editors/space_clip/clip_dopesheet_ops.c @@ -0,0 +1,139 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_clip/clip_graph_ops.c + * \ingroup spclip + */ + +#include "DNA_object_types.h" /* SELECT */ +#include "DNA_scene_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" +#include "BLI_math.h" +#include "BLI_listbase.h" +#include "BLI_rect.h" + +#include "BKE_context.h" +#include "BKE_movieclip.h" +#include "BKE_tracking.h" +#include "BKE_depsgraph.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_clip.h" + +#include "UI_interface.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "UI_view2d.h" + +#include "clip_intern.h" // own include + +/********************** select channel operator *********************/ + +static int dopesheet_select_channel_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc && sc->clip) + return sc->view == SC_VIEW_DOPESHEET; + + return FALSE; +} + +static int dopesheet_select_channel_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; + MovieTrackingDopesheetChannel *channel; + float location[2]; + int extend = RNA_boolean_get(op->ptr, "extend"); + int current_channel_index = 0, channel_index; + + RNA_float_get_array(op->ptr, "location", location); + channel_index = -(location[1] - (CHANNEL_FIRST + CHANNEL_HEIGHT_HALF)) / CHANNEL_STEP; + + for (channel = dopesheet->channels.first; channel; channel = channel->next) { + MovieTrackingTrack *track = channel->track; + + if (current_channel_index == channel_index) { + if (extend) + track->flag ^= TRACK_DOPE_SEL; + else + track->flag |= TRACK_DOPE_SEL; + } + else if (!extend) + track->flag &= ~TRACK_DOPE_SEL; + + current_channel_index++; + } + + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL); + + return OPERATOR_FINISHED; +} + +static int dopesheet_select_channel_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + ARegion *ar = CTX_wm_region(C); + float location[2]; + + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &location[0], &location[1]); + RNA_float_set_array(op->ptr, "location", location); + + return dopesheet_select_channel_exec(C, op); +} + +void CLIP_OT_dopesheet_select_channel(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select Channel"; + ot->description = "Select movie tracking channel"; + ot->idname = "CLIP_OT_dopesheet_select_channel"; + + /* api callbacks */ + ot->invoke = dopesheet_select_channel_invoke; + ot->exec = dopesheet_select_channel_exec; + ot->poll = dopesheet_select_channel_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, + "Location", "Mouse location to select channel", -100.0f, 100.0f); + RNA_def_boolean(ot->srna, "extend", 0, + "Extend", "Extend selection rather than clearing the existing selection"); +} diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 2f9956fc143..33bc67db8e4 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -229,9 +229,6 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, int x, y; MovieClip *clip = ED_space_clip(sc); - /* set zoom */ - glPixelZoom(zoomx*width/ibuf->x, zoomy*height/ibuf->y); - /* find window pixel coordinates of origin */ UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x, &y); @@ -242,8 +239,42 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, else { verify_buffer_float(ibuf); - if (ibuf->rect) - glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + if (ibuf->rect) { + int need_fallback = 1; + + if (ED_space_clip_texture_buffer_supported(sc)) { + if (ED_space_clip_load_movieclip_buffer(sc, ibuf)) { + glPushMatrix(); + glTranslatef(x, y, 0.0f); + glScalef(zoomx, zoomy, 1.0f); + + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); + glTexCoord2f(1.0f, 0.0f); glVertex2f(width, 0.0f); + glTexCoord2f(1.0f, 1.0f); glVertex2f(width, height); + glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, height); + glEnd(); + + glPopMatrix(); + + ED_space_clip_unload_movieclip_buffer(sc); + + need_fallback = 0; + } + } + + /* if texture buffers aren't efifciently supported or texture is too large to + * be binder fallback to simple draw pixels solution */ + if (need_fallback) { + /* set zoom */ + glPixelZoom(zoomx*width/ibuf->x, zoomy*height/ibuf->y); + + glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + + /* reset zoom */ + glPixelZoom(1.0f, 1.0f); + } + } } /* draw boundary border for frame if stabilization is enabled */ @@ -255,9 +286,9 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, glLogicOp(GL_NOR); glPushMatrix(); - glTranslatef(x, y, 0); + glTranslatef(x, y, 0.0f); - glScalef(zoomx, zoomy, 0); + glScalef(zoomx, zoomy, 1.0f); glMultMatrixf(sc->stabmat); glBegin(GL_LINE_LOOP); @@ -272,10 +303,6 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_LINE_STIPPLE); } - - - /* reset zoom */ - glPixelZoom(1.0f, 1.0f); } static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackingTrack *track) @@ -283,7 +310,7 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin int count = sc->path_length; int i, a, b, curindex = -1; float path[102][2]; - int tiny = sc->flag&SC_SHOW_TINY_MARKER, framenr; + int tiny = sc->flag & SC_SHOW_TINY_MARKER, framenr; MovieTrackingMarker *marker; if (count == 0) @@ -327,7 +354,7 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin if (marker->framenr == i) { if (marker->framenr == sc->user.framenr) - curindex= b; + curindex = b; add_v2_v2v2(path[b++], marker->pos, track->offset); ED_clip_point_undistorted_pos(sc, path[b-1], path[b-1]); @@ -389,7 +416,7 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, float marker_pos[2], int width, int height) { - int tiny = sc->flag&SC_SHOW_TINY_MARKER; + int tiny = sc->flag & SC_SHOW_TINY_MARKER; int show_search = FALSE; float px[2]; @@ -488,8 +515,8 @@ static void track_colors(MovieTrackingTrack *track, int act, float col[3], float static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, float marker_pos[2], int width, int height, int act, int sel) { - int tiny= sc->flag&SC_SHOW_TINY_MARKER; - int show_search= 0; + int tiny = sc->flag & SC_SHOW_TINY_MARKER; + int show_search = 0; float col[3], scol[3], px[2]; track_colors(track, act, col, scol); @@ -498,7 +525,7 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra px[1]= 1.0f / height / sc->zoom; /* marker position and offset position */ - if ((track->flag&SELECT) == sel && (marker->flag & MARKER_DISABLED) == 0) { + if ((track->flag & SELECT) == sel && (marker->flag & MARKER_DISABLED) == 0) { float pos[2]; rctf r; @@ -689,7 +716,7 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo float marker_pos[2], int outline, int sel, int act, int width, int height) { float x, y, dx, dy, patdx, patdy, searchdx, searchdy, tdx, tdy; - int tiny = sc->flag&SC_SHOW_TINY_MARKER; + int tiny = sc->flag & SC_SHOW_TINY_MARKER; float col[3], scol[3], px[2]; if ((tiny && outline) || (marker->flag & MARKER_DISABLED)) @@ -822,7 +849,7 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra int width, int height, float zoomx, float zoomy) { char str[128] = {0}, state[64] = {0}; - float dx= 0.0f, dy = 0.0f, fontsize, pos[3]; + float dx = 0.0f, dy = 0.0f, fontsize, pos[3]; uiStyle *style = U.uistyles.first; int fontid = style->widget.uifont_id; @@ -947,7 +974,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, if ((track->flag & TRACK_HIDDEN)==0) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) + if (MARKER_VISIBLE(sc, track, marker)) count++; } @@ -964,7 +991,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, if ((track->flag & TRACK_HIDDEN)==0) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { ED_clip_point_undistorted_pos(sc, marker->pos, fp); if (track == act_track) @@ -996,7 +1023,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, if ((track->flag & TRACK_HIDDEN)==0) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); draw_marker_outline(sc, track, marker, cur_pos, width, height); @@ -1021,7 +1048,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, int act = track == act_track; marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { if (!act) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); @@ -1042,7 +1069,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, if ((act_track->flag & TRACK_HIDDEN)==0) { marker = BKE_tracking_get_marker(act_track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, act_track, marker)) { copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos); draw_marker_areas(sc, act_track, marker, cur_pos, width, height, 1, 1); @@ -1064,9 +1091,9 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, track = tracksbase->first; while (track) { if ((track->flag & TRACK_HIDDEN) == 0 && track->flag & TRACK_HAS_BUNDLE) { - marker= BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { float npos[2]; copy_v4_v4(vec, track->bundle_pos); vec[3]=1; @@ -1116,7 +1143,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, if ((track->flag & TRACK_HIDDEN) == 0) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { int act = track == act_track; copy_v2_v2(cur_pos, fp ? fp : marker->pos); @@ -1189,7 +1216,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid if (a<2) ok = tpos[a%2] < val[a][a%2]; else - ok= tpos[a%2] > val[a][a%2]; + ok = tpos[a%2] > val[a][a%2]; if (ok) { copy_v2_v2(val[a], tpos); @@ -1255,7 +1282,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid } if (sc->flag & SC_MANUAL_CALIBRATION && clip->gpd) { - bGPDlayer *layer= clip->gpd->layers.first; + bGPDlayer *layer = clip->gpd->layers.first; while (layer) { bGPDframe *frame = layer->frames.first; @@ -1287,7 +1314,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid npos[1] = stroke->points[i+1].y * height * aspy; len = len_v2v2(pos, npos); - steps= ceil(len/5.0f); + steps = ceil(len/5.0f); /* we want to distort only long straight lines */ if (stroke->totpoints == 2) { @@ -1332,7 +1359,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int wid void clip_draw_main(SpaceClip *sc, ARegion *ar, Scene *scene) { - MovieClip *clip= ED_space_clip(sc); + MovieClip *clip = ED_space_clip(sc); ImBuf *ibuf; int width, height; float zoomx, zoomy; diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index 3946d4cc36d..bd34a51819c 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -31,15 +31,20 @@ #include <stddef.h> +#include "MEM_guardedalloc.h" + #include "BKE_main.h" #include "BKE_movieclip.h" #include "BKE_context.h" #include "BKE_tracking.h" + #include "DNA_object_types.h" /* SELECT */ #include "BLI_utildefines.h" #include "BLI_math.h" +#include "GPU_extensions.h" + #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" @@ -47,6 +52,7 @@ #include "ED_clip.h" #include "BIF_gl.h" +#include "BIF_glutil.h" #include "WM_api.h" #include "WM_types.h" @@ -55,6 +61,8 @@ #include "clip_intern.h" // own include +/* ******** operactor poll functions ******** */ + int ED_space_clip_poll(bContext *C) { SpaceClip *sc = CTX_wm_space_clip(C); @@ -65,13 +73,94 @@ int ED_space_clip_poll(bContext *C) return FALSE; } -void ED_space_clip_set(bContext *C, SpaceClip *sc, MovieClip *clip) +int ED_space_clip_view_clip_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc && sc->clip) { + return sc->view == SC_VIEW_CLIP; + } + + return FALSE; +} + +int ED_space_clip_tracking_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc && sc->clip) + return ED_space_clip_show_trackedit(sc); + + return FALSE; +} + +int ED_space_clip_tracking_size_poll(bContext *C) +{ + if (ED_space_clip_tracking_poll(C)) { + MovieClip *clip = CTX_data_edit_movieclip(C); + + if (clip) { + SpaceClip *sc = CTX_wm_space_clip(C); + int width, height; + + BKE_movieclip_get_size(clip, &sc->user, &width, &height); + + return width > 0 && height > 0; + } + } + + return FALSE; +} + +int ED_space_clip_tracking_frame_poll(bContext *C) +{ + if (ED_space_clip_tracking_poll(C)) { + MovieClip *clip = CTX_data_edit_movieclip(C); + + if (clip) { + SpaceClip *sc = CTX_wm_space_clip(C); + + return BKE_movieclip_has_frame(clip, &sc->user); + } + } + + return FALSE; +} + +/* ******** editing functions ******** */ + +void ED_space_clip_set(bContext *C, bScreen *screen, SpaceClip *sc, MovieClip *clip) { + MovieClip *old_clip; + + if (!screen && C) + screen = CTX_wm_screen(C); + + old_clip = sc->clip; sc->clip = clip; - if (sc->clip && sc->clip->id.us==0) + if (sc->clip && sc->clip->id.us == 0) sc->clip->id.us = 1; + if (screen) { + ScrArea *area; + SpaceLink *sl; + + for (area = screen->areabase.first; area; area = area->next) { + for (sl = area->spacedata.first; sl; sl = sl->next) { + if (sl->spacetype == SPACE_CLIP) { + SpaceClip *cur_sc = (SpaceClip *) sl; + + if (cur_sc != sc) { + if (cur_sc->clip == old_clip || cur_sc->clip == NULL) { + cur_sc->clip = clip; + } + } + } + } + } + } + if (C) WM_event_add_notifier(C, NC_MOVIECLIP|NA_SELECTED, sc->clip); } @@ -173,7 +262,7 @@ static int selected_boundbox(SpaceClip *sc, float min[2], float max[2]) MovieClip *clip = ED_space_clip(sc); MovieTrackingTrack *track; int width, height, ok = FALSE; - ListBase *tracksbase= BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); INIT_MINMAX2(min, max); @@ -314,3 +403,152 @@ void ED_clip_mouse_pos(bContext *C, wmEvent *event, float co[2]) { ED_clip_point_stable_pos(C, event->mval[0], event->mval[1], &co[0], &co[1]); } + +/* OpenGL draw context */ + +typedef struct SpaceClipDrawContext { + int support_checked, buffers_supported; + + GLuint texture; /* OGL texture ID */ + short texture_allocated; /* flag if texture was allocated by glGenTextures */ + struct ImBuf *texture_ibuf; /* image buffer for which texture was created */ + int image_width, image_height; /* image width and height for which texture was created */ + unsigned last_texture; /* ID of previously used texture, so it'll be restored after clip drawing */ + int framenr; +} SpaceClipDrawContext; + +int ED_space_clip_texture_buffer_supported(SpaceClip *sc) +{ + SpaceClipDrawContext *context = sc->draw_context; + + if (!context) { + context = MEM_callocN(sizeof(SpaceClipDrawContext), "SpaceClipDrawContext"); + sc->draw_context = context; + } + + if (!context->support_checked) { + context->support_checked = TRUE; + if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) { + context->buffers_supported = FALSE; + } + else { + context->buffers_supported = GPU_non_power_of_two_support(); + } + } + + return context->buffers_supported; +} + +int ED_space_clip_load_movieclip_buffer(SpaceClip *sc, ImBuf *ibuf) +{ + SpaceClipDrawContext *context = sc->draw_context; + MovieClip *clip = ED_space_clip(sc); + int need_rebind = 0; + + context->last_texture = glaGetOneInteger(GL_TEXTURE_2D); + + /* image texture need to be rebinded if displaying another image buffer + * assuming displaying happens of footage frames only on which painting doesn't heppen. + * so not changed image buffer pointer means unchanged image content */ + need_rebind |= context->texture_ibuf != ibuf; + need_rebind |= context->framenr != sc->user.framenr; + + if (need_rebind) { + int width = ibuf->x, height = ibuf->y; + float *frect = NULL, *fscalerect = NULL; + unsigned int *rect = NULL, *scalerect = NULL; + int need_recreate = 0; + + if (width > GL_MAX_TEXTURE_SIZE || height > GL_MAX_TEXTURE_SIZE) + return 0; + + rect = ibuf->rect; + frect = ibuf->rect_float; + + /* if image resolution changed (e.g. switched to proxy display) texture need to be recreated */ + need_recreate = context->image_width != ibuf->x || context->image_height != ibuf->y; + + if (context->texture_ibuf && need_recreate) { + glDeleteTextures(1, &context->texture); + context->texture_allocated = 0; + } + + if (need_recreate || !context->texture_allocated) { + /* texture doesn't exist yet or need to be re-allocated because of changed dimensions */ + int filter = GL_LINEAR; + + /* non-scaled proxy shouldn;t use diltering */ + if ((clip->flag & MCLIP_USE_PROXY) == 0 || + ELEM(sc->user.render_size, MCLIP_PROXY_RENDER_SIZE_FULL, MCLIP_PROXY_RENDER_SIZE_100)) + { + filter = GL_NEAREST; + } + + glGenTextures(1, &context->texture); + glBindTexture(GL_TEXTURE_2D, context->texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } + else { + /* if texture doesn't need to be reallocated itself, just bind it so + * loading of image will happen to a proper texture */ + glBindTexture(GL_TEXTURE_2D, context->texture); + } + + if (frect) + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, width, height, 0, GL_RGBA, GL_FLOAT, frect); + else + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rect); + + /* store settings */ + context->texture_allocated = 1; + context->texture_ibuf = ibuf; + context->image_width = ibuf->x; + context->image_height = ibuf->y; + context->framenr = sc->user.framenr; + + if (fscalerect) + MEM_freeN(fscalerect); + if (scalerect) + MEM_freeN(scalerect); + } + else { + /* displaying exactly the same image which was loaded t oa texture, + * just bint texture in this case */ + glBindTexture(GL_TEXTURE_2D, context->texture); + } + + glEnable(GL_TEXTURE_2D); + + return TRUE; +} + +void ED_space_clip_unload_movieclip_buffer(SpaceClip *sc) +{ + SpaceClipDrawContext *context = sc->draw_context; + + glBindTexture(GL_TEXTURE_2D, context->last_texture); + glDisable(GL_TEXTURE_2D); +} + +void ED_space_clip_free_texture_buffer(SpaceClip *sc) +{ + SpaceClipDrawContext *context = sc->draw_context; + + if (context) { + glDeleteTextures(1, &context->texture); + + MEM_freeN(context); + } +} + +int ED_space_clip_show_trackedit(SpaceClip *sc) +{ + if (sc) { + return ELEM3(sc->mode, SC_MODE_TRACKING, SC_MODE_RECONSTRUCTION, SC_MODE_DISTORTION); + } + + return FALSE; +} diff --git a/source/blender/editors/space_clip/clip_graph_draw.c b/source/blender/editors/space_clip/clip_graph_draw.c index df14491c9c9..9f9bdcb6cd2 100644 --- a/source/blender/editors/space_clip/clip_graph_draw.c +++ b/source/blender/editors/space_clip/clip_graph_draw.c @@ -61,7 +61,7 @@ static void draw_curve_knot(float x, float y, float xscale, float yscale, float hsize) { - static GLuint displist=0; + static GLuint displist = 0; /* initialize round circle shape */ if (displist == 0) { @@ -87,60 +87,6 @@ static void draw_curve_knot(float x, float y, float xscale, float yscale, float glPopMatrix(); } -static void draw_graph_cfra(SpaceClip *sc, ARegion *ar, Scene *scene) -{ - View2D *v2d = &ar->v2d; - float xscale, yscale; - float vec[2]; - - /* Draw a light green line to indicate current frame */ - vec[0] = (float)(sc->user.framenr * scene->r.framelen); - - UI_ThemeColor(TH_CFRAME); - glLineWidth(2.0); - - glBegin(GL_LINE_STRIP); - vec[1] = v2d->cur.ymin; - glVertex2fv(vec); - - vec[1] = v2d->cur.ymax; - glVertex2fv(vec); - glEnd(); - - glLineWidth(1.0); - - UI_view2d_view_orthoSpecial(ar, v2d, 1); - - /* because the frame number text is subject to the same scaling as the contents of the view */ - UI_view2d_getscale(v2d, &xscale, &yscale); - glScalef(1.0f/xscale, 1.0f, 1.0f); - - clip_draw_curfra_label(sc, (float)sc->user.framenr * xscale, 18); - - /* restore view transform */ - glScalef(xscale, 1.0, 1.0); -} - -static void draw_graph_sfra_efra(Scene *scene, View2D *v2d) -{ - UI_view2d_view_ortho(v2d); - - /* currently clip editor supposes that editing clip length is equal to scene frame range */ - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glColor4f(0.0f, 0.0f, 0.0f, 0.4f); - - glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); - glRectf((float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); - glDisable(GL_BLEND); - - UI_ThemeColorShade(TH_BACK, -60); - - /* thin lines where the actual frames are */ - fdrawline((float)SFRA, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); - fdrawline((float)EFRA, v2d->cur.ymin, (float)EFRA, v2d->cur.ymax); -} - static void tracking_segment_point_cb(void *UNUSED(userdata), MovieTrackingTrack *UNUSED(track), MovieTrackingMarker *marker, int UNUSED(coord), float val) { @@ -155,7 +101,7 @@ void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track, int co copy_v3_v3(col, colors[coord]); - if (track==userdata) { + if (track == userdata) { col[3] = 1.0f; glLineWidth(2.0f); } @@ -180,7 +126,7 @@ static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, float val) { struct { MovieTrackingTrack *act_track; int sel; float xscale, yscale, hsize; } *data = userdata; - int sel= 0, sel_flag; + int sel = 0, sel_flag; if (track != data->act_track) return; @@ -224,7 +170,7 @@ static void draw_tracks_curves(View2D *v2d, SpaceClip *sc) glDisable(GL_BLEND); /* selected knot handles on top of curves */ - userdata.sel= TRUE; + userdata.sel = TRUE; clip_graph_tracking_values_iterate(sc, &userdata, tracking_segment_knot_cb, NULL, NULL); } @@ -280,8 +226,8 @@ void clip_draw_graph(SpaceClip *sc, ARegion *ar, Scene *scene) } /* frame range */ - draw_graph_sfra_efra(scene, v2d); + clip_draw_sfra_efra(v2d, scene); /* current frame */ - draw_graph_cfra(sc, ar, scene); + clip_draw_cfra(sc, ar, scene); } diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c index b569469d304..efe48cd4b36 100644 --- a/source/blender/editors/space_clip/clip_graph_ops.c +++ b/source/blender/editors/space_clip/clip_graph_ops.c @@ -63,15 +63,13 @@ static int ED_space_clip_graph_poll(bContext *C) { - SpaceClip *sc = CTX_wm_space_clip(C); - - if (sc && sc->clip) { - ARegion *ar = CTX_wm_region(C); + if (ED_space_clip_tracking_poll(C)) { + SpaceClip *sc = CTX_wm_space_clip(C); - return ar->regiontype == RGN_TYPE_PREVIEW; + return sc->view == SC_VIEW_GRAPH; } - return 0; + return FALSE; } typedef struct { @@ -167,7 +165,7 @@ static void mouse_select_init_data(MouseSelectUserData *userdata, float *co) static int mouse_select_knot(bContext *C, float co[2], int extend) { SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip= ED_space_clip(sc); + MovieClip *clip = ED_space_clip(sc); ARegion *ar = CTX_wm_region(C); View2D *v2d = &ar->v2d; MovieTracking *tracking = &clip->tracking; @@ -227,16 +225,10 @@ static int mouse_select_curve(bContext *C, float co[2], int extend) } } else if (act_track != userdata.track) { - MovieTrackingMarker *marker; SelectUserData selectdata = {SEL_DESELECT}; tracking->act_track = userdata.track; - /* make active track be centered to screen */ - marker = BKE_tracking_get_marker(userdata.track, sc->user.framenr); - - clip_view_center_to_point(sc, marker->pos[0], marker->pos[1]); - /* deselect all knots on newly selected curve */ clip_graph_tracking_iterate(sc, &selectdata, toggle_selection_cb); } @@ -336,7 +328,7 @@ static void border_select_cb(void *userdata, MovieTrackingTrack *UNUSED(track), data->change = TRUE; } else if (!data->extend) { - marker->flag&= ~MARKER_GRAPH_SEL; + marker->flag &= ~MARKER_GRAPH_SEL; } } @@ -486,7 +478,7 @@ void CLIP_OT_graph_delete_curve(wmOperatorType *ot) /* api callbacks */ ot->invoke = WM_operator_confirm; ot->exec = delete_curve_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -497,7 +489,7 @@ void CLIP_OT_graph_delete_curve(wmOperatorType *ot) static int delete_knot_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip= ED_space_clip(sc); + MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; ListBase *tracksbase = BKE_tracking_get_tracks(tracking); MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); @@ -659,9 +651,9 @@ static int graph_disable_markers_exec(bContext *C, wmOperator *op) marker = &act_track->markers[a]; if (marker->flag & MARKER_GRAPH_SEL) { - if (action==0) + if (action == 0) marker->flag |= MARKER_DISABLED; - else if (action==1) + else if (action == 1) marker->flag &= ~MARKER_DISABLED; else marker->flag ^= MARKER_DISABLED; diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h index 425a1da9ec5..f32cb1651a1 100644 --- a/source/blender/editors/space_clip/clip_intern.h +++ b/source/blender/editors/space_clip/clip_intern.h @@ -38,14 +38,36 @@ struct MovieClip; struct MovieTrackingMarker; struct MovieTrackingTrack; struct Scene; +struct ScrArea; struct SpaceClip; struct wmOperatorType; +/* channel heights */ +#define CHANNEL_FIRST -UI_UNIT_Y +#define CHANNEL_HEIGHT UI_UNIT_Y +#define CHANNEL_HEIGHT_HALF (UI_UNIT_Y / 2.0f) +#define CHANNEL_SKIP 2 +#define CHANNEL_STEP (CHANNEL_HEIGHT + CHANNEL_SKIP) + +#define CHANNEL_PAD 4 + +/* extra padding for lengths (to go under scrollers) */ +#define EXTRA_SCROLL_PAD 100.0f + +#define STRIP_HEIGHT_HALF 5 + /* internal exports only */ /* clip_buttons.c */ void ED_clip_buttons_register(struct ARegionType *art); +/* clip_dopesheet_draw.c */ +void clip_draw_dopesheet_main(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene); +void clip_draw_dopesheet_channels(const struct bContext *C, struct ARegion *ar); + +/* clip_dopesheet_ops.c */ +void CLIP_OT_dopesheet_select_channel(struct wmOperatorType *ot); + /* clip_draw.c */ void clip_draw_main(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene); void clip_draw_grease_pencil(struct bContext *C, int onlyv2d); @@ -81,6 +103,7 @@ void CLIP_OT_rebuild_proxy(struct wmOperatorType *ot); void CLIP_OT_mode_set(struct wmOperatorType *ot); /* clip_toolbar.c */ +struct ARegion *ED_clip_has_properties_region(struct ScrArea *sa); void CLIP_OT_tools(struct wmOperatorType *ot); void CLIP_OT_properties(struct wmOperatorType *ot); void ED_clip_tool_props_register(struct ARegionType *art); @@ -104,6 +127,9 @@ void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct ListB void clip_view_center_to_point(struct SpaceClip *sc, float x, float y); +void clip_draw_cfra(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene); +void clip_draw_sfra_efra(struct View2D *v2d, struct Scene *scene); + /* tracking_ops.c */ void CLIP_OT_select(struct wmOperatorType *ot); void CLIP_OT_select_all(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index c7033b0db99..b05d204b07b 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -147,6 +147,7 @@ static int open_cancel(bContext *UNUSED(C), wmOperator *op) static int open_exec(bContext *C, wmOperator *op) { SpaceClip *sc = CTX_wm_space_clip(C); + bScreen *screen = CTX_wm_screen(C); PropertyPointerRNA *pprop; PointerRNA idptr; MovieClip *clip = NULL; @@ -184,7 +185,7 @@ static int open_exec(bContext *C, wmOperator *op) RNA_property_update(C, &pprop->ptr, pprop->prop); } else if (sc) { - ED_space_clip_set(C, sc, clip); + ED_space_clip_set(C, screen, sc, clip); } WM_event_add_notifier(C, NC_MOVIECLIP|NA_ADDED, clip); @@ -286,14 +287,14 @@ static void view_pan_init(bContext *C, wmOperator *op, wmEvent *event) vpd->y = event->y; if (sc->flag & SC_LOCK_SELECTION) - vpd->vec= &sc->xlockof; + vpd->vec = &sc->xlockof; else - vpd->vec= &sc->xof; + vpd->vec = &sc->xof; copy_v2_v2(&vpd->xof, vpd->vec); copy_v2_v2(&vpd->xorig, &vpd->xof); - vpd->event_type= event->type; + vpd->event_type = event->type; WM_event_add_modal_handler(C, op); } @@ -401,13 +402,14 @@ void CLIP_OT_view_pan(wmOperatorType *ot) /* identifiers */ ot->name = "View Pan"; ot->idname = "CLIP_OT_view_pan"; + ot->description = "Pan the view"; /* api callbacks */ ot->exec = view_pan_exec; ot->invoke = view_pan_invoke; ot->modal = view_pan_modal; ot->cancel = view_pan_cancel; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* flags */ ot->flag = OPTYPE_BLOCKING; @@ -431,7 +433,7 @@ static void view_zoom_init(bContext *C, wmOperator *op, wmEvent *event) SpaceClip *sc = CTX_wm_space_clip(C); ViewZoomData *vpd; - op->customdata= vpd= MEM_callocN(sizeof(ViewZoomData), "ClipViewZoomData"); + op->customdata = vpd = MEM_callocN(sizeof(ViewZoomData), "ClipViewZoomData"); WM_cursor_modal(CTX_wm_window(C), BC_NSEW_SCROLLCURSOR); vpd->x = event->x; @@ -527,13 +529,14 @@ void CLIP_OT_view_zoom(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom"; ot->idname = "CLIP_OT_view_zoom"; + ot->description = "Zoom on/out the view"; /* api callbacks */ ot->exec = view_zoom_exec; ot->invoke = view_zoom_invoke; ot->modal = view_zoom_modal; ot->cancel = view_zoom_cancel; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* flags */ ot->flag = OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -575,11 +578,12 @@ void CLIP_OT_view_zoom_in(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom In"; ot->idname = "CLIP_OT_view_zoom_in"; + ot->description = "Zoom in the view"; /* api callbacks */ ot->exec = view_zoom_in_exec; ot->invoke = view_zoom_in_invoke; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* properties */ RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, "Location", "Cursor location in screen coordinates", -10.0f, 10.0f); @@ -615,11 +619,12 @@ void CLIP_OT_view_zoom_out(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom Out"; ot->idname = "CLIP_OT_view_zoom_out"; + ot->description = "Zoom out the view"; /* api callbacks */ ot->exec = view_zoom_out_exec; ot->invoke = view_zoom_out_invoke; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* properties */ RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, "Location", "Cursor location in normalised (0.0-1.0) coordinates", -10.0f, 10.0f); @@ -635,8 +640,8 @@ static int view_zoom_ratio_exec(bContext *C, wmOperator *op) sclip_zoom_set(sc, ar, RNA_float_get(op->ptr, "ratio"), NULL); /* ensure pixel exact locations for draw */ - sc->xof= (int) sc->xof; - sc->yof= (int) sc->yof; + sc->xof = (int) sc->xof; + sc->yof = (int) sc->yof; ED_region_tag_redraw(CTX_wm_region(C)); @@ -648,10 +653,11 @@ void CLIP_OT_view_zoom_ratio(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom Ratio"; ot->idname = "CLIP_OT_view_zoom_ratio"; + ot->description = "Set the zoom ratio (based on clip size)"; /* api callbacks */ ot->exec = view_zoom_ratio_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* properties */ RNA_def_float(ot->srna, "ratio", 0.0f, 0.0f, FLT_MAX, @@ -666,7 +672,7 @@ static int view_all_exec(bContext *C, wmOperator *op) ARegion *ar; int w, h, width, height; float aspx, aspy; - int fit_view= RNA_boolean_get(op->ptr, "fit_view"); + int fit_view = RNA_boolean_get(op->ptr, "fit_view"); float zoomx, zoomy; /* retrieve state */ @@ -679,25 +685,25 @@ static int view_all_exec(bContext *C, wmOperator *op) w = w * aspx; h = h * aspy; - /* check if the image will fit in the image with zoom==1 */ + /* check if the image will fit in the image with zoom == 1 */ width = ar->winrct.xmax - ar->winrct.xmin + 1; height = ar->winrct.ymax - ar->winrct.ymin + 1; if (fit_view) { const int margin = 5; /* margin from border */ - zoomx= (float) width / (w + 2 * margin); - zoomy= (float) height / (h + 2 * margin); + zoomx = (float) width / (w + 2 * margin); + zoomy = (float) height / (h + 2 * margin); sclip_zoom_set(sc, ar, MIN2(zoomx, zoomy), NULL); } else { if ((w >= width || h >= height) && (width > 0 && height > 0)) { - zoomx= (float) width / w; - zoomy= (float) height / h; + zoomx = (float) width / w; + zoomy = (float) height / h; /* find the zoom value that will fit the image in the image space */ - sclip_zoom_set(sc, ar, 1.0f/power_of_2(1/MIN2(zoomx, zoomy)), NULL); + sclip_zoom_set(sc, ar, 1.0f / power_of_2(1.0f / MIN2(zoomx, zoomy)), NULL); } else sclip_zoom_set(sc, ar, 1.0f, NULL); @@ -715,10 +721,11 @@ void CLIP_OT_view_all(wmOperatorType *ot) /* identifiers */ ot->name = "View All"; ot->idname = "CLIP_OT_view_all"; + ot->description = "View whole image with markers"; /* api callbacks */ ot->exec = view_all_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; /* properties */ RNA_def_boolean(ot->srna, "fit_view", 0, "Fit View", "Fit frame to the viewport"); @@ -745,10 +752,11 @@ void CLIP_OT_view_selected(wmOperatorType *ot) /* identifiers */ ot->name = "View Selected"; ot->idname = "CLIP_OT_view_selected"; + ot->description = "View all selected elements"; /* api callbacks */ ot->exec = view_selected_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_view_clip_poll; } /********************** change frame operator *********************/ @@ -799,7 +807,7 @@ static int frame_from_event(bContext *C, wmEvent *event) UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &viewx, &viewy); - framenr= (int) floor(viewx + 0.5f); + framenr = (int) floor(viewx + 0.5f); } return framenr; @@ -877,7 +885,7 @@ typedef struct ProxyBuildJob { static void proxy_freejob(void *pjv) { - ProxyJob *pj= pjv; + ProxyJob *pj = pjv; MEM_freeN(pj); } @@ -956,7 +964,7 @@ static void proxy_startjob(void *pjv, short *stop, short *do_update, float *prog break; *do_update = TRUE; - *progress= ((float) cfra) / (efra - sfra); + *progress = ((float) cfra) / (efra - sfra); } if (distortion) diff --git a/source/blender/editors/space_clip/clip_toolbar.c b/source/blender/editors/space_clip/clip_toolbar.c index b80deb8260a..da8bf8fedd9 100644 --- a/source/blender/editors/space_clip/clip_toolbar.c +++ b/source/blender/editors/space_clip/clip_toolbar.c @@ -56,7 +56,7 @@ /************************** properties ******************************/ -static ARegion *clip_has_properties_region(ScrArea *sa) +ARegion *ED_clip_has_properties_region(ScrArea *sa) { ARegion *ar, *arnew; @@ -90,9 +90,9 @@ static int properties_poll(bContext *C) static int properties_exec(bContext *C, wmOperator *UNUSED(op)) { ScrArea *sa = CTX_wm_area(C); - ARegion *ar = clip_has_properties_region(sa); + ARegion *ar = ED_clip_has_properties_region(sa); - if (ar) + if (ar && ar->alignment != RGN_ALIGN_NONE) ED_region_toggle_hidden(C, ar); return OPERATOR_FINISHED; @@ -167,7 +167,7 @@ static int tools_exec(bContext *C, wmOperator *UNUSED(op)) ScrArea *sa = CTX_wm_area(C); ARegion *ar = clip_has_tools_region(sa); - if (ar) + if (ar && ar->alignment != RGN_ALIGN_NONE) ED_region_toggle_hidden(C, ar); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_clip/clip_utils.c b/source/blender/editors/space_clip/clip_utils.c index 443a1d0cdd3..2545106d132 100644 --- a/source/blender/editors/space_clip/clip_utils.c +++ b/source/blender/editors/space_clip/clip_utils.c @@ -29,6 +29,7 @@ * \ingroup spclip */ +#include "DNA_scene_types.h" #include "DNA_object_types.h" /* SELECT */ #include "MEM_guardedalloc.h" @@ -42,6 +43,9 @@ #include "BKE_tracking.h" #include "BKE_depsgraph.h" +#include "BIF_gl.h" +#include "BIF_glutil.h" + #include "WM_api.h" #include "WM_types.h" @@ -53,6 +57,8 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "UI_interface.h" +#include "UI_resources.h" #include "UI_view2d.h" #include "clip_intern.h" // own include @@ -168,7 +174,7 @@ void clip_delete_track(bContext *C, MovieClip *clip, ListBase *tracksbase, Movie int has_bundle = FALSE, update_stab = FALSE; - if (track==act_track) + if (track == act_track) tracking->act_track = NULL; if (track == stab->rot_track) { @@ -188,11 +194,11 @@ void clip_delete_track(bContext *C, MovieClip *clip, ListBase *tracksbase, Movie if (update_stab) { tracking->stabilization.ok = FALSE; - - DAG_id_tag_update(&clip->id, 0); WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, clip); } + DAG_id_tag_update(&clip->id, 0); + if (has_bundle) WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL); } @@ -220,3 +226,57 @@ void clip_view_center_to_point(SpaceClip *sc, float x, float y) sc->xof = (x - 0.5f) * width * aspx; sc->yof = (y - 0.5f) * height * aspy; } + +void clip_draw_cfra(SpaceClip *sc, ARegion *ar, Scene *scene) +{ + View2D *v2d = &ar->v2d; + float xscale, yscale; + float vec[2]; + + /* Draw a light green line to indicate current frame */ + vec[0] = (float)(sc->user.framenr * scene->r.framelen); + + UI_ThemeColor(TH_CFRAME); + glLineWidth(2.0); + + glBegin(GL_LINE_STRIP); + vec[1] = v2d->cur.ymin; + glVertex2fv(vec); + + vec[1] = v2d->cur.ymax; + glVertex2fv(vec); + glEnd(); + + glLineWidth(1.0); + + UI_view2d_view_orthoSpecial(ar, v2d, 1); + + /* because the frame number text is subject to the same scaling as the contents of the view */ + UI_view2d_getscale(v2d, &xscale, &yscale); + glScalef(1.0f/xscale, 1.0f, 1.0f); + + clip_draw_curfra_label(sc, (float)sc->user.framenr * xscale, 18); + + /* restore view transform */ + glScalef(xscale, 1.0, 1.0); +} + +void clip_draw_sfra_efra(View2D *v2d, Scene *scene) +{ + UI_view2d_view_ortho(v2d); + + /* currently clip editor supposes that editing clip length is equal to scene frame range */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glColor4f(0.0f, 0.0f, 0.0f, 0.4f); + + glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); + glRectf((float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); + glDisable(GL_BLEND); + + UI_ThemeColorShade(TH_BACK, -60); + + /* thin lines where the actual frames are */ + fdrawline((float)SFRA, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); + fdrawline((float)EFRA, v2d->cur.ymin, (float)EFRA, v2d->cur.ymax); +} diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 4de790bc00c..1c0d2db91a9 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -72,31 +72,79 @@ static void init_preview_region(const bContext *C, ARegion *ar) { Scene *scene = CTX_data_scene(C); + ScrArea *sa = CTX_wm_area(C); + SpaceClip *sc = CTX_wm_space_clip(C); ar->regiontype = RGN_TYPE_PREVIEW; ar->alignment = RGN_ALIGN_TOP; ar->flag |= RGN_FLAG_HIDDEN; - ar->v2d.tot.xmin = 0.0f; - ar->v2d.tot.ymin = -10.0f; - ar->v2d.tot.xmax = (float)scene->r.efra; - ar->v2d.tot.ymax = 10.0f; + if (sc->view == SC_VIEW_DOPESHEET) { + ar->v2d.tot.xmin = -10.0f; + ar->v2d.tot.ymin = (float)(-sa->winy)/3.0f; + ar->v2d.tot.xmax = (float)(sa->winx); + ar->v2d.tot.ymax = 0.0f; + + ar->v2d.cur = ar->v2d.tot; + + ar->v2d.min[0] = 0.0f; + ar->v2d.min[1] = 0.0f; + + ar->v2d.max[0] = MAXFRAMEF; + ar->v2d.max[1] = FLT_MAX; + + ar->v2d.minzoom = 0.01f; + ar->v2d.maxzoom = 50; + ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT); + ar->v2d.keepzoom = V2D_LOCKZOOM_Y; + ar->v2d.keepofs = V2D_KEEPOFS_Y; + ar->v2d.align = V2D_ALIGN_NO_POS_Y; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + } + else { + ar->v2d.tot.xmin = 0.0f; + ar->v2d.tot.ymin = -10.0f; + ar->v2d.tot.xmax = (float)scene->r.efra; + ar->v2d.tot.ymax = 10.0f; + + ar->v2d.cur = ar->v2d.tot; + + ar->v2d.min[0] = FLT_MIN; + ar->v2d.min[1] = FLT_MIN; + + ar->v2d.max[0] = MAXFRAMEF; + ar->v2d.max[1] = FLT_MAX; - ar->v2d.cur = ar->v2d.tot; + ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); - ar->v2d.min[0] = FLT_MIN; - ar->v2d.min[1] = FLT_MIN; + ar->v2d.minzoom = 0.0f; + ar->v2d.maxzoom = 0.0f; + ar->v2d.keepzoom = 0; + ar->v2d.keepofs = 0; + ar->v2d.align = 0; + ar->v2d.flag = 0; - ar->v2d.max[0] = MAXFRAMEF; - ar->v2d.max[1] = FLT_MAX; + ar->v2d.keeptot = 0; + } +} - ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_VERTICAL); +static void reinit_preview_region(const bContext *C, ARegion *ar) +{ + SpaceClip *sc = CTX_wm_space_clip(C); - ar->v2d.keeptot = 0; + if (sc->view == SC_VIEW_DOPESHEET) { + if ((ar->v2d.flag & V2D_VIEWSYNC_AREA_VERTICAL) == 0) + init_preview_region(C, ar); + } + else { + if (ar->v2d.flag & V2D_VIEWSYNC_AREA_VERTICAL) + init_preview_region(C, ar); + } } -static ARegion *clip_has_preview_region(const bContext *C, ScrArea *sa) +static ARegion *ED_clip_has_preview_region(const bContext *C, ScrArea *sa) { ARegion *ar, *arnew; @@ -119,6 +167,33 @@ static ARegion *clip_has_preview_region(const bContext *C, ScrArea *sa) return arnew; } +static ARegion *ED_clip_has_channels_region(ScrArea *sa) +{ + ARegion *ar, *arnew; + + ar = BKE_area_find_region_type(sa, RGN_TYPE_CHANNELS); + if (ar) + return ar; + + /* add subdiv level; after header */ + ar = BKE_area_find_region_type(sa, RGN_TYPE_PREVIEW); + + /* is error! */ + if (ar == NULL) + return NULL; + + arnew = MEM_callocN(sizeof(ARegion), "clip channels region"); + + BLI_insertlinkbefore(&sa->regionbase, ar, arnew); + arnew->regiontype = RGN_TYPE_CHANNELS; + arnew->alignment = RGN_ALIGN_LEFT; + + arnew->v2d.scroll = V2D_SCROLL_BOTTOM; + arnew->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + + return arnew; +} + static void clip_scopes_tag_refresh(ScrArea *sa) { SpaceClip *sc = (SpaceClip *)sa->spacedata.first; @@ -190,6 +265,16 @@ static SpaceLink *clip_new(const bContext *C) ar->regiontype = RGN_TYPE_UI; ar->alignment = RGN_ALIGN_RIGHT; + /* channels view */ + ar = MEM_callocN(sizeof(ARegion), "channels for clip"); + + BLI_addtail(&sc->regionbase, ar); + ar->regiontype = RGN_TYPE_CHANNELS; + ar->alignment = RGN_ALIGN_LEFT; + + ar->v2d.scroll = V2D_SCROLL_BOTTOM; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + /* preview view */ ar = MEM_callocN(sizeof(ARegion), "preview for clip"); @@ -214,12 +299,17 @@ static void clip_free(SpaceLink *sl) if (sc->scopes.track_preview) IMB_freeImBuf(sc->scopes.track_preview); + + ED_space_clip_free_texture_buffer(sc); } /* spacetype; init callback */ -static void clip_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa)) +static void clip_init(struct wmWindowManager *UNUSED(wm), ScrArea *sa) { + ListBase *lb = WM_dropboxmap_find("Clip", SPACE_CLIP, 0); + /* add drop boxes */ + WM_event_add_dropbox_handler(&sa->handlers, lb); } static SpaceLink *clip_duplicate(SpaceLink *sl) @@ -229,6 +319,7 @@ static SpaceLink *clip_duplicate(SpaceLink *sl) /* clear or remove stuff from old */ scn->scopes.track_preview = NULL; scn->scopes.ok = FALSE; + scn->draw_context = NULL; return (SpaceLink *)scn; } @@ -391,6 +482,10 @@ static void clip_operatortypes(void) WM_operatortype_append(CLIP_OT_graph_center_current_frame); WM_operatortype_append(CLIP_OT_graph_disable_markers); + + /* ** clip_dopesheet_ops.c ** */ + + WM_operatortype_append(CLIP_OT_dopesheet_select_channel); } static void clip_keymap(struct wmKeyConfig *keyconf) @@ -430,11 +525,6 @@ static void clip_keymap(struct wmKeyConfig *keyconf) RNA_enum_set(kmi->ptr, "mode", SC_MODE_DISTORTION); RNA_boolean_set(kmi->ptr, "toggle", TRUE); - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, 0, 0); - RNA_string_set(kmi->ptr, "data_path", "space_data.view"); - RNA_string_set(kmi->ptr, "value_1", "CLIP"); - RNA_string_set(kmi->ptr, "value_2", "GRAPH"); - WM_keymap_add_item(keymap, "CLIP_OT_solve_camera", SKEY, KM_PRESS, KM_SHIFT, 0); /* ******** Hotkeys avalaible for main region only ******** */ @@ -609,6 +699,13 @@ static void clip_keymap(struct wmKeyConfig *keyconf) RNA_enum_set(kmi->ptr, "action", 2); /* toggle */ transform_keymap_for_space(keyconf, keymap, SPACE_CLIP); + + /* ******** Hotkeys avalaible for channels region only ******** */ + + keymap = WM_keymap_find(keyconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); + + kmi = WM_keymap_add_item(keymap, "CLIP_OT_dopesheet_select_channel", ACTIONMOUSE, KM_PRESS, 0, 0); + RNA_boolean_set(kmi->ptr, "extend", TRUE); /* toggle */ } const char *clip_context_dir[]= {"edit_movieclip", NULL}; @@ -619,16 +716,43 @@ static int clip_context(const bContext *C, const char *member, bContextDataResul if (CTX_data_dir(member)) { CTX_data_dir_set(result, clip_context_dir); + return TRUE; } else if (CTX_data_equals(member, "edit_movieclip")) { - CTX_data_id_pointer_set(result, &sc->clip->id); + if (sc->clip) + CTX_data_id_pointer_set(result, &sc->clip->id); + return TRUE; } return FALSE; } +/* dropboxes */ +static int clip_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) +{ + if (drag->type == WM_DRAG_PATH) + if (ELEM3(drag->icon, 0, ICON_FILE_IMAGE, ICON_FILE_BLANK)) /* rule might not work? */ + return TRUE; + + return FALSE; +} + +static void clip_drop_copy(wmDrag *drag, wmDropBox *drop) +{ + /* copy drag path to properties */ + RNA_string_set(drop->ptr, "filepath", drag->path); +} + +/* area+region dropbox definition */ +static void clip_dropboxes(void) +{ + ListBase *lb = WM_dropboxmap_find("Clip", SPACE_CLIP, 0); + + WM_dropbox_add(lb, "CLIP_OT_open", clip_drop_poll, clip_drop_copy); +} + static void clip_refresh(const bContext *C, ScrArea *sa) { wmWindowManager *wm = CTX_wm_manager(C); @@ -636,52 +760,190 @@ static void clip_refresh(const bContext *C, ScrArea *sa) Scene *scene = CTX_data_scene(C); SpaceClip *sc = (SpaceClip *)sa->spacedata.first; ARegion *ar_main = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW); - ARegion *ar_preview = clip_has_preview_region(C, sa); + ARegion *ar_tools = BKE_area_find_region_type(sa, RGN_TYPE_TOOLS); + ARegion *ar_tool_props = BKE_area_find_region_type(sa, RGN_TYPE_TOOL_PROPS); + ARegion *ar_preview = ED_clip_has_preview_region(C, sa); + ARegion *ar_properties = ED_clip_has_properties_region(sa); + ARegion *ar_channels = ED_clip_has_channels_region(sa); + int main_visible = FALSE, preview_visible = FALSE, tools_visible = FALSE; + int tool_props_visible = FALSE, properties_visible = FALSE, channels_visible = FALSE; int view_changed = FALSE; switch (sc->view) { case SC_VIEW_CLIP: - if (ar_preview && !(ar_preview->flag & RGN_FLAG_HIDDEN)) { - ar_preview->flag |= RGN_FLAG_HIDDEN; - ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; - WM_event_remove_handlers((bContext*)C, &ar_preview->handlers); - view_changed = TRUE; - } - if (ar_main && ar_main->alignment != RGN_ALIGN_NONE) { - ar_main->alignment = RGN_ALIGN_NONE; - view_changed = TRUE; - } - if (ar_preview && ar_preview->alignment != RGN_ALIGN_NONE) { - /* store graph region align */ - if (ar_preview->alignment == RGN_ALIGN_TOP) - sc->runtime_flag &= ~SC_GRAPH_BOTTOM; - else - sc->runtime_flag |= SC_GRAPH_BOTTOM; - - ar_preview->alignment = RGN_ALIGN_NONE; - view_changed = TRUE; - } + main_visible = TRUE; + preview_visible = FALSE; + tools_visible = TRUE; + tool_props_visible = TRUE; + properties_visible = TRUE; + channels_visible = FALSE; break; case SC_VIEW_GRAPH: - if (ar_preview && (ar_preview->flag & RGN_FLAG_HIDDEN)) { - ar_preview->flag &= ~RGN_FLAG_HIDDEN; - ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; - ar_preview->v2d.cur = ar_preview->v2d.tot; - view_changed = TRUE; - } - if (ar_main && ar_main->alignment != RGN_ALIGN_NONE) { - ar_main->alignment = RGN_ALIGN_NONE; - view_changed = TRUE; - } - if (ar_preview && !ELEM(ar_preview->alignment, RGN_ALIGN_TOP, RGN_ALIGN_BOTTOM)) { - if (sc->runtime_flag & SC_GRAPH_BOTTOM) - ar_preview->alignment = RGN_ALIGN_BOTTOM; - else - ar_preview->alignment = RGN_ALIGN_TOP; - - view_changed = TRUE; - } + main_visible = FALSE; + preview_visible = TRUE; + tools_visible = FALSE; + tool_props_visible = FALSE; + properties_visible = FALSE; + channels_visible = FALSE; + + reinit_preview_region(C, ar_preview); break; + case SC_VIEW_DOPESHEET: + main_visible = FALSE; + preview_visible = TRUE; + tools_visible = FALSE; + tool_props_visible = FALSE; + properties_visible = FALSE; + channels_visible = TRUE; + + reinit_preview_region(C, ar_preview); + break; + } + + if (main_visible) { + if (ar_main && (ar_main->flag & RGN_FLAG_HIDDEN)) { + ar_main->flag &= ~RGN_FLAG_HIDDEN; + ar_main->v2d.flag &= ~V2D_IS_INITIALISED; + view_changed = TRUE; + } + + if (ar_main && ar_main->alignment != RGN_ALIGN_NONE) { + ar_main->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + else { + if (ar_main && !(ar_main->flag & RGN_FLAG_HIDDEN)) { + ar_main->flag |= RGN_FLAG_HIDDEN; + ar_main->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_main->handlers); + view_changed = TRUE; + } + if (ar_main && ar_main->alignment != RGN_ALIGN_NONE) { + ar_main->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + + if (properties_visible) { + if (ar_properties && (ar_properties->flag & RGN_FLAG_HIDDEN)) { + ar_properties->flag &= ~RGN_FLAG_HIDDEN; + ar_properties->v2d.flag &= ~V2D_IS_INITIALISED; + view_changed = TRUE; + } + if (ar_properties && ar_properties->alignment != RGN_ALIGN_RIGHT) { + ar_properties->alignment = RGN_ALIGN_RIGHT; + view_changed = TRUE; + } + } + else { + if (ar_properties && !(ar_properties->flag & RGN_FLAG_HIDDEN)) { + ar_properties->flag |= RGN_FLAG_HIDDEN; + ar_properties->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_properties->handlers); + view_changed = TRUE; + } + if (ar_properties && ar_properties->alignment != RGN_ALIGN_NONE) { + ar_properties->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + + if (tools_visible) { + if (ar_tools && (ar_tools->flag & RGN_FLAG_HIDDEN)) { + ar_tools->flag &= ~RGN_FLAG_HIDDEN; + ar_tools->v2d.flag &= ~V2D_IS_INITIALISED; + view_changed = TRUE; + } + if (ar_tools && ar_tools->alignment != RGN_ALIGN_LEFT) { + ar_tools->alignment = RGN_ALIGN_LEFT; + view_changed = TRUE; + } + } + else { + if (ar_tools && !(ar_tools->flag & RGN_FLAG_HIDDEN)) { + ar_tools->flag |= RGN_FLAG_HIDDEN; + ar_tools->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_tools->handlers); + view_changed = TRUE; + } + if (ar_tools && ar_tools->alignment != RGN_ALIGN_NONE) { + ar_tools->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + + if (tool_props_visible) { + if (ar_tool_props && (ar_tool_props->flag & RGN_FLAG_HIDDEN)) { + ar_tool_props->flag &= ~RGN_FLAG_HIDDEN; + ar_tool_props->v2d.flag &= ~V2D_IS_INITIALISED; + view_changed = TRUE; + } + if (ar_tool_props && (ar_tool_props->alignment != (RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV))) { + ar_tool_props->alignment = RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV; + view_changed = TRUE; + } + } + else { + if (ar_tool_props && !(ar_tool_props->flag & RGN_FLAG_HIDDEN)) { + ar_tool_props->flag |= RGN_FLAG_HIDDEN; + ar_tool_props->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_tool_props->handlers); + view_changed = TRUE; + } + if (ar_tool_props && ar_tool_props->alignment != RGN_ALIGN_NONE) { + ar_tool_props->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + + if (preview_visible) { + if (ar_preview && (ar_preview->flag & RGN_FLAG_HIDDEN)) { + ar_preview->flag &= ~RGN_FLAG_HIDDEN; + ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; + ar_preview->v2d.cur = ar_preview->v2d.tot; + view_changed = TRUE; + } + if (ar_preview && ar_preview->alignment != RGN_ALIGN_NONE) { + ar_preview->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + else { + if (ar_preview && !(ar_preview->flag & RGN_FLAG_HIDDEN)) { + ar_preview->flag |= RGN_FLAG_HIDDEN; + ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_preview->handlers); + view_changed = TRUE; + } + if (ar_preview && ar_preview->alignment != RGN_ALIGN_NONE) { + ar_preview->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } + } + + if (channels_visible) { + if (ar_channels && (ar_channels->flag & RGN_FLAG_HIDDEN)) { + ar_channels->flag &= ~RGN_FLAG_HIDDEN; + ar_channels->v2d.flag &= ~V2D_IS_INITIALISED; + view_changed = TRUE; + } + if (ar_channels && ar_channels->alignment != RGN_ALIGN_LEFT) { + ar_channels->alignment = RGN_ALIGN_LEFT; + view_changed = TRUE; + } + } + else { + if (ar_channels && !(ar_channels->flag & RGN_FLAG_HIDDEN)) { + ar_channels->flag |= RGN_FLAG_HIDDEN; + ar_channels->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers((bContext *)C, &ar_tools->handlers); + view_changed = TRUE; + } + if (ar_channels && ar_channels->alignment != RGN_ALIGN_NONE) { + ar_channels->alignment = RGN_ALIGN_NONE; + view_changed = TRUE; + } } if (view_changed) { @@ -722,11 +984,11 @@ static void movieclip_main_area_set_view2d(SpaceClip *sc, ARegion *ar) ar->v2d.mask.ymax = winy; /* which part of the image space do we see? */ - x1= ar->winrct.xmin + (winx-sc->zoom * w) / 2.0f; - y1= ar->winrct.ymin + (winy-sc->zoom * h) / 2.0f; + x1 = ar->winrct.xmin + (winx-sc->zoom * w) / 2.0f; + y1 = ar->winrct.ymin + (winy-sc->zoom * h) / 2.0f; - x1-= sc->zoom * sc->xof; - y1-= sc->zoom * sc->yof; + x1 -= sc->zoom * sc->xof; + y1 -= sc->zoom * sc->yof; /* relative display right */ ar->v2d.cur.xmin = (ar->winrct.xmin - (float)x1) / sc->zoom; @@ -832,13 +1094,13 @@ static void clip_preview_area_init(wmWindowManager *wm, ARegion *ar) WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } -static void clip_preview_area_draw(const bContext *C, ARegion *ar) +static void graph_area_draw(const bContext *C, ARegion *ar) { View2D *v2d = &ar->v2d; View2DScrollers *scrollers; SpaceClip *sc = CTX_wm_space_clip(C); Scene *scene = CTX_data_scene(C); - short unitx = V2D_UNIT_FRAMESCALE, unity = V2D_UNIT_VALUES; + short unitx, unity; if (sc->flag & SC_LOCK_TIMECURSOR) ED_clip_graph_center_current_frame(scene, ar); @@ -856,15 +1118,108 @@ static void clip_preview_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); /* scrollers */ + unitx = (sc->flag & SC_SHOW_SECONDS)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; + unity = V2D_UNIT_VALUES; scrollers = UI_view2d_scrollers_calc(C, v2d, unitx, V2D_GRID_NOCLAMP, unity, V2D_GRID_NOCLAMP); UI_view2d_scrollers_draw(C, v2d, scrollers); UI_view2d_scrollers_free(scrollers); } +static void dopesheet_area_draw(const bContext *C, ARegion *ar) +{ + Scene *scene = CTX_data_scene(C); + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + View2D *v2d = &ar->v2d; + View2DGrid *grid; + View2DScrollers *scrollers; + short unit = 0; + + if (clip) + BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE); + + /* clear and setup matrix */ + UI_ThemeClearColor(TH_BACK); + glClear(GL_COLOR_BUFFER_BIT); + + UI_view2d_view_ortho(v2d); + + /* time grid */ + unit = (sc->flag & SC_SHOW_SECONDS)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; + grid = UI_view2d_grid_calc(CTX_data_scene(C), v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy); + UI_view2d_grid_draw(v2d, grid, V2D_GRIDLINES_ALL); + UI_view2d_grid_free(grid); + + /* data... */ + clip_draw_dopesheet_main(sc, ar, scene); + + /* reset view matrix */ + UI_view2d_view_restore(C); + + /* scrollers */ + scrollers = UI_view2d_scrollers_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); +} + +static void clip_preview_area_draw(const bContext *C, ARegion *ar) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc->view == SC_VIEW_GRAPH) + graph_area_draw(C, ar); + else if (sc->view == SC_VIEW_DOPESHEET) + dopesheet_area_draw(C, ar); +} + static void clip_preview_area_listener(ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn)) { } +/****************** channels region ******************/ + +static void clip_channels_area_init(wmWindowManager *wm, ARegion *ar) +{ + wmKeyMap *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); + + keymap = WM_keymap_find(wm->defaultconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void clip_channels_area_draw(const bContext *C, ARegion *ar) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + View2D *v2d = &ar->v2d; + View2DScrollers *scrollers; + + if (clip) + BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE); + + /* clear and setup matrix */ + UI_ThemeClearColor(TH_BACK); + glClear(GL_COLOR_BUFFER_BIT); + + UI_view2d_view_ortho(v2d); + + /* data... */ + clip_draw_dopesheet_channels(C, ar); + + /* reset view matrix */ + UI_view2d_view_restore(C); + + /* scrollers */ + scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); +} + +static void clip_channels_area_listener(ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn)) +{ +} + /****************** header region ******************/ /* add handlers, stuff you only do once or on area/region changes */ @@ -972,6 +1327,7 @@ void ED_spacetype_clip(void) st->keymap = clip_keymap; st->listener = clip_listener; st->context = clip_context; + st->dropboxes = clip_dropboxes; st->refresh = clip_refresh; /* regions: main window */ @@ -1042,4 +1398,15 @@ void ED_spacetype_clip(void) BLI_addhead(&st->regiontypes, art); BKE_spacetype_register(st); + + /* channels */ + art = MEM_callocN(sizeof(ARegionType), "spacetype clip channels region"); + art->regionid = RGN_TYPE_CHANNELS; + art->prefsizex = UI_COMPACT_PANEL_WIDTH; + art->keymapflag = ED_KEYMAP_FRAMES|ED_KEYMAP_UI; + art->listener = clip_channels_area_listener; + art->init = clip_channels_area_init; + art->draw = clip_channels_area_draw; + + BLI_addhead(&st->regiontypes, art); } diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index f4454394ca3..825415764f1 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -78,39 +78,6 @@ #include "clip_intern.h" // own include -static int space_clip_frame_poll(bContext *C) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - - if (sc) { - MovieClip *clip = ED_space_clip(sc); - - if (clip) - return BKE_movieclip_has_frame(clip, &sc->user); - } - - return FALSE; -} - -static int space_clip_size_poll(bContext *C) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - - if (sc) { - MovieClip *clip = ED_space_clip(sc); - - if (clip) { - int width, height; - - BKE_movieclip_get_size(clip, &sc->user, &width, &height); - - return width > 0 && height > 0; - } - } - - return FALSE; -} - /********************** add marker operator *********************/ static void add_marker(SpaceClip *sc, float x, float y) @@ -175,7 +142,7 @@ void CLIP_OT_add_marker(wmOperatorType *ot) /* api callbacks */ ot->invoke = add_marker_invoke; ot->exec = add_marker_exec; - ot->poll = space_clip_size_poll; + ot->poll = ED_space_clip_tracking_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -220,7 +187,7 @@ void CLIP_OT_delete_track(wmOperatorType *ot) /* api callbacks */ ot->invoke = WM_operator_confirm; ot->exec = delete_track_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -271,7 +238,7 @@ void CLIP_OT_delete_marker(wmOperatorType *ot) /* api callbacks */ ot->invoke = WM_operator_confirm; ot->exec = delete_marker_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -662,7 +629,7 @@ void CLIP_OT_slide_marker(wmOperatorType *ot) ot->idname = "CLIP_OT_slide_marker"; /* api callbacks */ - ot->poll = space_clip_size_poll; + ot->poll = ED_space_clip_tracking_size_poll; ot->invoke = slide_marker_invoke; ot->modal = slide_marker_modal; @@ -756,19 +723,19 @@ static MovieTrackingTrack *find_nearest_track(SpaceClip *sc, ListBase *tracksbas while (cur) { MovieTrackingMarker *marker = BKE_tracking_get_marker(cur, sc->user.framenr); - if (((cur->flag & TRACK_HIDDEN) == 0) && MARKER_VISIBLE(sc, marker)) { + if (((cur->flag & TRACK_HIDDEN) == 0) && MARKER_VISIBLE(sc, cur, marker)) { float dist, d1, d2 = FLT_MAX, d3 = FLT_MAX; - d1= sqrtf((co[0]-marker->pos[0]-cur->offset[0])*(co[0]-marker->pos[0]-cur->offset[0])+ + d1 = sqrtf((co[0]-marker->pos[0]-cur->offset[0])*(co[0]-marker->pos[0]-cur->offset[0])+ (co[1]-marker->pos[1]-cur->offset[1])*(co[1]-marker->pos[1]-cur->offset[1])); /* distance to marker point */ /* distance to pattern boundbox */ if (sc->flag & SC_SHOW_MARKER_PATTERN) - d2= dist_to_rect(co, marker->pos, cur->pat_min, cur->pat_max); + d2 = dist_to_rect(co, marker->pos, cur->pat_min, cur->pat_max); /* distance to search boundbox */ if (sc->flag & SC_SHOW_MARKER_SEARCH && TRACK_VIEW_SELECTED(sc, cur)) - d3= dist_to_rect(co, marker->pos, cur->search_min, cur->search_max); + d3 = dist_to_rect(co, marker->pos, cur->search_min, cur->search_max); /* choose minimal distance. useful for cases of overlapped markers. */ dist = MIN3(d1, d2, d3); @@ -822,6 +789,8 @@ static int mouse_select(bContext *C, float co[2], int extend) sc->ylockof = 0.0f; } + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL); return OPERATOR_FINISHED; @@ -876,7 +845,7 @@ void CLIP_OT_select(wmOperatorType *ot) /* api callbacks */ ot->exec = select_exec; ot->invoke = select_invoke; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_UNDO; @@ -894,8 +863,9 @@ static int border_select_exec(bContext *C, wmOperator *op) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_tracks(tracking); rcti rect; rctf rectf; int change = FALSE, mode, extend; @@ -918,7 +888,7 @@ static int border_select_exec(bContext *C, wmOperator *op) if ((track->flag & TRACK_HIDDEN) == 0) { MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { if (BLI_in_rctf(&rectf, marker->pos[0], marker->pos[1])) { BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode!=GESTURE_MODAL_SELECT); } @@ -934,6 +904,8 @@ static int border_select_exec(bContext *C, wmOperator *op) } if (change) { + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL); return OPERATOR_FINISHED; @@ -953,7 +925,7 @@ void CLIP_OT_select_border(wmOperatorType *ot) ot->invoke = WM_border_select_invoke; ot->exec = border_select_exec; ot->modal = WM_border_select_modal; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_UNDO; @@ -980,8 +952,9 @@ static int circle_select_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); ARegion *ar = CTX_wm_region(C); + MovieTracking *tracking = &clip->tracking; MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_tracks(tracking); int x, y, radius, width, height, mode, change = FALSE; float zoomx, zoomy, offset[2], ellipse[2]; @@ -1007,7 +980,7 @@ static int circle_select_exec(bContext *C, wmOperator *op) if ((track->flag & TRACK_HIDDEN) == 0) { MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); - if (MARKER_VISIBLE(sc, marker) && marker_inside_ellipse(marker, offset, ellipse)) { + if (MARKER_VISIBLE(sc, track, marker) && marker_inside_ellipse(marker, offset, ellipse)) { BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode!=GESTURE_MODAL_SELECT); change = TRUE; @@ -1018,6 +991,8 @@ static int circle_select_exec(bContext *C, wmOperator *op) } if (change) { + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL); return OPERATOR_FINISHED; @@ -1037,7 +1012,7 @@ void CLIP_OT_select_circle(wmOperatorType *ot) ot->invoke = WM_gesture_circle_invoke; ot->modal = WM_gesture_circle_modal; ot->exec = circle_select_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1055,9 +1030,10 @@ static int select_all_exec(bContext *C, wmOperator *op) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; MovieTrackingTrack *track = NULL; /* selected track */ MovieTrackingMarker *marker; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_tracks(tracking); int action = RNA_enum_get(op->ptr, "action"); int framenr = sc->user.framenr; int has_selection = FALSE; @@ -1069,7 +1045,7 @@ static int select_all_exec(bContext *C, wmOperator *op) if (TRACK_VIEW_SELECTED(sc, track)) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { action = SEL_DESELECT; break; } @@ -1084,7 +1060,7 @@ static int select_all_exec(bContext *C, wmOperator *op) if ((track->flag & TRACK_HIDDEN)==0) { marker = BKE_tracking_get_marker(track, framenr); - if (MARKER_VISIBLE(sc, marker)) { + if (MARKER_VISIBLE(sc, track, marker)) { switch (action) { case SEL_SELECT: track->flag |= SELECT; @@ -1114,6 +1090,8 @@ static int select_all_exec(bContext *C, wmOperator *op) if (!has_selection) sc->flag &= ~SC_LOCK_SELECTION; + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL); return OPERATOR_FINISHED; @@ -1128,7 +1106,7 @@ void CLIP_OT_select_all(wmOperatorType *ot) /* api callbacks */ ot->exec = select_all_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1194,6 +1172,8 @@ static int select_groped_exec(bContext *C, wmOperator *op) track = track->next; } + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, clip); return OPERATOR_FINISHED; @@ -1219,7 +1199,7 @@ void CLIP_OT_select_grouped(wmOperatorType *ot) /* api callbacks */ ot->exec = select_groped_exec; - ot->poll = space_clip_size_poll; + ot->poll = ED_space_clip_tracking_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1573,7 +1553,7 @@ static int track_markers_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(eve static int track_markers_modal(bContext *C, wmOperator *UNUSED(op), wmEvent *event) { /* no running tracking, remove handler and pass through */ - if (0==WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C))) + if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C))) return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; /* running tracking */ @@ -1596,7 +1576,7 @@ void CLIP_OT_track_markers(wmOperatorType *ot) /* api callbacks */ ot->exec = track_markers_exec; ot->invoke = track_markers_invoke; - ot->poll = space_clip_frame_poll; + ot->poll = ED_space_clip_tracking_frame_poll; ot->modal = track_markers_modal; /* flags */ @@ -1819,7 +1799,7 @@ void CLIP_OT_solve_camera(wmOperatorType *ot) ot->exec = solve_camera_exec; ot->invoke = solve_camera_invoke; ot->modal = solve_camera_modal; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1867,7 +1847,7 @@ void CLIP_OT_clear_solution(wmOperatorType *ot) /* api callbacks */ ot->exec = clear_solution_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1919,7 +1899,7 @@ void CLIP_OT_clear_track_path(wmOperatorType *ot) /* api callbacks */ ot->exec = clear_track_path_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1977,7 +1957,7 @@ void CLIP_OT_disable_markers(wmOperatorType *ot) /* api callbacks */ ot->exec = disable_markers_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2035,7 +2015,7 @@ static Object *get_orientation_object(bContext *C) static int set_orientation_poll(bContext *C) { - if (space_clip_size_poll(C)) { + if (ED_space_clip_tracking_size_poll(C)) { Scene *scene = CTX_data_scene(C); SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); @@ -2645,7 +2625,7 @@ void CLIP_OT_set_scale(wmOperatorType *ot) static int set_solution_scale_poll(bContext *C) { - if (space_clip_size_poll(C)) { + if (ED_space_clip_tracking_size_poll(C)) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; @@ -2723,7 +2703,7 @@ void CLIP_OT_set_center_principal(wmOperatorType *ot) /* api callbacks */ ot->exec = set_center_principal_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2763,6 +2743,8 @@ static int hide_tracks_exec(bContext *C, wmOperator *op) sc->flag &= ~SC_LOCK_SELECTION; } + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, NULL); return OPERATOR_FINISHED; @@ -2777,7 +2759,7 @@ void CLIP_OT_hide_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = hide_tracks_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2792,7 +2774,8 @@ static int hide_tracks_clear_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + MovieTracking *tracking = &clip->tracking; + ListBase *tracksbase = BKE_tracking_get_tracks(tracking); MovieTrackingTrack *track; track = tracksbase->first; @@ -2802,6 +2785,8 @@ static int hide_tracks_clear_exec(bContext *C, wmOperator *UNUSED(op)) track = track->next; } + BKE_tracking_dopesheet_tag_update(tracking); + WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, NULL); return OPERATOR_FINISHED; @@ -2816,7 +2801,7 @@ void CLIP_OT_hide_tracks_clear(wmOperatorType *ot) /* api callbacks */ ot->exec = hide_tracks_clear_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2898,7 +2883,7 @@ void CLIP_OT_detect_features(wmOperatorType *ot) /* api callbacks */ ot->exec = detect_features_exec; - ot->poll = space_clip_frame_poll; + ot->poll = ED_space_clip_tracking_frame_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2993,7 +2978,7 @@ void CLIP_OT_frame_jump(wmOperatorType *ot) /* api callbacks */ ot->exec = frame_jump_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3050,7 +3035,7 @@ void CLIP_OT_join_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = join_tracks_exec; - ot->poll = space_clip_size_poll; + ot->poll = ED_space_clip_tracking_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3100,7 +3085,7 @@ void CLIP_OT_lock_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = lock_tracks_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3150,7 +3135,7 @@ void CLIP_OT_track_copy_color(wmOperatorType *ot) /* api callbacks */ ot->exec = track_copy_color_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3199,7 +3184,7 @@ void CLIP_OT_stabilize_2d_add(wmOperatorType *ot) /* api callbacks */ ot->exec = stabilize_2d_add_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3259,7 +3244,7 @@ void CLIP_OT_stabilize_2d_remove(wmOperatorType *ot) /* api callbacks */ ot->exec = stabilize_2d_remove_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3302,7 +3287,7 @@ void CLIP_OT_stabilize_2d_select(wmOperatorType *ot) /* api callbacks */ ot->exec = stabilize_2d_select_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3339,7 +3324,7 @@ void CLIP_OT_stabilize_2d_set_rotation(wmOperatorType *ot) /* api callbacks */ ot->exec = stabilize_2d_set_rotation_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3530,7 +3515,7 @@ void CLIP_OT_clean_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = clean_tracks_exec; ot->invoke = clean_tracks_invoke; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3567,7 +3552,7 @@ void CLIP_OT_tracking_object_new(wmOperatorType *ot) /* api callbacks */ ot->exec = tracking_object_new_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3605,7 +3590,7 @@ void CLIP_OT_tracking_object_remove(wmOperatorType *ot) /* api callbacks */ ot->exec = tracking_object_remove_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3636,7 +3621,7 @@ void CLIP_OT_copy_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = copy_tracks_exec; - ot->poll = ED_space_clip_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER; @@ -3646,7 +3631,7 @@ void CLIP_OT_copy_tracks(wmOperatorType *ot) static int paste_tracks_poll(bContext *C) { - if (ED_space_clip_poll(C)) { + if (ED_space_clip_tracking_poll(C)) { return BKE_tracking_clipboard_has_tracks(); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 36b38661463..10db1bb1f12 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -279,7 +279,7 @@ static int get_file_icon(struct direntry *file) static void file_draw_icon(uiBlock *block, char *path, int sx, int sy, int icon, int width, int height) { uiBut *but; - int x,y; + int x, y; /*float alpha=1.0f;*/ x = sx; @@ -301,7 +301,7 @@ static void file_draw_string(int sx, int sy, const char* string, float width, in fs.align = align; - BLI_strncpy(fname,string, FILE_MAXFILE); + BLI_strncpy(fname, string, FILE_MAXFILE); file_shorten_string(fname, width + 1.0f, 0); /* no text clipping needed, uiStyleFontDraw does it but is a bit too strict (for buttons it works) */ @@ -512,7 +512,7 @@ void file_draw_list(const bContext *C, ARegion *ar) is_icon = 0; imb = filelist_getimage(files, i); if (!imb) { - imb = filelist_geticon(files,i); + imb = filelist_geticon(files, i); is_icon = 1; } @@ -526,8 +526,8 @@ void file_draw_list(const bContext *C, ARegion *ar) UI_ThemeColor4(TH_TEXT); if (file->selflag & EDITING_FILE) { - uiBut *but = uiDefBut(block, TEX, 1, "", sx , sy-layout->tile_h-3, - textwidth, textheight, sfile->params->renameedit, 1.0f, (float)sizeof(sfile->params->renameedit),0,0,""); + uiBut *but = uiDefBut(block, TEX, 1, "", sx, sy-layout->tile_h-3, + textwidth, textheight, sfile->params->renameedit, 1.0f, (float)sizeof(sfile->params->renameedit), 0, 0, ""); uiButSetRenameFunc(but, renamebutton_cb, file); uiButSetFlag(but, UI_BUT_NO_UTF8); /* allow non utf8 names */ uiButClearFlag(but, UI_BUT_UNDO); @@ -562,14 +562,14 @@ void file_draw_list(const bContext *C, ARegion *ar) file_draw_string(sx, sy, file->mode3, layout->column_widths[COLUMN_MODE3], layout->tile_h, align); sx += layout->column_widths[COLUMN_MODE3] + 12; - file_draw_string(sx, sy, file->owner, layout->column_widths[COLUMN_OWNER] , layout->tile_h, align); + file_draw_string(sx, sy, file->owner, layout->column_widths[COLUMN_OWNER], layout->tile_h, align); sx += layout->column_widths[COLUMN_OWNER] + 12; #endif file_draw_string(sx, sy, file->date, layout->column_widths[COLUMN_DATE], layout->tile_h, align); sx += (int)layout->column_widths[COLUMN_DATE] + 12; - file_draw_string(sx, sy, file->time, layout->column_widths[COLUMN_TIME] , layout->tile_h, align); + file_draw_string(sx, sy, file->time, layout->column_widths[COLUMN_TIME], layout->tile_h, align); sx += (int)layout->column_widths[COLUMN_TIME] + 12; if (!(file->type & S_IFDIR)) { diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index 9455f6390f7..d3598ffd4e7 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -88,7 +88,7 @@ int file_previous_exec(bContext *C, struct wmOperator *unused); int file_next_exec(bContext *C, struct wmOperator *unused); int file_filename_exec(bContext *C, struct wmOperator *unused); int file_directory_exec(bContext *C, struct wmOperator *unused); -int file_directory_new_exec(bContext *C,struct wmOperator *unused); +int file_directory_new_exec(bContext *C, struct wmOperator *unused); int file_delete_exec(bContext *C, struct wmOperator *unused); int file_hilight_set(struct SpaceFile *sfile, struct ARegion *ar, int mx, int my); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index aa1ab823ee1..f340c53f528 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -73,7 +73,7 @@ static FileSelection find_file_mouse_rect(SpaceFile *sfile, struct ARegion* ar, const rcti* rect) { FileSelection sel; - float fxmin,fymin,fxmax, fymax; + float fxmin, fymin, fxmax, fymax; View2D* v2d = &ar->v2d; rcti rect_view; @@ -1035,7 +1035,7 @@ int file_directory_new_exec(bContext *C, wmOperator *op) SpaceFile *sfile= CTX_wm_space_file(C); if (!sfile->params) { - BKE_report(op->reports,RPT_WARNING, "No parent directory given"); + BKE_report(op->reports, RPT_WARNING, "No parent directory given"); return OPERATOR_CANCELLED; } @@ -1049,7 +1049,7 @@ int file_directory_new_exec(bContext *C, wmOperator *op) if (generate_name) { /* create a new, non-existing folder name */ if (!new_folder_path(sfile->params->dir, path, name)) { - BKE_report(op->reports,RPT_ERROR, "Couldn't create new folder name"); + BKE_report(op->reports, RPT_ERROR, "Couldn't create new folder name"); return OPERATOR_CANCELLED; } } @@ -1058,7 +1058,7 @@ int file_directory_new_exec(bContext *C, wmOperator *op) BLI_dir_create_recursive(path); if (!BLI_exists(path)) { - BKE_report(op->reports,RPT_ERROR, "Couldn't create new folder"); + BKE_report(op->reports, RPT_ERROR, "Couldn't create new folder"); return OPERATOR_CANCELLED; } @@ -1330,7 +1330,7 @@ void FILE_OT_filenum(struct wmOperatorType *ot) ot->poll = ED_operator_file_active; /* <- important, handler is on window level */ /* props */ - RNA_def_int(ot->srna, "increment", 1, -100, 100, "Increment", "", -100,100); + RNA_def_int(ot->srna, "increment", 1, -100, 100, "Increment", "", -100, 100); } static int file_rename_exec(bContext *C, wmOperator *UNUSED(op)) diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c index 596721bff07..9fe1940e87b 100644 --- a/source/blender/editors/space_file/file_panels.c +++ b/source/blender/editors/space_file/file_panels.c @@ -116,7 +116,7 @@ static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory cat BLI_strncpy(dir, entry, FILE_MAX); /* create list item */ - but = uiDefIconTextButS(block, LISTROW, 0, icon, dir, 0,0,UI_UNIT_X*10,UI_UNIT_Y, nr, 0, i, 0, 0, entry); + but = uiDefIconTextButS(block, LISTROW, 0, icon, dir, 0, 0, UI_UNIT_X * 10, UI_UNIT_Y, nr, 0, i, 0, 0, entry); uiButSetFunc(but, file_panel_cb, entry, NULL); uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 97eb35863b8..22f159a8275 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -179,7 +179,7 @@ static int compare_name(const void *a1, const void *a2) if ( strcmp(entry1->relname, "..")==0 ) return (-1); if ( strcmp(entry2->relname, "..")==0 ) return (1); - return (BLI_natstrcmp(entry1->relname,entry2->relname)); + return (BLI_natstrcmp(entry1->relname, entry2->relname)); } static int compare_date(const void *a1, const void *a2) @@ -212,7 +212,7 @@ static int compare_date(const void *a1, const void *a2) if ( entry1->s.st_mtime < entry2->s.st_mtime) return 1; if ( entry1->s.st_mtime > entry2->s.st_mtime) return -1; - else return BLI_natstrcmp(entry1->relname,entry2->relname); + else return BLI_natstrcmp(entry1->relname, entry2->relname); } static int compare_size(const void *a1, const void *a2) @@ -244,7 +244,7 @@ static int compare_size(const void *a1, const void *a2) if ( entry1->s.st_size < entry2->s.st_size) return 1; if ( entry1->s.st_size > entry2->s.st_size) return -1; - else return BLI_natstrcmp(entry1->relname,entry2->relname); + else return BLI_natstrcmp(entry1->relname, entry2->relname); } static int compare_extension(const void *a1, const void *a2) @@ -419,7 +419,7 @@ void filelist_free_icons(void) //-----------------FOLDERLIST (previous/next) --------------// struct ListBase* folderlist_new(void) { - ListBase* p = MEM_callocN( sizeof(ListBase), "folderlist" ); + ListBase* p = MEM_callocN(sizeof(ListBase), "folderlist" ); return p; } @@ -456,7 +456,7 @@ void folderlist_pushdir(ListBase* folderlist, const char *dir) } // create next folder element - folder = (FolderList*)MEM_mallocN(sizeof(FolderList),"FolderList"); + folder = (FolderList*)MEM_mallocN(sizeof(FolderList), "FolderList"); folder->foldername = (char*)MEM_mallocN(sizeof(char)*(strlen(dir)+1), "foldername"); folder->foldername[0] = '\0'; @@ -519,7 +519,7 @@ static void filelist_read_dir(struct FileList* filelist); //------------------FILELIST------------------------// struct FileList* filelist_new(short type) { - FileList* p = MEM_callocN( sizeof(FileList), "filelist" ); + FileList* p = MEM_callocN(sizeof(FileList), "filelist" ); switch (type) { case FILE_MAIN: p->readf = filelist_read_main; @@ -1144,7 +1144,7 @@ void filelist_from_main(struct FileList *filelist) filelist->filelist= (struct direntry *)malloc(filelist->numfiles * sizeof(struct direntry)); for (a=0; a<filelist->numfiles; a++) { - memset( &(filelist->filelist[a]), 0 , sizeof(struct direntry)); + memset(&(filelist->filelist[a]), 0, sizeof(struct direntry)); filelist->filelist[a].type |= S_IFDIR; } @@ -1199,7 +1199,7 @@ void filelist_from_main(struct FileList *filelist) files = filelist->filelist; if (!filelist->hide_parent) { - memset( &(filelist->filelist[0]), 0 , sizeof(struct direntry)); + memset(&(filelist->filelist[0]), 0, sizeof(struct direntry)); filelist->filelist[0].relname= BLI_strdup(".."); filelist->filelist[0].type |= S_IFDIR; @@ -1213,7 +1213,7 @@ void filelist_from_main(struct FileList *filelist) ok = 1; if (ok) { if (!filelist->hide_dot || id->name[2] != '.') { - memset( files, 0 , sizeof(struct direntry)); + memset(files, 0, sizeof(struct direntry)); if (id->lib==NULL) files->relname= BLI_strdup(id->name+2); else { diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index a4da1975c56..0c94bff8803 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -315,7 +315,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu) /* Adding Desktop and My Documents */ SHGetSpecialFolderPath(0, line, CSIDL_PERSONAL, 0); - fsmenu_insert_entry(fsmenu,FS_CATEGORY_BOOKMARKS, line, 1, 0); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); SHGetSpecialFolderPath(0, line, CSIDL_DESKTOPDIRECTORY, 0); fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); } @@ -399,7 +399,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu) pathString = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle); - if (!CFStringGetCString(pathString,line,256,kCFStringEncodingASCII)) + if (!CFStringGetCString(pathString, line, 256, kCFStringEncodingASCII)) continue; fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, line, 1, 0); @@ -448,7 +448,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu) pathString = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle); - if (!CFStringGetCString(pathString,line,256,kCFStringEncodingASCII)) + if (!CFStringGetCString(pathString, line, 256, kCFStringEncodingASCII)) continue; fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index e166914b36f..dac5d1e1347 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -218,7 +218,7 @@ static void file_refresh(const bContext *C, ScrArea *UNUSED(sa)) } else { if (params->display == FILE_IMGDISPLAY) { - if (!thumbnails_running(sfile->files,C)) { + if (!thumbnails_running(sfile->files, C)) { thumbnails_start(sfile->files, C); } } @@ -432,12 +432,12 @@ static void file_keymap(struct wmKeyConfig *keyconf) RNA_int_set(kmi->ptr, "increment", 10); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); RNA_int_set(kmi->ptr, "increment", 100); - kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, 0,0); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, 0, 0); RNA_int_set(kmi->ptr, "increment", -1); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_SHIFT, 0); RNA_int_set(kmi->ptr, "increment", -10); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "increment",-100); + RNA_int_set(kmi->ptr, "increment", -100); /* keys for button area (top) */ @@ -450,10 +450,10 @@ static void file_keymap(struct wmKeyConfig *keyconf) RNA_int_set(kmi->ptr, "increment", 100); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, 0, 0); RNA_int_set(kmi->ptr, "increment", -1); - kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_SHIFT,0); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_SHIFT, 0); RNA_int_set(kmi->ptr, "increment", -10); - kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_CTRL,0); - RNA_int_set(kmi->ptr, "increment",-100); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_CTRL, 0); + RNA_int_set(kmi->ptr, "increment", -100); } diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index d435b78b65c..e772e2856c1 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -532,7 +532,7 @@ static void draw_fcurve_curve (bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2 glBegin(GL_LINE_STRIP); for (ctime= stime; ctime <= etime; ctime += samplefreq) - glVertex2f( ctime, evaluate_fcurve(fcu, ctime)*unitFac ); + glVertex2f(ctime, evaluate_fcurve(fcu, ctime) * unitFac); glEnd(); @@ -777,7 +777,7 @@ static void draw_fcurve_curve_bezts (bAnimContext *ac, ID *id, FCurve *fcu, View /* Draw the 'ghost' F-Curves (i.e. snapshots of the curve) * NOTE: unit mapping has already been applied to the values, so do not try and apply again */ -void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) +void graph_draw_ghost_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) { FCurve *fcu; @@ -812,7 +812,7 @@ void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) /* This is called twice from space_graph.c -> graph_main_area_draw() * Unselected then selected F-Curves are drawn so that they do not occlude each other. */ -void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid *grid, short sel) +void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid *grid, short sel) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 76a2c926522..5f8281fda5b 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -83,7 +83,7 @@ /* Get the min/max keyframes*/ /* note: it should return total boundbox, filter for selection only can be argument... */ -void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xmax, float *ymin, float *ymax, const short selOnly) +void get_graph_keyframe_extents(bAnimContext *ac, float *xmin, float *xmax, float *ymin, float *ymax, const short selOnly) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -181,7 +181,7 @@ static int graphkeys_previewrange_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_previewrange_set (wmOperatorType *ot) +void GRAPH_OT_previewrange_set(wmOperatorType *ot) { /* identifiers */ ot->name = "Auto-Set Preview Range"; @@ -243,7 +243,7 @@ static int graphkeys_view_selected_exec(bContext *C, wmOperator *UNUSED(op)) return graphkeys_viewall(C, TRUE); } -void GRAPH_OT_view_all (wmOperatorType *ot) +void GRAPH_OT_view_all(wmOperatorType *ot) { /* identifiers */ ot->name = "View All"; @@ -258,7 +258,7 @@ void GRAPH_OT_view_all (wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } -void GRAPH_OT_view_selected (wmOperatorType *ot) +void GRAPH_OT_view_selected(wmOperatorType *ot) { /* identifiers */ ot->name = "View Selected"; @@ -373,7 +373,7 @@ static int graphkeys_create_ghostcurves_exec(bContext *C, wmOperator *UNUSED(op) return OPERATOR_FINISHED; } -void GRAPH_OT_ghost_curves_create (wmOperatorType *ot) +void GRAPH_OT_ghost_curves_create(wmOperatorType *ot) { /* identifiers */ ot->name = "Create Ghost Curves"; @@ -416,7 +416,7 @@ static int graphkeys_clear_ghostcurves_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot) +void GRAPH_OT_ghost_curves_clear(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Ghost Curves"; @@ -511,7 +511,7 @@ static int graphkeys_insertkey_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_keyframe_insert (wmOperatorType *ot) +void GRAPH_OT_keyframe_insert(wmOperatorType *ot) { /* identifiers */ ot->name = "Insert Keyframes"; @@ -618,7 +618,7 @@ static int graphkeys_click_insert_invoke (bContext *C, wmOperator *op, wmEvent * return graphkeys_click_insert_exec(C, op); } -void GRAPH_OT_click_insert (wmOperatorType *ot) +void GRAPH_OT_click_insert(wmOperatorType *ot) { /* identifiers */ ot->name = "Click-Insert Keyframes"; @@ -701,7 +701,7 @@ static int graphkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_copy (wmOperatorType *ot) +void GRAPH_OT_copy(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy Keyframes"; @@ -746,7 +746,7 @@ static int graphkeys_paste_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_paste (wmOperatorType *ot) +void GRAPH_OT_paste(wmOperatorType *ot) { /* identifiers */ ot->name = "Paste Keyframes"; @@ -815,7 +815,7 @@ static int graphkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *UNUS return OPERATOR_FINISHED; } -void GRAPH_OT_duplicate (wmOperatorType *ot) +void GRAPH_OT_duplicate(wmOperatorType *ot) { /* identifiers */ ot->name = "Duplicate Keyframes"; @@ -885,7 +885,7 @@ static int graphkeys_delete_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_delete (wmOperatorType *ot) +void GRAPH_OT_delete(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Keyframes"; @@ -947,7 +947,7 @@ static int graphkeys_clean_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_clean (wmOperatorType *ot) +void GRAPH_OT_clean(wmOperatorType *ot) { /* identifiers */ ot->name = "Clean Keyframes"; @@ -1030,7 +1030,7 @@ static int graphkeys_bake_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_bake (wmOperatorType *ot) +void GRAPH_OT_bake(wmOperatorType *ot) { /* identifiers */ ot->name = "Bake Curve"; @@ -1174,7 +1174,7 @@ static int graphkeys_sound_bake_invoke (bContext *C, wmOperator *op, wmEvent *ev return WM_operator_filesel(C, op, event); } -void GRAPH_OT_sound_bake (wmOperatorType *ot) +void GRAPH_OT_sound_bake(wmOperatorType *ot) { /* identifiers */ ot->name = "Bake Sound to F-Curves"; @@ -1248,7 +1248,7 @@ static int graphkeys_sample_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_sample (wmOperatorType *ot) +void GRAPH_OT_sample(wmOperatorType *ot) { /* identifiers */ ot->name = "Sample Keyframes"; @@ -1357,7 +1357,7 @@ static int graphkeys_expo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_extrapolation_type (wmOperatorType *ot) +void GRAPH_OT_extrapolation_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Extrapolation"; @@ -1426,7 +1426,7 @@ static int graphkeys_ipo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_interpolation_type (wmOperatorType *ot) +void GRAPH_OT_interpolation_type(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Keyframe Interpolation"; @@ -1697,7 +1697,7 @@ static int graphkeys_euler_filter_exec (bContext *C, wmOperator *op) } } -void GRAPH_OT_euler_filter (wmOperatorType *ot) +void GRAPH_OT_euler_filter(wmOperatorType *ot) { /* identifiers */ ot->name = "Euler Discontinuity Filter"; @@ -1771,7 +1771,7 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_frame_jump (wmOperatorType *ot) +void GRAPH_OT_frame_jump(wmOperatorType *ot) { /* identifiers */ ot->name = "Jump to Frame"; @@ -1875,7 +1875,7 @@ static int graphkeys_snap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_snap (wmOperatorType *ot) +void GRAPH_OT_snap(wmOperatorType *ot) { /* identifiers */ ot->name = "Snap Keys"; @@ -1993,7 +1993,7 @@ static int graphkeys_mirror_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_mirror (wmOperatorType *ot) +void GRAPH_OT_mirror(wmOperatorType *ot) { /* identifiers */ ot->name = "Mirror Keys"; @@ -2048,7 +2048,7 @@ static int graphkeys_smooth_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_smooth (wmOperatorType *ot) +void GRAPH_OT_smooth(wmOperatorType *ot) { /* identifiers */ ot->name = "Smooth Keys"; @@ -2152,7 +2152,7 @@ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_fmodifier_add (wmOperatorType *ot) +void GRAPH_OT_fmodifier_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add F-Curve Modifier"; @@ -2210,7 +2210,7 @@ static int graph_fmodifier_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_fmodifier_copy (wmOperatorType *ot) +void GRAPH_OT_fmodifier_copy(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy F-Modifiers"; @@ -2272,7 +2272,7 @@ static int graph_fmodifier_paste_exec(bContext *C, wmOperator *op) } } -void GRAPH_OT_fmodifier_paste (wmOperatorType *ot) +void GRAPH_OT_fmodifier_paste(wmOperatorType *ot) { /* identifiers */ ot->name = "Paste F-Modifiers"; diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 864708a873a..7c72fa0834d 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -166,7 +166,7 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_select_all_toggle (wmOperatorType *ot) +void GRAPH_OT_select_all_toggle(wmOperatorType *ot) { /* identifiers */ ot->name = "Select All"; @@ -535,7 +535,7 @@ static int graphkeys_columnselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_select_column (wmOperatorType *ot) +void GRAPH_OT_select_column(wmOperatorType *ot) { /* identifiers */ ot->name = "Select All"; @@ -593,7 +593,7 @@ static int graphkeys_select_linked_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_select_linked (wmOperatorType *ot) +void GRAPH_OT_select_linked(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Linked"; @@ -671,7 +671,7 @@ static int graphkeys_select_more_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_select_more (wmOperatorType *ot) +void GRAPH_OT_select_more(wmOperatorType *ot) { /* identifiers */ ot->name = "Select More"; @@ -705,7 +705,7 @@ static int graphkeys_select_less_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void GRAPH_OT_select_less (wmOperatorType *ot) +void GRAPH_OT_select_less(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Less"; @@ -846,7 +846,7 @@ static int graphkeys_select_leftright_invoke (bContext *C, wmOperator *op, wmEve return graphkeys_select_leftright_exec(C, op); } -void GRAPH_OT_select_leftright (wmOperatorType *ot) +void GRAPH_OT_select_leftright(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Left/Right"; @@ -1331,7 +1331,7 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void GRAPH_OT_clickselect (wmOperatorType *ot) +void GRAPH_OT_clickselect(wmOperatorType *ot) { /* identifiers */ ot->name = "Mouse Select Keys"; diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c index 8c2afe8a242..46c886b7d3c 100644 --- a/source/blender/editors/space_graph/graph_utils.c +++ b/source/blender/editors/space_graph/graph_utils.c @@ -92,7 +92,7 @@ bAnimListElem *get_active_fcurve_channel (bAnimContext *ac) /* Operator Polling Callbacks */ /* Check if there are any visible keyframes (for selection tools) */ -int graphop_visible_keyframes_poll (bContext *C) +int graphop_visible_keyframes_poll(bContext *C) { bAnimContext ac; bAnimListElem *ale; @@ -141,7 +141,7 @@ int graphop_visible_keyframes_poll (bContext *C) } /* Check if there are any visible + editable keyframes (for editing tools) */ -int graphop_editable_keyframes_poll (bContext *C) +int graphop_editable_keyframes_poll(bContext *C) { bAnimContext ac; bAnimListElem *ale; @@ -191,7 +191,7 @@ int graphop_editable_keyframes_poll (bContext *C) } /* has active F-Curve that's editable */ -int graphop_active_fcurve_poll (bContext *C) +int graphop_active_fcurve_poll(bContext *C) { bAnimContext ac; bAnimListElem *ale; @@ -226,7 +226,7 @@ int graphop_active_fcurve_poll (bContext *C) } /* has selected F-Curve that's editable */ -int graphop_selected_fcurve_poll (bContext *C) +int graphop_selected_fcurve_poll(bContext *C) { bAnimContext ac; ListBase anim_data = {NULL, NULL}; diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 6214201a87d..1b60a0a39ac 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -516,6 +516,7 @@ static void graph_refresh(const bContext *C, ScrArea *sa) if (sipo->flag & SIPO_TEMP_NEEDCHANSYNC) { ANIM_sync_animchannels_to_data(C); sipo->flag &= ~SIPO_TEMP_NEEDCHANSYNC; + ED_area_tag_redraw(sa); } /* init/adjust F-Curve colors */ @@ -551,21 +552,21 @@ static void graph_refresh(const bContext *C, ScrArea *sa) * TODO: find a way to module the hue so that not all curves have same color... */ float *col= fcu->color; - + switch (fcu->array_index) { - case 0: - col[0]= 1.0f; col[1]= 0.0f; col[2]= 0.0f; - break; - case 1: - col[0]= 0.0f; col[1]= 1.0f; col[2]= 0.0f; - break; - case 2: - col[0]= 0.0f; col[1]= 0.0f; col[2]= 1.0f; - break; - default: - /* 'unknown' color - bluish so as to not conflict with handles */ - col[0]= 0.3f; col[1]= 0.8f; col[2]= 1.0f; - break; + case 0: + col[0] = 1.0f; col[1] = 0.0f; col[2] = 0.0f; + break; + case 1: + col[0] = 0.0f; col[1] = 1.0f; col[2] = 0.0f; + break; + case 2: + col[0] = 0.0f; col[1] = 0.0f; col[2] = 1.0f; + break; + default: + /* 'unknown' color - bluish so as to not conflict with handles */ + col[0] = 0.3f; col[1] = 0.8f; col[2] = 1.0f; + break; } } break; @@ -596,55 +597,55 @@ void ED_spacetype_ipo(void) st->spaceid= SPACE_IPO; strncpy(st->name, "Graph", BKE_ST_MAXNAME); - st->new= graph_new; - st->free= graph_free; - st->init= graph_init; - st->duplicate= graph_duplicate; - st->operatortypes= graphedit_operatortypes; - st->keymap= graphedit_keymap; - st->listener= graph_listener; - st->refresh= graph_refresh; + st->new = graph_new; + st->free = graph_free; + st->init = graph_init; + st->duplicate = graph_duplicate; + st->operatortypes = graphedit_operatortypes; + st->keymap = graphedit_keymap; + st->listener = graph_listener; + st->refresh = graph_refresh; /* regions: main window */ - art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); + art = MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); art->regionid = RGN_TYPE_WINDOW; - art->init= graph_main_area_init; - art->draw= graph_main_area_draw; - art->listener= graph_region_listener; - art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS|ED_KEYMAP_ANIMATION|ED_KEYMAP_FRAMES; + art->init = graph_main_area_init; + art->draw = graph_main_area_draw; + art->listener = graph_region_listener; + art->keymapflag = ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS|ED_KEYMAP_ANIMATION|ED_KEYMAP_FRAMES; BLI_addhead(&st->regiontypes, art); /* regions: header */ - art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); + art = MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); art->regionid = RGN_TYPE_HEADER; - art->prefsizey= HEADERY; - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_HEADER; - art->listener= graph_region_listener; - art->init= graph_header_area_init; - art->draw= graph_header_area_draw; + art->prefsizey = HEADERY; + art->keymapflag = ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_HEADER; + art->listener = graph_region_listener; + art->init = graph_header_area_init; + art->draw = graph_header_area_draw; BLI_addhead(&st->regiontypes, art); /* regions: channels */ - art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); + art = MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); art->regionid = RGN_TYPE_CHANNELS; - art->prefsizex= 200+V2D_SCROLL_WIDTH; /* 200 is the 'standard', but due to scrollers, we want a bit more to fit the lock icons in */ - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; - art->listener= graph_region_listener; - art->init= graph_channel_area_init; - art->draw= graph_channel_area_draw; + art->prefsizex = 200 + V2D_SCROLL_WIDTH; /* 200 is the 'standard', but due to scrollers, we want a bit more to fit the lock icons in */ + art->keymapflag = ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; + art->listener = graph_region_listener; + art->init = graph_channel_area_init; + art->draw = graph_channel_area_draw; BLI_addhead(&st->regiontypes, art); /* regions: UI buttons */ - art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); + art = MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); art->regionid = RGN_TYPE_UI; - art->prefsizex= 200; - art->keymapflag= ED_KEYMAP_UI; - art->listener= graph_region_listener; - art->init= graph_buttons_area_init; - art->draw= graph_buttons_area_draw; + art->prefsizex = 200; + art->keymapflag = ED_KEYMAP_UI; + art->listener = graph_region_listener; + art->init = graph_buttons_area_init; + art->draw = graph_buttons_area_draw; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index 793e5712c8c..aab628180c8 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -606,7 +606,7 @@ static void draw_image_view_tool(Scene *scene) if (draw) { getmouseco_areawin(mval); - radius = brush_size(brush) * G.sima->zoom; + radius = BKE_brush_size_get(brush) * G.sima->zoom; fdrawXORcirc(mval[0], mval[1], radius); if (brush->innerradius != 1.0) { diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index d9f3ffafb14..bbc12520978 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -334,6 +334,7 @@ void IMAGE_OT_view_pan(wmOperatorType *ot) /* identifiers */ ot->name = "View Pan"; ot->idname = "IMAGE_OT_view_pan"; + ot->description = "Pan the view"; /* api callbacks */ ot->exec = image_view_pan_exec; @@ -471,6 +472,7 @@ void IMAGE_OT_view_zoom(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom"; ot->idname = "IMAGE_OT_view_zoom"; + ot->description = "Zoom in/out the image"; /* api callbacks */ ot->exec = image_view_zoom_exec; @@ -539,6 +541,7 @@ void IMAGE_OT_view_ndof(wmOperatorType *ot) /* identifiers */ ot->name = "NDOF Pan/Zoom"; ot->idname = "IMAGE_OT_view_ndof"; + ot->description = "Use a 3D mouse device to pan/zoom the view"; /* api callbacks */ ot->invoke = image_view_ndof_invoke; @@ -592,6 +595,7 @@ void IMAGE_OT_view_all(wmOperatorType *ot) /* identifiers */ ot->name = "View All"; ot->idname = "IMAGE_OT_view_all"; + ot->description = "View the whole picture"; /* api callbacks */ ot->exec = image_view_all_exec; @@ -653,6 +657,7 @@ void IMAGE_OT_view_selected(wmOperatorType *ot) /* identifiers */ ot->name = "View Center"; ot->idname = "IMAGE_OT_view_selected"; + ot->description = "View all selected UVs"; /* api callbacks */ ot->exec = image_view_selected_exec; @@ -692,6 +697,7 @@ void IMAGE_OT_view_zoom_in(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom In"; ot->idname = "IMAGE_OT_view_zoom_in"; + ot->description = "Zoom in the image (centered around 2D cursor)"; /* api callbacks */ ot->invoke = image_view_zoom_in_invoke; @@ -733,6 +739,7 @@ void IMAGE_OT_view_zoom_out(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom Out"; ot->idname = "IMAGE_OT_view_zoom_out"; + ot->description = "Zoom out the image (centered around 2D cursor)"; /* api callbacks */ ot->invoke = image_view_zoom_out_invoke; @@ -775,6 +782,7 @@ void IMAGE_OT_view_zoom_ratio(wmOperatorType *ot) /* identifiers */ ot->name = "View Zoom Ratio"; ot->idname = "IMAGE_OT_view_zoom_ratio"; + ot->description = "Set zoom ration of the view"; /* api callbacks */ ot->exec = image_view_zoom_ratio_exec; @@ -978,6 +986,7 @@ void IMAGE_OT_replace(wmOperatorType *ot) /* identifiers */ ot->name = "Replace Image"; ot->idname = "IMAGE_OT_replace"; + ot->description = "Replace current image by another one from disk"; /* api callbacks */ ot->exec = image_replace_exec; @@ -1316,6 +1325,7 @@ void IMAGE_OT_save_as(wmOperatorType *ot) /* identifiers */ ot->name = "Save As Image"; ot->idname = "IMAGE_OT_save_as"; + ot->description = "Save the image with another name and/or settings"; /* api callbacks */ ot->exec = image_save_as_exec; @@ -1362,6 +1372,7 @@ void IMAGE_OT_save(wmOperatorType *ot) /* identifiers */ ot->name = "Save Image"; ot->idname = "IMAGE_OT_save"; + ot->description = "Save the image with current name and settings"; /* api callbacks */ ot->exec = image_save_exec; @@ -1439,6 +1450,7 @@ void IMAGE_OT_save_sequence(wmOperatorType *ot) /* identifiers */ ot->name = "Save Sequence"; ot->idname = "IMAGE_OT_save_sequence"; + ot->description = "Save a sequence of images"; /* api callbacks */ ot->exec = image_save_sequence_exec; @@ -1474,6 +1486,7 @@ void IMAGE_OT_reload(wmOperatorType *ot) /* identifiers */ ot->name = "Reload Image"; ot->idname = "IMAGE_OT_reload"; + ot->description = "Reload current image from disk"; /* api callbacks */ ot->exec = image_reload_exec; @@ -1646,6 +1659,7 @@ void IMAGE_OT_invert(wmOperatorType *ot) /* identifiers */ ot->name = "Invert Channels"; ot->idname = "IMAGE_OT_invert"; + ot->description = "Invert image's channels"; /* api callbacks */ ot->exec = image_invert_exec; @@ -2021,6 +2035,7 @@ void IMAGE_OT_sample(wmOperatorType *ot) /* identifiers */ ot->name = "Sample Color"; ot->idname = "IMAGE_OT_sample"; + ot->description = "Use mouse to sample a color in current image"; /* api callbacks */ ot->invoke = image_sample_invoke; @@ -2130,6 +2145,7 @@ void IMAGE_OT_sample_line(wmOperatorType *ot) /* identifiers */ ot->name = "Sample Line"; ot->idname = "IMAGE_OT_sample_line"; + ot->description = "Sample a line and show it in Scope panels"; /* api callbacks */ ot->invoke = image_sample_line_invoke; @@ -2157,6 +2173,7 @@ void IMAGE_OT_curves_point_set(wmOperatorType *ot) /* identifiers */ ot->name = "Set Curves Point"; ot->idname = "IMAGE_OT_curves_point_set"; + ot->description = "Set black or white point for curves"; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -2362,6 +2379,7 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot) /* identifiers */ ot->name = "Cycle Render Slot"; ot->idname = "IMAGE_OT_cycle_render_slot"; + ot->description = "Cycle through all non-void render slots"; /* api callbacks */ ot->exec = image_cycle_render_slot_exec; diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c index 5256fc8f044..080f12bf35b 100644 --- a/source/blender/editors/space_info/info_ops.c +++ b/source/blender/editors/space_info/info_ops.c @@ -107,6 +107,7 @@ void FILE_OT_pack_all(wmOperatorType *ot) /* identifiers */ ot->name = "Pack All"; ot->idname = "FILE_OT_pack_all"; + ot->description = "Pack all used external files into the .blend"; /* api callbacks */ ot->exec = pack_all_exec; @@ -175,6 +176,7 @@ void FILE_OT_unpack_all(wmOperatorType *ot) /* identifiers */ ot->name = "Unpack All"; ot->idname = "FILE_OT_unpack_all"; + ot->description = "Unpack all files packed into this .blend to external ones"; /* api callbacks */ ot->exec = unpack_all_exec; @@ -198,7 +200,7 @@ static int make_paths_relative_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - makeFilesRelative(bmain, bmain->name, op->reports); + BLI_bpath_relative_convert(bmain, bmain->name, op->reports); /* redraw everything so any changed paths register */ WM_main_add_notifier(NC_WINDOW, NULL); @@ -211,6 +213,7 @@ void FILE_OT_make_paths_relative(wmOperatorType *ot) /* identifiers */ ot->name = "Make All Paths Relative"; ot->idname = "FILE_OT_make_paths_relative"; + ot->description = "Make all paths to external files relative to current .blend"; /* api callbacks */ ot->exec = make_paths_relative_exec; @@ -230,7 +233,7 @@ static int make_paths_absolute_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - makeFilesAbsolute(bmain, bmain->name, op->reports); + BLI_bpath_absolute_convert(bmain, bmain->name, op->reports); /* redraw everything so any changed paths register */ WM_main_add_notifier(NC_WINDOW, NULL); @@ -243,6 +246,7 @@ void FILE_OT_make_paths_absolute(wmOperatorType *ot) /* identifiers */ ot->name = "Make All Paths Absolute"; ot->idname = "FILE_OT_make_paths_absolute"; + ot->description = "Make all paths to external files absolute"; /* api callbacks */ ot->exec = make_paths_absolute_exec; @@ -258,7 +262,7 @@ static int report_missing_files_exec(bContext *C, wmOperator *op) Main *bmain = CTX_data_main(C); /* run the missing file check */ - checkMissingFiles(bmain, op->reports); + BLI_bpath_missing_files_check(bmain, op->reports); return OPERATOR_FINISHED; } @@ -268,6 +272,7 @@ void FILE_OT_report_missing_files(wmOperatorType *ot) /* identifiers */ ot->name = "Report Missing Files"; ot->idname = "FILE_OT_report_missing_files"; + ot->description = "Report all missing external files"; /* api callbacks */ ot->exec = report_missing_files_exec; @@ -282,7 +287,7 @@ static int find_missing_files_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); const char *searchpath = RNA_string_get_alloc(op->ptr, "filepath", NULL, 0); - findMissingFiles(bmain, searchpath, op->reports); + BLI_bpath_missing_files_find(bmain, searchpath, op->reports); MEM_freeN((void *)searchpath); return OPERATOR_FINISHED; @@ -300,6 +305,7 @@ void FILE_OT_find_missing_files(wmOperatorType *ot) /* identifiers */ ot->name = "Find Missing Files"; ot->idname = "FILE_OT_find_missing_files"; + ot->description = "Try to find missing external files"; /* api callbacks */ ot->exec = find_missing_files_exec; @@ -414,6 +420,7 @@ void INFO_OT_reports_display_update(wmOperatorType *ot) /* identifiers */ ot->name = "Update Reports Display"; ot->idname = "INFO_OT_reports_display_update"; + ot->description = "Update the display of reports in Blender UI (internal use)"; /* api callbacks */ ot->invoke = update_reports_display_invoke; diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 2ef8f6c306c..0cc212f9c34 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -60,8 +60,9 @@ typedef struct SceneStats { int totedge, totedgesel; int totface, totfacesel; int totbone, totbonesel; - int totobj, totobjsel; - int totmesh, totlamp, totcurve; + int totobj, totobjsel; + int totlamp, totlampsel; + int tottri, totmesh, totcurve; char infostr[512]; } SceneStats; @@ -94,6 +95,9 @@ static void stats_object(Object *ob, int sel, int totob, SceneStats *stats) } case OB_LAMP: stats->totlamp += totob; + if (sel) { + stats->totlampsel += totob; + } break; case OB_SURF: case OB_CURVE: @@ -150,6 +154,8 @@ static void stats_object_edit(Object *obedit, SceneStats *stats) stats->totface = em->bm->totface; stats->totfacesel = em->bm->totfacesel; + + stats->tottri = em->tottri; } else if (obedit->type == OB_ARMATURE) { /* Armature Edit */ @@ -363,31 +369,25 @@ static void stats_string(Scene *scene) s += sprintf(s, "(Key) "); if (scene->obedit->type == OB_MESH) { - if (scene->toolsettings->selectmode & SCE_SELECT_VERTEX) - s += sprintf(s, "Ve:%d-%d | Ed:%d-%d | Fa:%d-%d", - stats->totvertsel, stats->totvert, stats->totedgesel, stats->totedge, stats->totfacesel, stats->totface); - else if (scene->toolsettings->selectmode & SCE_SELECT_EDGE) - s += sprintf(s, "Ed:%d-%d | Fa:%d-%d", - stats->totedgesel, stats->totedge, stats->totfacesel, stats->totface); - else - s += sprintf(s, "Fa:%d-%d", stats->totfacesel, stats->totface); + s += sprintf(s, "Verts:%d/%d | Edges:%d/%d | Faces:%d/%d | Tris:%d", + stats->totvertsel, stats->totvert, stats->totedgesel, stats->totedge, stats->totfacesel, stats->totface, stats->tottri); } else if (scene->obedit->type == OB_ARMATURE) { - s += sprintf(s, "Ve:%d-%d | Bo:%d-%d", stats->totvertsel, stats->totvert, stats->totbonesel, stats->totbone); + s += sprintf(s, "Verts:%d/%d | Bones:%d/%d", stats->totvertsel, stats->totvert, stats->totbonesel, stats->totbone); } else { - s += sprintf(s, "Ve:%d-%d", stats->totvertsel, stats->totvert); + s += sprintf(s, "Verts:%d/%d", stats->totvertsel, stats->totvert); } strcat(s, memstr); } else if (ob && (ob->mode & OB_MODE_POSE)) { - s += sprintf(s, "Bo:%d-%d %s", + s += sprintf(s, "Bones:%d/%d %s", stats->totbonesel, stats->totbone, memstr); } else { - s += sprintf(s, "Ve:%d | Fa:%d | Ob:%d-%d | La:%d%s", - stats->totvert, stats->totface, stats->totobjsel, stats->totobj, stats->totlamp, memstr); + s += sprintf(s, "Verts:%d | Faces:%d | Objects:%d/%d | Lamps:%d/%d%s", + stats->totvert, stats->totface, stats->totobjsel, stats->totobj, stats->totlampsel, stats->totlamp, memstr); } if (ob) diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index 22df7432ecb..71aef18666b 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -104,7 +104,8 @@ static int cut_links_exec(bContext *C, wmOperator *op) float mcoords[256][2]; int i= 0; - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c index cac4fe04765..1e976cebafd 100644 --- a/source/blender/editors/space_logic/logic_ops.c +++ b/source/blender/editors/space_logic/logic_ops.c @@ -198,7 +198,7 @@ static int edit_actuator_invoke_properties(bContext *C, wmOperator *op) bActuator *act = ptr.data; Object *ob = ptr.id.data; - RNA_string_set(op->ptr, "actuator",act->name); + RNA_string_set(op->ptr, "actuator", act->name); RNA_string_set(op->ptr, "object", ob->id.name+2); return 1; } diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index 9f5ae19d92c..184357344e1 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -909,7 +909,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf if (*count==0) return NULL; if (*count>24) *count= 24; /* temporal */ - idar= MEM_callocN( (*count)*sizeof(void *), "idar"); + idar= MEM_callocN((*count)*sizeof(void *), "idar"); ob= bmain->object.first; nr= 0; @@ -1181,9 +1181,9 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short ts= sens->data; - // uiDefBut(block, TEX, 1, "Property:", xco,yco-22,width, 19, &ts->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); - uiDefIDPoinBut(block, test_matpoin_but, ID_MA, 1, "MA:",(short)(xco + 10),(short)(yco-44), (short)(width - 20), 19, &ts->ma, "Only look for floors with this Material"); - // uiDefButF(block, NUM, 1, "Margin:", xco+width/2,yco-44,width/2, 19, &ts->dist, 0.0, 10.0, 100, 0, "Extra margin (distance) for larger sensitivity"); + // uiDefBut(block, TEX, 1, "Property:", xco, yco-22, width, 19, &ts->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); + uiDefIDPoinBut(block, test_matpoin_but, ID_MA, 1, "MA:", (short)(xco + 10), (short)(yco-44), (short)(width - 20), 19, &ts->ma, "Only look for floors with this Material"); + // uiDefButF(block, NUM, 1, "Margin:", xco+width/2, yco-44, width/2, 19, &ts->dist, 0.0, 10.0, 100, 0, "Extra margin (distance) for larger sensitivity"); yco-= ysize; break; } @@ -1200,11 +1200,11 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short /* The collision sensor will become a generic collision (i.e. it */ /* absorb the old touch sensor). */ - uiDefButBitS(block, TOG, SENS_COLLISION_PULSE, B_REDR, "Pulse",(short)(xco + 10),(short)(yco - 44), + uiDefButBitS(block, TOG, SENS_COLLISION_PULSE, B_REDR, "Pulse", (short)(xco + 10), (short)(yco - 44), (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, "Changes to the set of colliding objects generated pulses"); - uiDefButBitS(block, TOG, SENS_COLLISION_MATERIAL, B_REDR, "M/P",(short)(xco + 10 + (0.20 * (width-20))),(short)(yco - 44), + uiDefButBitS(block, TOG, SENS_COLLISION_MATERIAL, B_REDR, "M/P", (short)(xco + 10 + (0.20 * (width-20))), (short)(yco - 44), (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, "Toggle collision on material or property"); @@ -1219,7 +1219,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short "Only look for Objects with this property"); } - /* uiDefButS(block, NUM, 1, "Damp:", xco+10+width-90,yco-24, 70, 19, &cs->damp, 0, 250, 0, 0, "For 'damp' time don't detect another collision"); */ + /* uiDefButS(block, NUM, 1, "Damp:", xco+10+width-90, yco-24, 70, 19, &cs->damp, 0, 250, 0, 0, "For 'damp' time don't detect another collision"); */ yco-= ysize; break; @@ -1234,11 +1234,11 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short draw_default_sensor_header(sens, block, xco, yco, width); ns= sens->data; - uiDefBut(block, TEX, 1, "Property:",(short)(10+xco),(short)(yco-44), (short)(width-20), 19, + uiDefBut(block, TEX, 1, "Property:", (short)(10+xco), (short)(yco-44), (short)(width-20), 19, &ns->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); - uiDefButF(block, NUM, 1, "Dist",(short)(10+xco),(short)(yco-68),(short)((width-22)/2), 19, + uiDefButF(block, NUM, 1, "Dist", (short)(10+xco), (short)(yco-68), (short)((width-22)/2), 19, &ns->dist, 0.0, 1000.0, 1000, 0, "Trigger distance"); - uiDefButF(block, NUM, 1, "Reset",(short)(10+xco+(width-22)/2), (short)(yco-68), (short)((width-22)/2), 19, + uiDefButF(block, NUM, 1, "Reset", (short)(10+xco+(width-22)/2), (short)(yco-68), (short)((width-22)/2), 19, &ns->resetdist, 0.0, 1000.0, 1000, 0, "Reset distance"); yco-= ysize; break; @@ -1255,7 +1255,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short rs= sens->data; uiDefBut(block, TEX, 1, "Prop:", - (short)(10+xco),(short)(yco-44), (short)(0.7 * (width-20)), 19, + (short)(10+xco), (short)(yco-44), (short)(0.7 * (width-20)), 19, &rs->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); @@ -1338,25 +1338,25 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short str= "Type %t|Equal %x0|Not Equal %x1|Interval %x2|Changed %x3"; /* str= "Type %t|Equal %x0|Not Equal %x1"; */ - uiDefButI(block, MENU, B_REDR, str, xco+30,yco-44,width-60, 19, + uiDefButI(block, MENU, B_REDR, str, xco+30, yco-44, width-60, 19, &ps->type, 0, 31, 0, 0, "Type"); if (ps->type != SENS_PROP_EXPRESSION) { - uiDefBut(block, TEX, 1, "Prop: ", xco+30,yco-68,width-60, 19, + uiDefBut(block, TEX, 1, "Prop: ", xco+30, yco-68, width-60, 19, ps->name, 0, MAX_NAME, 0, 0, "Property name"); } if (ps->type == SENS_PROP_INTERVAL) { - uiDefBut(block, TEX, 1, "Min: ", xco,yco-92,width/2, 19, + uiDefBut(block, TEX, 1, "Min: ", xco, yco-92, width/2, 19, ps->value, 0, MAX_NAME, 0, 0, "check for min value"); - uiDefBut(block, TEX, 1, "Max: ", xco+width/2,yco-92,width/2, 19, + uiDefBut(block, TEX, 1, "Max: ", xco+width/2, yco-92, width/2, 19, ps->maxvalue, 0, MAX_NAME, 0, 0, "check for max value"); } else if (ps->type == SENS_PROP_CHANGED) { /* pass */ } else { - uiDefBut(block, TEX, 1, "Value: ", xco+30,yco-92,width-60, 19, + uiDefBut(block, TEX, 1, "Value: ", xco+30, yco-92, width-60, 19, ps->value, 0, MAX_NAME, 0, 0, "check for value"); } @@ -1390,11 +1390,11 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short str= "Type %t|State changed %x0|Lin error below %x1|Lin error above %x2|Rot error below %x3|Rot error above %x4"; - uiDefButI(block, MENU, B_REDR, str, xco+10,yco-66,0.4*(width-20), 19, + uiDefButI(block, MENU, B_REDR, str, xco+10, yco-66, 0.4*(width-20), 19, &arm->type, 0, 31, 0, 0, "Type"); if (arm->type != SENS_ARM_STATE_CHANGED) { - uiDefButF(block, NUM, 1, "Value: ", xco+10+0.4*(width-20),yco-66,0.6*(width-20), 19, + uiDefButF(block, NUM, 1, "Value: ", xco+10+0.4*(width-20), yco-66, 0.6*(width-20), 19, &arm->value, -10000.0, 10000.0, 100, 0, "Test the error against this value"); } } @@ -1412,7 +1412,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short draw_default_sensor_header(sens, block, xco, yco, width); as= sens->data; - uiDefBut(block, TEX, 1, "Act: ", xco+30,yco-44,width-60, 19, + uiDefBut(block, TEX, 1, "Act: ", xco+30, yco-44, width-60, 19, as->name, 0, MAX_NAME, 0, 0, "Actuator name, actuator active state modifications will be detected"); yco-= ysize; break; @@ -1428,11 +1428,11 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short draw_default_sensor_header(sens, block, xco, yco, width); ds = sens->data; - uiDefButS(block, NUM, 0, "Delay",(short)(10+xco),(short)(yco-44),(short)((width-22)*0.4+10), 19, + uiDefButS(block, NUM, 0, "Delay", (short)(10+xco), (short)(yco-44), (short)((width-22)*0.4+10), 19, &ds->delay, 0.0, 5000.0, 0, 0, "Delay in number of logic tics before the positive trigger (default 60 per second)"); - uiDefButS(block, NUM, 0, "Dur",(short)(10+xco+(width-22)*0.4+10),(short)(yco-44),(short)((width-22)*0.4-10), 19, + uiDefButS(block, NUM, 0, "Dur", (short)(10+xco+(width-22)*0.4+10), (short)(yco-44), (short)((width-22)*0.4-10), 19, &ds->duration, 0.0, 5000.0, 0, 0, "If >0, delay in number of logic tics before the negative trigger following the positive trigger"); - uiDefButBitS(block, TOG, SENS_DELAY_REPEAT, 0, "REP",(short)(xco + 10 + (width-22)*0.8),(short)(yco - 44), + uiDefButBitS(block, TOG, SENS_DELAY_REPEAT, 0, "REP", (short)(xco + 10 + (width-22)*0.8), (short)(yco - 44), (short)(0.20 * (width-22)), 19, &ds->flag, 0.0, 0.0, 0, 0, "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics"); yco-= ysize; @@ -1462,7 +1462,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short "Specify the type of event this mouse sensor should trigger on"); if (ms->type==32) { - uiDefButBitS(block, TOG, SENS_MOUSE_FOCUS_PULSE, B_REDR, "Pulse",(short)(xco + 10) + (width*0.8f)-20,(short)(yco - 44), + uiDefButBitS(block, TOG, SENS_MOUSE_FOCUS_PULSE, B_REDR, "Pulse", (short)(xco + 10) + (width*0.8f)-20, (short)(yco - 44), (short)(0.20 * (width-20)), 19, &ms->flag, 0.0, 0.0, 0, 0, "Moving the mouse over a different object generates a pulse"); } @@ -1481,7 +1481,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short randomSensor = sens->data; /* some files were wrongly written, avoid crash now */ if (randomSensor) { - uiDefButI(block, NUM, 1, "Seed: ", xco+10,yco-44,(width-20), 19, + uiDefButI(block, NUM, 1, "Seed: ", xco+10, yco-44, (width-20), 19, &randomSensor->seed, 0, 1000, 0, 0, "Initial seed of the generator. (Choose 0 for not random)"); } @@ -1499,7 +1499,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short /* 1. property or material */ uiDefButBitS(block, TOG, SENS_COLLISION_MATERIAL, B_REDR, "M/P", - xco + 10,yco - 44, 0.20 * (width-20), 19, + xco + 10, yco - 44, 0.20 * (width-20), 19, &raySens->mode, 0.0, 0.0, 0, 0, "Toggle collision on material or property"); @@ -1516,7 +1516,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short /* X-Ray option */ uiDefButBitS(block, TOG, SENS_RAY_XRAY, 1, "X", - xco + 10,yco - 68, 0.10 * (width-20), 19, + xco + 10, yco - 68, 0.10 * (width-20), 19, &raySens->mode, 0.0, 0.0, 0, 0, "Toggle X-Ray option (see through objects that don't have the property)"); /* 2. sensing range */ @@ -1612,7 +1612,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short &joy->axis, 1, 8.0, 100, 0, "Specify which axis pair to use, 1 is useually the main direction input"); - uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20),yco-44, 0.4 * (width-20), 19, + uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20), yco-44, 0.4 * (width-20), 19, &joy->precision, 0, 32768.0, 100, 0, "Specify the precision of the axis"); @@ -1640,7 +1640,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short &joy->axis_single, 1, 16.0, 100, 0, "Specify a single axis (verticle/horizontal/other) to detect"); - uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20),yco-44, 0.4 * (width-20), 19, + uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20), yco-44, 0.4 * (width-20), 19, &joy->precision, 0, 32768.0, 100, 0, "Specify the precision of the axis"); } @@ -1668,10 +1668,10 @@ static short draw_controllerbuttons(bController *cont, uiBlock *block, short xco glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - /* uiDefBut(block, LABEL, 1, "Not yet...", xco,yco-24,80, 19, NULL, 0, 0, 0, 0, ""); */ + /* uiDefBut(block, LABEL, 1, "Not yet...", xco, yco-24, 80, 19, NULL, 0, 0, 0, 0, ""); */ ec= cont->data; - /* uiDefBut(block, BUT, 1, "Variables", xco,yco-24,80, 19, NULL, 0, 0, 0, 0, "Available variables for expression"); */ - uiDefBut(block, TEX, 1, "Exp:", xco + 10 , yco-21, width-20, 19, + /* uiDefBut(block, BUT, 1, "Variables", xco, yco-24, 80, 19, NULL, 0, 0, 0, 0, "Available variables for expression"); */ + uiDefBut(block, TEX, 1, "Exp:", xco + 10, yco-21, width-20, 19, ec->str, 0, sizeof(ec->str), 0, 0, "Expression"); @@ -1689,11 +1689,11 @@ static short draw_controllerbuttons(bController *cont, uiBlock *block, short xco uiBlockBeginAlign(block); - uiDefButI(block, MENU, B_REDR, "Execution Method%t|Script%x0|Module%x1", xco+4,yco-23, 66, 19, &pc->mode, 0, 0, 0, 0, "Python script type (textblock or module - faster)"); + uiDefButI(block, MENU, B_REDR, "Execution Method%t|Script%x0|Module%x1", xco+4, yco-23, 66, 19, &pc->mode, 0, 0, 0, 0, "Python script type (textblock or module - faster)"); if (pc->mode==0) - uiDefIDPoinBut(block, test_scriptpoin_but, ID_TXT, 1, "", xco+70,yco-23,width-74, 19, &pc->text, "Blender textblock to run as a script"); + uiDefIDPoinBut(block, test_scriptpoin_but, ID_TXT, 1, "", xco+70, yco-23, width-74, 19, &pc->text, "Blender textblock to run as a script"); else { - uiDefBut(block, TEX, 1, "", xco+70,yco-23,(width-70)-25, 19, pc->module, 0, sizeof(pc->module), 0, 0, "Module name and function to run e.g. \"someModule.main\". Internal texts and external python files can be used"); + uiDefBut(block, TEX, 1, "", xco+70, yco-23, (width-70)-25, 19, pc->module, 0, sizeof(pc->module), 0, 0, "Module name and function to run e.g. \"someModule.main\". Internal texts and external python files can be used"); uiDefButBitI(block, TOG, CONT_PY_DEBUG, B_REDR, "D", (xco+width)-25, yco-23, 19, 19, &pc->flag, 0, 0, 0, 0, "Continuously reload the module from disk for editing external modules without restarting"); } uiBlockEndAlign(block); @@ -1930,7 +1930,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButBitS(block, TOG, ACT_LIN_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-129, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); uiDefButBitS(block, TOG, ACT_ANG_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-148, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); - uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV"); + uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive", xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV"); } } else if (oa->type == ACT_OBJECT_SERVO) { @@ -2014,22 +2014,22 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo if (aa->type == ACT_ACTION_FROM_PROP) { - uiDefBut(block, TEX, 0, "Prop: ",xco+10, yco-44, width-20, 19, aa->name, 0.0, MAX_NAME, 0, 0, "Use this property to define the Action position"); + uiDefBut(block, TEX, 0, "Prop: ", xco+10, yco-44, width-20, 19, aa->name, 0.0, MAX_NAME, 0, 0, "Use this property to define the Action position"); } else { - uiDefButF(block, NUM, 0, "Sta: ",xco+10, yco-44, (width-20)/2, 19, &aa->sta, 1.0, MAXFRAMEF, 0, 0, "Start frame"); - uiDefButF(block, NUM, 0, "End: ",xco+10+(width-20)/2, yco-44, (width-20)/2, 19, &aa->end, 1.0, MAXFRAMEF, 0, 0, "End frame"); + uiDefButF(block, NUM, 0, "Sta: ", xco+10, yco-44, (width-20)/2, 19, &aa->sta, 1.0, MAXFRAMEF, 0, 0, "Start frame"); + uiDefButF(block, NUM, 0, "End: ", xco+10+(width-20)/2, yco-44, (width-20)/2, 19, &aa->end, 1.0, MAXFRAMEF, 0, 0, "End frame"); } uiDefButS(block, NUM, 0, "Blendin: ", xco+10, yco-64, (width-20)/2, 19, &aa->blendin, 0.0, 32767, 0.0, 0.0, "Number of frames of motion blending"); uiDefButS(block, NUM, 0, "Priority: ", xco+10+(width-20)/2, yco-64, (width-20)/2, 19, &aa->priority, 0.0, 100.0, 0.0, 0.0, "Execution priority - lower numbers will override actions with higher numbers, With 2 or more actions at once, the overriding channels must be lower in the stack"); - uiDefBut(block, TEX, 0, "FrameProp: ",xco+10, yco-84, width-20, 19, aa->frameProp, 0.0, MAX_NAME, 0, 0, "Assign the action's current frame number to this property"); + uiDefBut(block, TEX, 0, "FrameProp: ", xco+10, yco-84, width-20, 19, aa->frameProp, 0.0, MAX_NAME, 0, 0, "Assign the action's current frame number to this property"); #ifdef __NLA_ACTION_BY_MOTION_ACTUATOR if (aa->type == ACT_ACTION_MOTION) { - uiDefButF(block, NUM, 0, "Cycle: ",xco+30, yco-84, (width-60)/2, 19, &aa->stridelength, 0.0, 2500.0, 0, 0, "Distance covered by a single cycle of the action"); + uiDefButF(block, NUM, 0, "Cycle: ", xco+30, yco-84, (width-60)/2, 19, &aa->stridelength, 0.0, 2500.0, 0, 0, "Distance covered by a single cycle of the action"); } #endif @@ -2109,9 +2109,9 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo pa= act->data; str= "Type%t|Assign%x0|Add %x1|Copy %x2|Toggle (bool/int/float/timer)%x3"; - uiDefButI(block, MENU, B_REDR, str, xco+30,yco-24,width-60, 19, &pa->type, 0, 31, 0, 0, "Type"); + uiDefButI(block, MENU, B_REDR, str, xco+30, yco-24, width-60, 19, &pa->type, 0, 31, 0, 0, "Type"); - uiDefBut(block, TEX, 1, "Prop: ", xco+30,yco-44,width-60, 19, pa->name, 0, MAX_NAME, 0, 0, "Property name"); + uiDefBut(block, TEX, 1, "Prop: ", xco+30, yco-44, width-60, 19, pa->name, 0, MAX_NAME, 0, 0, "Property name"); if (pa->type==ACT_PROP_TOGGLE) { @@ -2123,7 +2123,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefBut(block, TEX, 1, "Prop: ", xco+10+(width-20)/2, yco-64, (width-20)/2, 19, pa->value, 0, MAX_NAME, 0, 0, "Copy this property"); } else { - uiDefBut(block, TEX, 1, "Value: ", xco+30,yco-64,width-60, 19, pa->value, 0, MAX_NAME, 0, 0, "change with this value, use \"\" around strings"); + uiDefBut(block, TEX, 1, "Value: ", xco+30, yco-64, width-60, 19, pa->value, 0, MAX_NAME, 0, 0, "change with this value, use \"\" around strings"); } yco-= ysize; @@ -2147,20 +2147,20 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo IDnames_to_pupstring(&str, "Sound files", NULL, &(bmain->sound), (ID *)sa->sound, &(sa->sndnr)); /* reset this value, it is for handling the event */ sa->sndnr = 0; - uiDefButS(block, MENU, B_SOUNDACT_BROWSE, str, xco+10,yco-22,20,19, &(sa->sndnr), 0, 0, 0, 0, ""); + uiDefButS(block, MENU, B_SOUNDACT_BROWSE, str, xco+10, yco-22, 20, 19, &(sa->sndnr), 0, 0, 0, 0, ""); uiDefButO(block, BUT, "sound.open", 0, "Load Sound", xco+wval+10, yco-22, wval, 19, "Load a sound file (remember to set caching on for small sounds that are played often)"); if (sa->sound) { char dummy_str[] = "Sound mode %t|Play Stop %x0|Play End %x1|Loop Stop %x2|" "Loop End %x3|Loop Ping Pong Stop %x5|Loop Ping Pong %x4"; - uiDefBut(block, TEX, B_IDNAME, "SO:",xco+30,yco-22,wval-20,19, + uiDefBut(block, TEX, B_IDNAME, "SO:", xco+30, yco-22, wval-20, 19, ((ID *)sa->sound)->name+2, 0.0, MAX_ID_NAME-2, 0, 0, ""); - uiDefButS(block, MENU, 1, dummy_str,xco+10,yco-44,width-20, 19, + uiDefButS(block, MENU, 1, dummy_str, xco+10, yco-44, width-20, 19, &sa->type, 0.0, 0.0, 0, 0, ""); - uiDefButF(block, NUM, 0, "Volume:", xco+10,yco-66,wval, 19, &sa->volume, + uiDefButF(block, NUM, 0, "Volume:", xco+10, yco-66, wval, 19, &sa->volume, 0.0, 1.0, 0, 0, "Sets the volume of this sound"); - uiDefButF(block, NUM, 0, "Pitch:",xco+wval+10,yco-66,wval, 19, &sa->pitch,-12.0, + uiDefButF(block, NUM, 0, "Pitch:", xco+wval+10, yco-66, wval, 19, &sa->pitch, -12.0, 12.0, 0, 0, "Sets the pitch of this sound"); uiDefButS(block, TOG | BIT, 0, "3D Sound", xco+10, yco-88, width-20, 19, &sa->flag, 0.0, 1.0, 0.0, 0.0, "Plays the sound positioned in 3D space"); @@ -2531,8 +2531,8 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo ysize = 48; glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44,width-20,19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this blend file, use the \"//\" prefix for a path relative to the current blend file"); -// uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64,width-20,19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); + uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this blend file, use the \"//\" prefix for a path relative to the current blend file"); +// uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64, width-20, 19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); } #if 0 else if (gma->type == ACT_GAME_START) { @@ -2540,8 +2540,8 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44,width-20,19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this file"); - uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64,width-20,19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); + uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this file"); + uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64, width-20, 19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); } #endif else if (ELEM4(gma->type, ACT_GAME_RESTART, ACT_GAME_QUIT, ACT_GAME_SAVECFG, ACT_GAME_LOADCFG)) { @@ -2657,7 +2657,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo randAct = act->data; /* 1. seed */ - uiDefButI(block, NUM, 1, "Seed: ", (xco+10),yco-24, 0.4 *(width-20), 19, + uiDefButI(block, NUM, 1, "Seed: ", (xco+10), yco-24, 0.4 *(width-20), 19, &randAct->seed, 0, 1000, 0, 0, "Initial seed of the random generator. Use Python for more freedom. " " (Choose 0 for not random)"); @@ -2777,21 +2777,21 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo /* line 3: Text/Property */ uiDefButBitS(block, TOG, 1, B_REDR, "T/P", - (xco+10),(yco-(myline*24)), (0.20 * (width-20)), 19, + (xco+10), (yco-(myline*24)), (0.20 * (width-20)), 19, &ma->bodyType, 0.0, 0.0, 0, 0, "Toggle message type: either Text or a PropertyName"); if (ma->bodyType == ACT_MESG_MESG) { /* line 3: Message Body */ uiDefBut(block, TEX, 1, "Body: ", - (xco+10+(0.20*(width-20))),(yco-(myline++*24)),(0.8*(width-20)),19, + (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, &ma->body, 0, MAX_NAME, 0, 0, "Optional message body Text"); } else { /* line 3: Property body (set by property) */ uiDefBut(block, TEX, 1, "Propname: ", - (xco+10+(0.20*(width-20))),(yco-(myline++*24)),(0.8*(width-20)),19, + (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, &ma->body, 0, MAX_NAME, 0, 0, "The message body will be set by the Property Value"); } @@ -2805,17 +2805,17 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo if (tdfa->type == ACT_2DFILTER_CUSTOMFILTER) { ysize +=20; } - glRects( xco, yco-ysize, xco+width, yco ); - uiEmboss( (float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1 ); + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); switch (tdfa->type) { case ACT_2DFILTER_MOTIONBLUR: if (!tdfa->flag) { - uiDefButS(block, TOG, B_REDR, "D", xco+30,yco-44,19, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Disable Motion Blur"); - uiDefButF(block, NUM, B_REDR, "Value:", xco+52,yco-44,width-82,19,&tdfa->float_arg,0.0,1.0,0.0,0.0,"Set motion blur value"); + uiDefButS(block, TOG, B_REDR, "D", xco+30, yco-44, 19, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Disable Motion Blur"); + uiDefButF(block, NUM, B_REDR, "Value:", xco+52, yco-44, width-82, 19, &tdfa->float_arg, 0.0, 1.0, 0.0, 0.0, "Set motion blur value"); } else { - uiDefButS(block, TOG, B_REDR, "Disabled", xco+30,yco-44,width-60, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Enable Motion Blur"); + uiDefButS(block, TOG, B_REDR, "Disabled", xco+30, yco-44, width-60, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Enable Motion Blur"); } break; case ACT_2DFILTER_BLUR: @@ -2831,18 +2831,18 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo case ACT_2DFILTER_NOFILTER: case ACT_2DFILTER_DISABLED: case ACT_2DFILTER_ENABLED: - uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set filter order"); + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); break; case ACT_2DFILTER_CUSTOMFILTER: - uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set filter order"); - uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width-60, 19, &tdfa->text, ""); + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); + uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30, yco-64, width-60, 19, &tdfa->text, ""); break; } str= "2D Filter %t|Motion Blur %x1|Blur %x2|Sharpen %x3|Dilation %x4|Erosion %x5|" "Laplacian %x6|Sobel %x7|Prewitt %x8|Gray Scale %x9|Sepia %x10|Invert %x11|Custom Filter %x12|" "Enable Filter %x-2|Disable Filter %x-1|Remove Filter %x0|"; - uiDefButS(block, MENU, B_REDR, str, xco+30,yco-24,width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type"); + uiDefButS(block, MENU, B_REDR, str, xco+30, yco-24, width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type"); yco -= ysize; break; @@ -2912,7 +2912,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo ysize += 40; break; case ACT_ARM_SETWEIGHT: - uiDefButF(block, NUM, B_REDR, "Weight:", xco+5+(width-10)*0.35,yco-24,(width-10)*0.65,19,&armAct->weight,0.0,1.0,0.0,0.0,"Set weight of this constraint"); + uiDefButF(block, NUM, B_REDR, "Weight:", xco+5+(width-10)*0.35, yco-24, (width-10)*0.65, 19, &armAct->weight, 0.0, 1.0, 0.0, 0.0, "Set weight of this constraint"); break; } } @@ -3024,7 +3024,7 @@ static uiBlock *controller_menu(bContext *C, ARegion *ar, void *UNUSED(arg)) uiBlockSetButmFunc(block, do_controller_menu, NULL); uiDefBut(block, BUTM, 1, "Show Objects", 0, (short)(yco-=20), 160, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefBut(block, BUTM, 1, "Hide Objects", 0,(short)(yco-=20), 160, 19, NULL, 0.0, 0.0, 1, 1, ""); + uiDefBut(block, BUTM, 1, "Hide Objects", 0, (short)(yco-=20), 160, 19, NULL, 0.0, 0.0, 1, 1, ""); uiDefBut(block, SEPR, 0, "", 0, (short)(yco-=6), 160, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefBut(block, BUTM, 1, "Show Controllers", 0, (short)(yco-=20), 160, 19, NULL, 0.0, 0.0, 2, 2, ""); uiDefBut(block, BUTM, 1, "Hide Controllers", 0, (short)(yco-=20), 160, 19, NULL, 0.0, 0.0, 3, 3, ""); @@ -3846,7 +3846,7 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_force_distance")==1); uiItemR(sub, ptr, "distance", 0, "", ICON_NONE); - uiItemR(layout, ptr, "damping", UI_ITEM_R_SLIDER , NULL, ICON_NONE); + uiItemR(layout, ptr, "damping", UI_ITEM_R_SLIDER, NULL, ICON_NONE); split = uiLayoutSplit(layout, 0.15, 0); uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, ICON_NONE); @@ -3867,7 +3867,7 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext uiItemR(layout, ptr, "direction_axis_pos", 0, NULL, ICON_NONE); row=uiLayoutRow(layout, 1); - uiItemR(row, ptr, "damping", UI_ITEM_R_SLIDER , NULL, ICON_NONE); + uiItemR(row, ptr, "damping", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "time", 0, NULL, ICON_NONE); row=uiLayoutRow(layout, 0); @@ -3881,16 +3881,16 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext case ACT_CONST_TYPE_FH: split=uiLayoutSplit(layout, 0.75, 0); row= uiLayoutRow(split, 0); - uiItemR(row, ptr, "fh_damping", UI_ITEM_R_SLIDER , NULL, ICON_NONE); + uiItemR(row, ptr, "fh_damping", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "fh_height", 0, NULL, ICON_NONE); - uiItemR(split, ptr, "use_fh_paralel_axis", UI_ITEM_R_TOGGLE , NULL, ICON_NONE); + uiItemR(split, ptr, "use_fh_paralel_axis", UI_ITEM_R_TOGGLE, NULL, ICON_NONE); row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "direction_axis", 0, NULL, ICON_NONE); split = uiLayoutSplit(row, 0.9, 0); uiItemR(split, ptr, "fh_force", 0, NULL, ICON_NONE); - uiItemR(split, ptr, "use_fh_normal", UI_ITEM_R_TOGGLE , NULL, ICON_NONE); + uiItemR(split, ptr, "use_fh_normal", UI_ITEM_R_TOGGLE, NULL, ICON_NONE); split = uiLayoutSplit(layout, 0.15, 0); uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, ICON_NONE); @@ -4549,7 +4549,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar) uiItemR(split, &settings_ptr, "show_state_panel", UI_ITEM_R_NO_BG, "", ICON_DISCLOSURE_TRI_RIGHT); row = uiLayoutRow(split, 1); - uiDefButBitS(block, TOG, OB_SHOWCONT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide controllers"); + uiDefButBitS(block, TOG, OB_SHOWCONT, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide controllers"); if (ob == act_ob) uiItemMenuEnumO(row, "LOGIC_OT_controller_add", "type", "Add Controller", ICON_NONE); @@ -4644,7 +4644,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar) if ((ob->scavisflag & OB_VIS_SENS) == 0) continue; row = uiLayoutRow(layout, 1); - uiDefButBitS(block, TOG, OB_SHOWSENS, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide sensors"); + uiDefButBitS(block, TOG, OB_SHOWSENS, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide sensors"); if (ob == act_ob) uiItemMenuEnumO(row, "LOGIC_OT_sensor_add", "type", "Add Sensor", ICON_NONE); @@ -4710,7 +4710,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar) if ( (ob->scavisflag & OB_VIS_ACT) == 0) continue; row = uiLayoutRow(layout, 1); - uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators"); + uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators"); if (ob == act_ob) uiItemMenuEnumO(row, "LOGIC_OT_actuator_add", "type", "Add Actuator", ICON_NONE); @@ -4839,9 +4839,9 @@ void logic_buttons(bContext *C, ARegion *ar) /* presume it is only objects for now */ uiBlockBeginAlign(block); // if (ob->controllers.first) uiSetCurFont(block, UI_HELVB); - uiDefButBitS(block, TOG, OB_SHOWCONT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Active Object name"); + uiDefButBitS(block, TOG, OB_SHOWCONT, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Active Object name"); // if (ob->controllers.first) uiSetCurFont(block, UI_HELV); - uiDefButBitS(block, TOG, OB_ADDCONT, B_ADD_CONT, "Add",(short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Controller"); + uiDefButBitS(block, TOG, OB_ADDCONT, B_ADD_CONT, "Add", (short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Controller"); uiBlockEndAlign(block); yco-=20; @@ -4878,9 +4878,9 @@ void logic_buttons(bContext *C, ARegion *ar) } } uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, OB_ALLSTATE, B_SET_STATE_BIT, "All",(short)(xco+226), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set all state bits"); - uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+248), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set the initial state"); - uiDefButBitS(block, TOG, OB_DEBUGSTATE, 0, "D",(short)(xco+270), yco-10, 15, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Print state debug info"); + uiDefButBitS(block, TOG, OB_ALLSTATE, B_SET_STATE_BIT, "All", (short)(xco+226), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set all state bits"); + uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini", (short)(xco+248), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set the initial state"); + uiDefButBitS(block, TOG, OB_DEBUGSTATE, 0, "D", (short)(xco+270), yco-10, 15, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Print state debug info"); uiBlockEndAlign(block); yco-=35; @@ -4913,7 +4913,7 @@ void logic_buttons(bContext *C, ARegion *ar) if (cont->flag & CONT_SHOW) { cont->otype= cont->type; - uiDefButS(block, MENU, B_CHANGE_CONT, controller_pup(),(short)(xco+22), yco, 70, UI_UNIT_Y, &cont->type, 0, 0, 0, 0, "Controller type"); + uiDefButS(block, MENU, B_CHANGE_CONT, controller_pup(), (short)(xco+22), yco, 70, UI_UNIT_Y, &cont->type, 0, 0, 0, 0, "Controller type"); but = uiDefBut(block, TEX, 1, "", (short)(xco+92), yco, (short)(width-158), UI_UNIT_Y, cont->name, 0, MAX_NAME, 0, 0, "Controller name"); uiButSetFunc(but, make_unique_prop_names_cb, cont->name, (void*) 0); @@ -4923,10 +4923,10 @@ void logic_buttons(bContext *C, ARegion *ar) } else { cpack(0x999999); - glRecti(xco+22, yco, xco+width-22,yco+19); + glRecti(xco+22, yco, xco+width-22, yco+19); but = uiDefBut(block, LABEL, 0, controller_name(cont->type), (short)(xco+22), yco, 70, UI_UNIT_Y, cont, 0, 0, 0, 0, "Controller type"); //uiButSetFunc(but, old_sca_move_controller, cont, NULL); - but = uiDefBut(block, LABEL, 0, cont->name,(short)(xco+92), yco,(short)(width-158), UI_UNIT_Y, cont, 0, 0, 0, 0, "Controller name"); + but = uiDefBut(block, LABEL, 0, cont->name, (short)(xco+92), yco, (short)(width-158), UI_UNIT_Y, cont, 0, 0, 0, 0, "Controller name"); //uiButSetFunc(but, old_sca_move_controller, cont, NULL); uiBlockBeginAlign(block); @@ -4942,7 +4942,7 @@ void logic_buttons(bContext *C, ARegion *ar) but = uiDefIconBut(block, LINK, 0, ICON_LINK, (short)(xco+width), ycoo, UI_UNIT_X, UI_UNIT_Y, NULL, 0, 0, 0, 0, ""); uiSetButLink(but, NULL, (void ***)&(cont->links), &cont->totlinks, LINK_CONTROLLER, LINK_ACTUATOR); - uiDefIconBut(block, INLINK, 0, ICON_INLINK,(short)(xco-19), ycoo, UI_UNIT_X, UI_UNIT_Y, cont, LINK_CONTROLLER, 0, 0, 0, ""); + uiDefIconBut(block, INLINK, 0, ICON_INLINK, (short)(xco-19), ycoo, UI_UNIT_X, UI_UNIT_Y, cont, LINK_CONTROLLER, 0, 0, 0, ""); /* offset is >0 if at least one controller was displayed */ offset++; yco-=20; @@ -4977,9 +4977,9 @@ void logic_buttons(bContext *C, ARegion *ar) /* presume it is only objects for now */ uiBlockBeginAlign(block); // if (ob->sensors.first) uiSetCurFont(block, UI_HELVB); - uiDefButBitS(block, TOG, OB_SHOWSENS, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide sensors"); + uiDefButBitS(block, TOG, OB_SHOWSENS, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide sensors"); // if (ob->sensors.first) uiSetCurFont(block, UI_HELV); - uiDefButBitS(block, TOG, OB_ADDSENS, B_ADD_SENS, "Add",(short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Sensor"); + uiDefButBitS(block, TOG, OB_ADDSENS, B_ADD_SENS, "Add", (short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Sensor"); uiBlockEndAlign(block); yco-=20; @@ -5014,7 +5014,7 @@ void logic_buttons(bContext *C, ARegion *ar) } else { set_col_sensor(sens->type, 1); - glRecti(xco+22, yco, xco+width-22,yco+19); + glRecti(xco + 22, yco, xco + width - 22, yco + 19); but = uiDefBut(block, LABEL, 0, sensor_name(sens->type), (short)(xco+22), yco, 80, UI_UNIT_Y, sens, 0, 0, 0, 0, ""); //uiButSetFunc(but, old_sca_move_sensor, sens, NULL); but = uiDefBut(block, LABEL, 0, sens->name, (short)(xco+102), yco, (short)(width-(pin?146:124)), UI_UNIT_Y, sens, 0, MAX_NAME, 0, 0, ""); @@ -5057,9 +5057,9 @@ void logic_buttons(bContext *C, ARegion *ar) /* presume it is only objects for now */ uiBlockBeginAlign(block); // if (ob->actuators.first) uiSetCurFont(block, UI_HELVB); - uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2,(short)(xco-10), yco,(short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators"); + uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2, (short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators"); // if (ob->actuators.first) uiSetCurFont(block, UI_HELV); - uiDefButBitS(block, TOG, OB_ADDACT, B_ADD_ACT, "Add",(short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Actuator"); + uiDefButBitS(block, TOG, OB_ADDACT, B_ADD_ACT, "Add", (short)(xco+width-40), yco, 50, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Add a new Actuator"); uiBlockEndAlign(block); yco-=20; @@ -5092,7 +5092,7 @@ void logic_buttons(bContext *C, ARegion *ar) } else { set_col_actuator(act->type, 1); - glRecti((short)(xco+22), yco, (short)(xco+width-22),(short)(yco+19)); + glRecti((short)(xco+22), yco, (short)(xco+width-22), (short)(yco+19)); /* but= */ uiDefBut(block, LABEL, 0, actuator_name(act->type), (short)(xco+22), yco, 90, UI_UNIT_Y, act, 0, 0, 0, 0, "Actuator type"); // uiButSetFunc(but, old_sca_move_actuator, act, NULL); /* but= */ uiDefBut(block, LABEL, 0, act->name, (short)(xco+112), yco, (short)(width-(pin?156:134)), UI_UNIT_Y, act, 0, 0, 0, 0, "Actuator name"); @@ -5108,7 +5108,7 @@ void logic_buttons(bContext *C, ARegion *ar) ycoo= yco; } - uiDefIconBut(block, INLINK, 0, ICON_INLINK,(short)(xco-19), ycoo, UI_UNIT_X, UI_UNIT_Y, act, LINK_ACTUATOR, 0, 0, 0, ""); + uiDefIconBut(block, INLINK, 0, ICON_INLINK, (short)(xco - 19), ycoo, UI_UNIT_X, UI_UNIT_Y, act, LINK_ACTUATOR, 0, 0, 0, ""); yco-=20; } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 94053c22fcb..69e1e089bf6 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -212,7 +212,7 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho /* offset for start of channel (on LHS of channel-list) */ if (ale->id) { /* special exception for materials and particles */ - if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) + if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) offset= 21 + NLACHANNEL_BUTTON_WIDTH; else offset= 14; @@ -342,7 +342,7 @@ static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *e return OPERATOR_FINISHED; } -void NLA_OT_channels_click (wmOperatorType *ot) +void NLA_OT_channels_click(wmOperatorType *ot) { /* identifiers */ ot->name = "Mouse Click on NLA Channels"; @@ -416,7 +416,7 @@ static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_tracks_add (wmOperatorType *ot) +void NLA_OT_tracks_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Track(s)"; @@ -480,7 +480,7 @@ static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_delete_tracks (wmOperatorType *ot) +void NLA_OT_delete_tracks(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Tracks"; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 7ed49025814..d331415bc46 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -534,7 +534,7 @@ static void nla_draw_strip_frames_text(NlaTrack *UNUSED(nlt), NlaStrip *strip, V /* ---------------------- */ -void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) +void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -920,7 +920,7 @@ static void draw_nla_channel_list_gl (bAnimContext *ac, ListBase *anim_data, Vie } } -void draw_nla_channel_list (bContext *C, bAnimContext *ac, ARegion *ar) +void draw_nla_channel_list(bContext *C, bAnimContext *ac, ARegion *ar) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 1a94b1160be..994021db9ff 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -76,7 +76,7 @@ /* Utilities exported to other places... */ /* Perform validation for blending/extend settings */ -void ED_nla_postop_refresh (bAnimContext *ac) +void ED_nla_postop_refresh(bAnimContext *ac) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -155,7 +155,7 @@ static int nlaedit_enable_tweakmode_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_tweakmode_enter (wmOperatorType *ot) +void NLA_OT_tweakmode_enter(wmOperatorType *ot) { /* identifiers */ ot->name = "Enter Tweak Mode"; @@ -220,7 +220,7 @@ static int nlaedit_disable_tweakmode_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_tweakmode_exit (wmOperatorType *ot) +void NLA_OT_tweakmode_exit(wmOperatorType *ot) { /* identifiers */ ot->name = "Exit Tweak Mode"; @@ -335,7 +335,7 @@ static int nlaedit_viewsel_exec(bContext *C, wmOperator *UNUSED(op)) return nlaedit_viewall(C, TRUE); } -void NLA_OT_view_all (wmOperatorType *ot) +void NLA_OT_view_all(wmOperatorType *ot) { /* identifiers */ ot->name = "View All"; @@ -350,7 +350,7 @@ void NLA_OT_view_all (wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } -void NLA_OT_view_selected (wmOperatorType *ot) +void NLA_OT_view_selected(wmOperatorType *ot) { /* identifiers */ ot->name = "View Selected"; @@ -468,7 +468,7 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_actionclip_add (wmOperatorType *ot) +void NLA_OT_actionclip_add(wmOperatorType *ot) { PropertyRNA *prop; @@ -595,7 +595,7 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) } } -void NLA_OT_transition_add (wmOperatorType *ot) +void NLA_OT_transition_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Transition"; @@ -680,7 +680,7 @@ static int nlaedit_add_sound_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_soundclip_add (wmOperatorType *ot) +void NLA_OT_soundclip_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Sound Clip"; @@ -742,7 +742,7 @@ static int nlaedit_add_meta_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_meta_add (wmOperatorType *ot) +void NLA_OT_meta_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Meta-Strips"; @@ -794,7 +794,7 @@ static int nlaedit_remove_meta_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_meta_remove (wmOperatorType *ot) +void NLA_OT_meta_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Meta-Strips"; @@ -897,7 +897,7 @@ static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED return OPERATOR_FINISHED; } -void NLA_OT_duplicate (wmOperatorType *ot) +void NLA_OT_duplicate(wmOperatorType *ot) { /* identifiers */ ot->name = "Duplicate Strips"; @@ -972,7 +972,7 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_delete (wmOperatorType *ot) +void NLA_OT_delete(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Strips"; @@ -1117,7 +1117,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_split (wmOperatorType *ot) +void NLA_OT_split(wmOperatorType *ot) { /* identifiers */ ot->name = "Split Strips"; @@ -1170,7 +1170,7 @@ static int nlaedit_bake_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_bake (wmOperatorType *ot) +void NLA_OT_bake(wmOperatorType *ot) { /* identifiers */ ot->name = "Bake Strips"; @@ -1232,7 +1232,7 @@ static int nlaedit_toggle_mute_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_mute_toggle (wmOperatorType *ot) +void NLA_OT_mute_toggle(wmOperatorType *ot) { /* identifiers */ ot->name = "Toggle Muting"; @@ -1389,7 +1389,7 @@ static int nlaedit_swap_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_swap (wmOperatorType *ot) +void NLA_OT_swap(wmOperatorType *ot) { /* identifiers */ ot->name = "Swap Strips"; @@ -1463,7 +1463,7 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_move_up (wmOperatorType *ot) +void NLA_OT_move_up(wmOperatorType *ot) { /* identifiers */ ot->name = "Move Strips Up"; @@ -1537,7 +1537,7 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_move_down (wmOperatorType *ot) +void NLA_OT_move_down(wmOperatorType *ot) { /* identifiers */ ot->name = "Move Strips Down"; @@ -1613,7 +1613,7 @@ static int nlaedit_sync_actlen_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_action_sync_length (wmOperatorType *ot) +void NLA_OT_action_sync_length(wmOperatorType *ot) { /* identifiers */ ot->name = "Sync Action Length"; @@ -1713,7 +1713,7 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_apply_scale (wmOperatorType *ot) +void NLA_OT_apply_scale(wmOperatorType *ot) { /* identifiers */ ot->name = "Apply Scale"; @@ -1776,7 +1776,7 @@ static int nlaedit_clear_scale_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } -void NLA_OT_clear_scale (wmOperatorType *ot) +void NLA_OT_clear_scale(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Scale"; @@ -1917,7 +1917,7 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_snap (wmOperatorType *ot) +void NLA_OT_snap(wmOperatorType *ot) { /* identifiers */ ot->name = "Snap Strips"; @@ -2036,7 +2036,7 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_fmodifier_add (wmOperatorType *ot) +void NLA_OT_fmodifier_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add F-Modifier"; @@ -2100,7 +2100,7 @@ static int nla_fmodifier_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_fmodifier_copy (wmOperatorType *ot) +void NLA_OT_fmodifier_copy(wmOperatorType *ot) { /* identifiers */ ot->name = "Copy F-Modifiers"; @@ -2162,7 +2162,7 @@ static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op) } } -void NLA_OT_fmodifier_paste (wmOperatorType *ot) +void NLA_OT_fmodifier_paste(wmOperatorType *ot) { /* identifiers */ ot->name = "Paste F-Modifiers"; diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 78fb92f2ee4..b320adc25fb 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -58,7 +58,7 @@ /* ************************** poll callbacks for operators **********************************/ /* tweakmode is NOT enabled */ -int nlaop_poll_tweakmode_off (bContext *C) +int nlaop_poll_tweakmode_off(bContext *C) { Scene *scene; @@ -80,7 +80,7 @@ int nlaop_poll_tweakmode_off (bContext *C) } /* tweakmode IS enabled */ -int nlaop_poll_tweakmode_on (bContext *C) +int nlaop_poll_tweakmode_on(bContext *C) { Scene *scene; @@ -102,7 +102,7 @@ int nlaop_poll_tweakmode_on (bContext *C) } /* is tweakmode enabled - for use in NLA operator code */ -short nlaedit_is_tweakmode_on (bAnimContext *ac) +short nlaedit_is_tweakmode_on(bAnimContext *ac) { if (ac && ac->scene) return (ac->scene->flag & SCE_NLA_EDIT_ON); diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index b0cd59ea7ad..cfd4a3202d2 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -183,7 +183,7 @@ static int nlaedit_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLA_OT_select_all_toggle (wmOperatorType *ot) +void NLA_OT_select_all_toggle(wmOperatorType *ot) { /* identifiers */ ot->name = "(De)select All"; @@ -254,8 +254,8 @@ static void borderselect_nla_strips (bAnimContext *ac, rcti rect, short mode, sh /* only select strips if they fall within the required ranges (if applicable) */ for (strip= nlt->strips.first; strip; strip= strip->next) { - if ( (mode == NLA_BORDERSEL_CHANNELS) || - BKE_nlastrip_within_bounds(strip, rectf.xmin, rectf.xmax) ) + if ( (mode == NLA_BORDERSEL_CHANNELS) || + BKE_nlastrip_within_bounds(strip, rectf.xmin, rectf.xmax)) { /* set selection */ ACHANNEL_SET_FLAG(strip, selectmode, NLASTRIP_FLAG_SELECT); @@ -481,7 +481,7 @@ static int nlaedit_select_leftright_invoke (bContext *C, wmOperator *op, wmEvent return nlaedit_select_leftright_exec(C, op); } -void NLA_OT_select_leftright (wmOperatorType *ot) +void NLA_OT_select_leftright(wmOperatorType *ot) { /* identifiers */ ot->name = "Select Left/Right"; @@ -643,7 +643,7 @@ static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void NLA_OT_click_select (wmOperatorType *ot) +void NLA_OT_click_select(wmOperatorType *ot) { /* identifiers */ ot->name = "Mouse Select"; diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 91ece361aac..bfa8111af3e 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -98,71 +98,23 @@ static void node_socket_button_label(const bContext *UNUSED(C), uiBlock *block, uiDefBut(block, LABEL, 0, sock->name, x, y, width, NODE_DY, NULL, 0, 0, 0, 0, ""); } -/* draw function for file output node sockets. - * XXX a bit ugly use atm, called from datatype button functions, - * since all node types and callbacks only use data type without struct_type. - */ -static void node_socket_button_output_file(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *UNUSED(name), int x, int y, int width) -{ - uiLayout *layout, *row; - PointerRNA nodeptr, sockptr, imfptr; - int imtype; - int rx, ry; - RNA_pointer_create(&ntree->id, &RNA_Node, node, &nodeptr); - RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &sockptr); - - layout = uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y+NODE_DY, width, 20, UI_GetStyle()); - row = uiLayoutRow(layout, 0); - - uiItemL(row, sock->name, 0); - - imfptr = RNA_pointer_get(&nodeptr, "format"); - imtype = RNA_enum_get(&imfptr, "file_format"); - /* in multilayer format all socket format details are ignored */ - if (imtype != R_IMF_IMTYPE_MULTILAYER) { - PropertyRNA *imtype_prop; - const char *imtype_name; - - if (!RNA_boolean_get(&sockptr, "use_node_format")) - imfptr = RNA_pointer_get(&sockptr, "format"); - - imtype_prop = RNA_struct_find_property(&imfptr, "file_format"); - RNA_property_enum_name((bContext*)C, &imfptr, imtype_prop, RNA_property_enum_get(&imfptr, imtype_prop), &imtype_name); - uiBlockSetEmboss(block, UI_EMBOSSP); - uiItemL(row, imtype_name, 0); - uiBlockSetEmboss(block, UI_EMBOSSN); - } - - uiBlockLayoutResolve(block, &rx, &ry); -} - static void node_socket_button_default(const bContext *C, uiBlock *block, bNodeTree *ntree, bNode *node, bNodeSocket *sock, const char *name, int x, int y, int width) { - switch (sock->struct_type) { - case SOCK_STRUCT_NONE: { - if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) - node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); - else { - PointerRNA ptr; - uiBut *bt; - - RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - - bt = uiDefButR(block, NUM, B_NODE_EXEC, name, - x, y+1, width, NODE_DY-2, - &ptr, "default_value", 0, 0, 0, -1, -1, NULL); - if (node) - uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); - } - break; - } - case SOCK_STRUCT_OUTPUT_FILE: - node_socket_button_output_file(C, block, ntree, node, sock, name, x, y, width); - break; + if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) + node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); + else { + PointerRNA ptr; + uiBut *bt; + + RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); + + bt = uiDefButR(block, NUM, B_NODE_EXEC, name, + x, y+1, width, NODE_DY-2, + &ptr, "default_value", 0, 0, 0, -1, -1, NULL); + if (node) + uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); } } @@ -192,33 +144,25 @@ static void node_socket_button_components(const bContext *C, uiBlock *block, bNodeTree *ntree, bNode *node, bNodeSocket *sock, const char *name, int x, int y, int width) { - switch (sock->struct_type) { - case SOCK_STRUCT_NONE: { - if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) - node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); - else { - PointerRNA ptr; - SocketComponentMenuArgs *args; - - RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - - args= MEM_callocN(sizeof(SocketComponentMenuArgs), "SocketComponentMenuArgs"); - - args->ptr = ptr; - args->x = x; - args->y = y; - args->width = width; - args->cb = node_sync_cb; - args->arg1 = CTX_wm_space_node(C); - args->arg2 = node; - - uiDefBlockButN(block, socket_component_menu, args, name, x, y+1, width, NODE_DY-2, ""); - } - break; - } - case SOCK_STRUCT_OUTPUT_FILE: - node_socket_button_output_file(C, block, ntree, node, sock, name, x, y, width); - break; + if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) + node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); + else { + PointerRNA ptr; + SocketComponentMenuArgs *args; + + RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); + + args= MEM_callocN(sizeof(SocketComponentMenuArgs), "SocketComponentMenuArgs"); + + args->ptr = ptr; + args->x = x; + args->y = y; + args->width = width; + args->cb = node_sync_cb; + args->arg1 = CTX_wm_space_node(C); + args->arg2 = node; + + uiDefBlockButN(block, socket_component_menu, args, name, x, y+1, width, NODE_DY-2, ""); } } @@ -226,35 +170,52 @@ static void node_socket_button_color(const bContext *C, uiBlock *block, bNodeTree *ntree, bNode *node, bNodeSocket *sock, const char *name, int x, int y, int width) { - /* XXX would be nicer to have draw function based on sock->struct_type as well, - * but currently socket types are completely identified by data type only. - */ - - switch (sock->struct_type) { - case SOCK_STRUCT_NONE: { - if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) - node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); - else { - PointerRNA ptr; - uiBut *bt; - int labelw= width - 40; - RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - - bt=uiDefButR(block, COL, B_NODE_EXEC, "", - x, y+2, (labelw>0 ? 40 : width), NODE_DY-2, - &ptr, "default_value", 0, 0, 0, -1, -1, NULL); - if (node) - uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); - - if (name[0]!='\0' && labelw>0) - uiDefBut(block, LABEL, 0, name, x + 40, y+2, labelw, NODE_DY-2, NULL, 0, 0, 0, 0, ""); - } - break; + if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) + node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); + else { + PointerRNA ptr; + uiBut *bt; + int labelw= width - 40; + RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); + + bt=uiDefButR(block, COL, B_NODE_EXEC, "", + x, y+2, (labelw>0 ? 40 : width), NODE_DY-2, + &ptr, "default_value", 0, 0, 0, -1, -1, NULL); + if (node) + uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); + + if (name[0]!='\0' && labelw>0) + uiDefBut(block, LABEL, 0, name, x + 40, y+2, labelw, NODE_DY-2, NULL, 0, 0, 0, 0, ""); } - case SOCK_STRUCT_OUTPUT_FILE: - node_socket_button_output_file(C, block, ntree, node, sock, name, x, y, width); - break; +} + +/* standard draw function, display the default input value */ +static void node_draw_input_default(const bContext *C, uiBlock *block, + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *name, int x, int y, int width) +{ + bNodeSocketType *stype = ntreeGetSocketType(sock->type); + if (stype->buttonfunc) + stype->buttonfunc(C, block, ntree, node, sock, name, x, y, width); + else + node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); +} + +static void node_draw_output_default(const bContext *C, uiBlock *block, + bNodeTree *UNUSED(ntree), bNode *node, bNodeSocket *sock, + const char *name, int UNUSED(x), int UNUSED(y), int UNUSED(width)) +{ + SpaceNode *snode = CTX_wm_space_node(C); + float slen; + int ofs = 0; + UI_ThemeColor(TH_TEXT); + slen= snode->aspect*UI_GetStringWidth(name); + while (slen > node->width) { + ofs++; + slen= snode->aspect*UI_GetStringWidth(name+ofs); } + uiDefBut(block, LABEL, 0, name+ofs, (short)(sock->locx-15.0f-slen), (short)(sock->locy-9.0f), + (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, ""); } /* ****************** BASE DRAW FUNCTIONS FOR NEW OPERATOR NODES ***************** */ @@ -266,7 +227,7 @@ static void node_draw_socket_new(bNodeSocket *sock, float size) /* 16 values of sin function */ static float si[16] = { - 0.00000000f, 0.39435585f,0.72479278f,0.93775213f, + 0.00000000f, 0.39435585f, 0.72479278f,0.93775213f, 0.99871650f,0.89780453f,0.65137248f,0.29936312f, -0.10116832f,-0.48530196f,-0.79077573f,-0.96807711f, -0.98846832f,-0.84864425f,-0.57126821f,-0.20129852f @@ -289,12 +250,12 @@ static void node_draw_socket_new(bNodeSocket *sock, float size) glColor4ub(0, 0, 0, 150); glEnable(GL_BLEND); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); glBegin(GL_LINE_LOOP); for (a=0; a<16; a++) glVertex2f(x+size*si[a], y+size*co[a]); glEnd(); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); } #endif @@ -442,7 +403,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) nodeSetActive(ntree, node); if ( ntree->type == NTREE_TEXTURE ) - ntreeTexCheckCyclics( ntree ); + ntreeTexCheckCyclics(ntree); // allqueue(REDRAWBUTSSHADING, 0); // allqueue(REDRAWNODE, 0); @@ -870,16 +831,16 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN /* group node outline */ uiSetRoundBox(UI_CNR_ALL); glColor4ub(200, 200, 200, 140); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); uiDrawBox(GL_LINE_LOOP, rect.xmin-node_group_frame, rect.ymin, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); /* backdrop title */ UI_ThemeColor(TH_TEXT_HI); layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+group_header), - MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, UI_GetStyle()); + MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, UI_GetStyle()); RNA_pointer_create(&ntree->id, &RNA_Node, gnode, &ptr); uiTemplateIDBrowse(layout, (bContext*)C, &ptr, "node_tree", NULL, NULL, NULL); uiBlockLayoutResolve(gnode->block, NULL, NULL); @@ -1635,9 +1596,14 @@ static void node_composit_buts_diff_matte(uiLayout *layout, bContext *UNUSED(C), static void node_composit_buts_distance_matte(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - uiLayout *col; + uiLayout *col, *row; col = uiLayoutColumn(layout, 1); + + uiItemL(layout, "Color Space:", ICON_NONE); + row= uiLayoutRow(layout, 0); + uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(col, ptr, "tolerance", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(col, ptr, "falloff", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } @@ -1647,7 +1613,7 @@ static void node_composit_buts_color_spill(uiLayout *layout, bContext *UNUSED(C) uiLayout *row, *col; uiItemL(layout, "Despill Channel:", ICON_NONE); - row = uiLayoutRow(layout,0); + row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); col= uiLayoutColumn(layout, 0); @@ -1655,7 +1621,7 @@ static void node_composit_buts_color_spill(uiLayout *layout, bContext *UNUSED(C) if (RNA_enum_get(ptr, "limit_method")==0) { uiItemL(col, "Limiting Channel:", ICON_NONE); - row=uiLayoutRow(col,0); + row=uiLayoutRow(col, 0); uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); } @@ -1710,7 +1676,7 @@ static void node_composit_buts_channel_matte(uiLayout *layout, bContext *UNUSED( uiItemR(col, ptr, "limit_method", 0, NULL, ICON_NONE); if (RNA_enum_get(ptr, "limit_method")==0) { uiItemL(col, "Limiting Channel:", ICON_NONE); - row=uiLayoutRow(col,0); + row=uiLayoutRow(col, 0); uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); } @@ -1738,6 +1704,43 @@ static void node_composit_buts_id_mask(uiLayout *layout, bContext *UNUSED(C), Po uiItemR(layout, ptr, "use_smooth_mask", 0, NULL, ICON_NONE); } +/* draw function for file output node sockets, displays only sub-path and format, no value button */ +static void node_draw_input_file_output(const bContext *C, uiBlock *block, + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *UNUSED(name), int x, int y, int width) +{ + NodeImageMultiFileSocket *input = sock->storage; + uiLayout *layout, *row; + PointerRNA nodeptr, inputptr, imfptr; + int imtype; + int rx, ry; + RNA_pointer_create(&ntree->id, &RNA_Node, node, &nodeptr); + RNA_pointer_create(&ntree->id, &RNA_NodeImageFileSocket, input, &inputptr); + + layout = uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y+NODE_DY, width, 20, UI_GetStyle()); + row = uiLayoutRow(layout, 0); + + uiItemL(row, input->path, 0); + + imfptr = RNA_pointer_get(&nodeptr, "format"); + imtype = RNA_enum_get(&imfptr, "file_format"); + /* in multilayer format all socket format details are ignored */ + if (imtype != R_IMF_IMTYPE_MULTILAYER) { + PropertyRNA *imtype_prop; + const char *imtype_name; + + if (!RNA_boolean_get(&inputptr, "use_node_format")) + imfptr = RNA_pointer_get(&inputptr, "format"); + + imtype_prop = RNA_struct_find_property(&imfptr, "file_format"); + RNA_property_enum_name((bContext*)C, &imfptr, imtype_prop, RNA_property_enum_get(&imfptr, imtype_prop), &imtype_name); + uiBlockSetEmboss(block, UI_EMBOSSP); + uiItemL(row, imtype_name, 0); + uiBlockSetEmboss(block, UI_EMBOSSN); + } + + uiBlockLayoutResolve(block, &rx, &ry); +} static void node_composit_buts_file_output(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { PointerRNA imfptr = RNA_pointer_get(ptr, "format"); @@ -1752,7 +1755,9 @@ static void node_composit_buts_file_output(uiLayout *layout, bContext *UNUSED(C) static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C, PointerRNA *ptr) { PointerRNA imfptr = RNA_pointer_get(ptr, "format"); - PointerRNA active_input_ptr = RNA_pointer_get(ptr, "active_input"); + PointerRNA active_input_ptr, op_ptr; + uiLayout *row; + int active_index; int multilayer = (RNA_enum_get(&imfptr, "file_format") == R_IMF_IMTYPE_MULTILAYER); node_composit_buts_file_output(layout, C, ptr); @@ -1762,7 +1767,16 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C uiItemO(layout, "Add Input", ICON_ZOOMIN, "NODE_OT_output_file_add_socket"); - uiTemplateList(layout, C, ptr, "inputs", ptr, "active_input_index", NULL, 0, 0, 0); + uiTemplateList(layout, C, ptr, "file_inputs", ptr, "active_input_index", NULL, 0, 0, 0); + + active_index = RNA_int_get(ptr, "active_input_index"); + RNA_property_collection_lookup_int(ptr, RNA_struct_find_property(ptr, "file_inputs"), active_index, &active_input_ptr); + + row = uiLayoutRow(layout, 1); + op_ptr = uiItemFullO(row, "NODE_OT_output_file_move_active_socket", "", ICON_TRIA_UP, NULL, WM_OP_INVOKE_DEFAULT, UI_ITEM_O_RETURN_PROPS); + RNA_enum_set(&op_ptr, "direction", 1); + op_ptr = uiItemFullO(row, "NODE_OT_output_file_move_active_socket", "", ICON_TRIA_DOWN, NULL, WM_OP_INVOKE_DEFAULT, UI_ITEM_O_RETURN_PROPS); + RNA_enum_set(&op_ptr, "direction", 2); if (active_input_ptr.data) { uiLayout *row, *col; @@ -1773,7 +1787,7 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C else uiItemL(col, "File Path:", 0); row = uiLayoutRow(col, 0); - uiItemR(row, &active_input_ptr, "name", 0, "", 0); + uiItemR(row, &active_input_ptr, "path", 0, "", 0); uiItemFullO(row, "NODE_OT_output_file_remove_active_socket", "", ICON_X, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_R_ICON_ONLY); /* in multilayer format all socket format details are ignored */ @@ -2028,6 +2042,7 @@ static void node_composit_set_butfunc(bNodeType *ntype) case CMP_NODE_OUTPUT_FILE: ntype->uifunc= node_composit_buts_file_output; ntype->uifuncbut= node_composit_buts_file_output_details; + ntype->drawinputfunc = node_draw_input_file_output; break; case CMP_NODE_DIFF_MATTE: ntype->uifunc=node_composit_buts_diff_matte; @@ -2287,6 +2302,8 @@ void ED_init_node_butfuncs(void) ntype->drawupdatefunc = node_update_default; ntype->uifunc = NULL; ntype->uifuncbut = NULL; + ntype->drawinputfunc = node_draw_input_default; + ntype->drawoutputfunc = node_draw_output_default; ntype->resize_area_func = node_resize_area_default; node_common_set_butfunc(ntype); diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c index f7d517915da..c92abf116c4 100644 --- a/source/blender/editors/space_node/node_buttons.c +++ b/source/blender/editors/space_node/node_buttons.c @@ -89,7 +89,7 @@ static void active_node_panel(const bContext *C, Panel *pa) SpaceNode *snode= CTX_wm_space_node(C); bNodeTree *ntree= (snode) ? snode->edittree : NULL; bNode *node = (ntree) ? nodeGetActive(ntree) : NULL; // xxx... for editing group nodes - uiLayout *layout= pa->layout; + uiLayout *layout; PointerRNA ptr; /* verify pointers, and create RNA pointer for the node */ @@ -100,6 +100,10 @@ static void active_node_panel(const bContext *C, Panel *pa) //else RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); + /* XXX nicer way to make sub-layout? */ + layout = uiLayoutColumn(pa->layout, 0); + uiLayoutSetContextPointer(layout, "node", &ptr); + /* draw this node's name, etc. */ uiItemR(layout, &ptr, "label", 0, NULL, ICON_NODE); uiItemS(layout); diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 040f921b6ac..3a920e16f8a 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -303,6 +303,7 @@ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node) layout= uiBlockLayout(node->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, locx+NODE_DYS, dy, node->butr.xmax, NODE_DY, UI_GetStyle()); + uiLayoutSetContextPointer(layout, "node", &ptr); node->typeinfo->uifunc(layout, (bContext *)C, &ptr); @@ -459,17 +460,17 @@ static void node_circle_draw(float x, float y, float size, char *col, int highli { /* 16 values of sin function */ static float si[16] = { - 0.00000000f, 0.39435585f,0.72479278f,0.93775213f, - 0.99871650f,0.89780453f,0.65137248f,0.29936312f, - -0.10116832f,-0.48530196f,-0.79077573f,-0.96807711f, - -0.98846832f,-0.84864425f,-0.57126821f,-0.20129852f + 0.00000000f, 0.39435585f, 0.72479278f, 0.93775213f, + 0.99871650f, 0.89780453f, 0.65137248f, 0.29936312f, + -0.10116832f, -0.48530196f, -0.79077573f, -0.96807711f, + -0.98846832f, -0.84864425f, -0.57126821f, -0.20129852f }; /* 16 values of cos function */ static float co[16] ={ - 1.00000000f,0.91895781f,0.68896691f,0.34730525f, - -0.05064916f,-0.44039415f,-0.75875812f,-0.95413925f, - -0.99486932f,-0.87434661f,-0.61210598f,-0.25065253f, - 0.15142777f,0.52896401f,0.82076344f,0.97952994f, + 1.00000000f, 0.91895781f, 0.68896691f, 0.34730525f, + -0.05064916f, -0.44039415f, -0.75875812f, -0.95413925f, + -0.99486932f, -0.87434661f, -0.61210598f, -0.25065253f, + 0.15142777f, 0.52896401f, 0.82076344f, 0.97952994f, }; int a; @@ -488,12 +489,12 @@ static void node_circle_draw(float x, float y, float size, char *col, int highli glColor4ub(0, 0, 0, 150); } glEnable(GL_BLEND); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); glBegin(GL_LINE_LOOP); for (a=0; a<16; a++) glVertex2f(x+size*si[a], y+size*co[a]); glEnd(); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); glLineWidth(1.0f); } @@ -547,7 +548,7 @@ static void node_draw_preview(bNodePreview *preview, rctf *prv) glPixelZoom(xscale, yscale); glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); /* premul graphics */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* premul graphics */ glColor4f(1.0, 1.0, 1.0, 1.0); glaDrawPixelsTex(prv->xmin, prv->ymin, preview->xsize, preview->ysize, GL_UNSIGNED_BYTE, preview->rect); @@ -691,7 +692,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN /* outline active and selected emphasis */ if ( node->flag & (NODE_ACTIVE|SELECT) ) { glEnable(GL_BLEND); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); /* using different shades of TH_TEXT_HI for the empasis, like triangle */ if ( node->flag & NODE_ACTIVE ) UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, -40); @@ -700,7 +701,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_LEFT); // round all corners except lower right uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); } @@ -711,41 +712,24 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN /* socket inputs, buttons */ for (sock= node->inputs.first; sock; sock= sock->next) { - bNodeSocketType *stype= ntreeGetSocketType(sock->type); - if (nodeSocketIsHidden(sock)) continue; node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE); - if (stype->buttonfunc) - stype->buttonfunc(C, node->block, ntree, node, sock, IFACE_(sock->name), sock->locx+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY); + node->typeinfo->drawinputfunc(C, node->block, ntree, node, sock, IFACE_(sock->name), + sock->locx+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY); } /* socket outputs */ for (sock= node->outputs.first; sock; sock= sock->next) { - PointerRNA sockptr; - - RNA_pointer_create((ID*)ntree, &RNA_NodeSocket, sock, &sockptr); - if (nodeSocketIsHidden(sock)) continue; node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE); - { - const char *name = IFACE_(sock->name); - float slen; - int ofs = 0; - UI_ThemeColor(TH_TEXT); - slen= snode->aspect*UI_GetStringWidth(name); - while (slen > node->width) { - ofs++; - slen= snode->aspect*UI_GetStringWidth(name+ofs); - } - uiDefBut(node->block, LABEL, 0, name+ofs, (short)(sock->locx-15.0f-slen), (short)(sock->locy-9.0f), - (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, ""); - } + node->typeinfo->drawoutputfunc(C, node->block, ntree, node, sock, IFACE_(sock->name), + sock->locx-node->width+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY); } /* preview */ @@ -786,14 +770,14 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b /* outline active and selected emphasis */ if ( node->flag & (NODE_ACTIVE|SELECT) ) { glEnable(GL_BLEND); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); /* using different shades of TH_TEXT_HI for the empasis, like triangle */ if ( node->flag & NODE_ACTIVE ) UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, -40); else UI_ThemeColorShadeAlpha(TH_TEXT_HI, -20, -120); uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); } @@ -939,7 +923,7 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d) //uiFreeBlocksWin(&sa->uiblocks, sa->win); /* only set once */ - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_MAP1_VERTEX_3); /* aspect+font, set each time */ diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index f38e3e0d272..5166387d6f4 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -2324,9 +2324,6 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) case MOUSEMOVE: if (in_out==SOCK_OUT) { - /* only target socket becomes hilighted */ - node_deselect_all_input_sockets(snode, 0); - if (node_find_indicated_socket(snode, &tnode, &tsock, SOCK_IN)) { if (nodeFindLink(snode->edittree, sock, tsock)==NULL) { if ( link->tosock!= tsock && (!tnode || (tnode!=node && link->tonode!=tnode)) ) { @@ -2340,9 +2337,6 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) ntreeUpdateTree(snode->edittree); } } - - /* hilight target socket */ - node_socket_select(tnode, tsock); } else { if (link->tonode || link->tosock) { @@ -2357,9 +2351,6 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) } } else { - /* only target socket becomes hilighted */ - node_deselect_all_output_sockets(snode, 0); - if (node_find_indicated_socket(snode, &tnode, &tsock, SOCK_OUT)) { if (nodeFindLink(snode->edittree, sock, tsock)==NULL) { if (nodeCountSocketLinks(snode->edittree, tsock) < tsock->limit) { @@ -2375,9 +2366,6 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) } } } - - /* hilight target socket */ - node_socket_select(tnode, tsock); } else { if (link->tonode || link->tosock) { @@ -2405,14 +2393,11 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) if (in_out==SOCK_OUT) node_remove_extra_links(snode, link->tosock, link); - /* deselect sockets after successful linking */ - node_deselect_all_input_sockets(snode, 0); - node_deselect_all_output_sockets(snode, 0); - /* when linking to group outputs, update the socket type */ /* XXX this should all be part of a generic update system */ if (!link->tonode) { - link->tosock->type = link->fromsock->type; + if(link->tosock->type != link->fromsock->type) + nodeSocketSetType(link->tosock, link->fromsock->type); } } else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) { @@ -2433,10 +2418,6 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) } snode->edittree->update |= NTREE_UPDATE_GROUP_OUT | NTREE_UPDATE_LINKS; } - - /* deselect sockets after successful linking */ - node_deselect_all_input_sockets(snode, 0); - node_deselect_all_output_sockets(snode, 0); } else nodeRemLink(snode->edittree, link); @@ -2477,10 +2458,6 @@ static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag) in_out = SOCK_IN; } } - - /* hilight source socket only */ - node_deselect_all_output_sockets(snode, 0); - node_socket_select(nldrag->node, nldrag->sock); } /* or an input? */ else if (node_find_indicated_socket(snode, &nldrag->node, &nldrag->sock, SOCK_IN)) { @@ -2503,10 +2480,6 @@ static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag) in_out = SOCK_OUT; } } - - /* hilight source socket only */ - node_deselect_all_input_sockets(snode, 0); - node_socket_select(nldrag->node, nldrag->sock); } return in_out; @@ -2651,7 +2624,8 @@ static int cut_links_exec(bContext *C, wmOperator *op) float mcoords[256][2]; int i= 0; - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); @@ -3590,12 +3564,16 @@ static int node_output_file_add_socket_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); SpaceNode *snode= CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; - bNode *node = nodeGetActive(ntree); + PointerRNA ptr; + bNodeTree *ntree; + bNode *node; char file_path[MAX_NAME]; - if (!node) + ptr = CTX_data_pointer_get(C, "node"); + if (!ptr.data) return OPERATOR_CANCELLED; + node = ptr.data; + ntree = ptr.id.data; RNA_string_get(op->ptr, "file_path", file_path); ntreeCompositOutputFileAddSocket(ntree, node, file_path, &scene->r.im_format); @@ -3627,11 +3605,14 @@ void NODE_OT_output_file_add_socket(wmOperatorType *ot) static int node_output_file_remove_active_socket_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceNode *snode= CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; - bNode *node = nodeGetActive(ntree); + PointerRNA ptr = CTX_data_pointer_get(C, "node"); + bNodeTree *ntree; + bNode *node; - if (!node) + if (!ptr.data) return OPERATOR_CANCELLED; + node = ptr.data; + ntree = ptr.id.data; if (!ntreeCompositOutputFileRemoveActiveSocket(ntree, node)) return OPERATOR_CANCELLED; @@ -3655,3 +3636,69 @@ void NODE_OT_output_file_remove_active_socket(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } + +/* ****************** Multi File Output Move Socket ******************* */ + +static int node_output_file_move_active_socket_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode= CTX_wm_space_node(C); + PointerRNA ptr = CTX_data_pointer_get(C, "node"); + bNode *node; + NodeImageMultiFile *nimf; + bNodeSocket *sock; + int direction; + + if (!ptr.data) + return OPERATOR_CANCELLED; + node = ptr.data; + nimf = node->storage; + + sock = BLI_findlink(&node->inputs, nimf->active_input); + if (!sock) + return OPERATOR_CANCELLED; + + direction = RNA_enum_get(op->ptr, "direction"); + + if (direction==1) { + bNodeSocket *before = sock->prev; + if (!before) + return OPERATOR_CANCELLED; + BLI_remlink(&node->inputs, sock); + BLI_insertlinkbefore(&node->inputs, before, sock); + --nimf->active_input; + } + else { + bNodeSocket *after = sock->next; + if (!after) + return OPERATOR_CANCELLED; + BLI_remlink(&node->inputs, sock); + BLI_insertlinkafter(&node->inputs, after, sock); + ++nimf->active_input; + } + + snode_notify(C, snode); + + return OPERATOR_FINISHED; +} + +void NODE_OT_output_file_move_active_socket(wmOperatorType *ot) +{ + static EnumPropertyItem direction_items[] = { + {1, "UP", 0, "Up", ""}, + {2, "DOWN", 0, "Down", ""}, + { 0, NULL, 0, NULL, NULL }}; + + /* identifiers */ + ot->name = "Move File Node Socket"; + ot->description = "Move the active input of a file output node up or down the list"; + ot->idname = "NODE_OT_output_file_move_active_socket"; + + /* callbacks */ + ot->exec = node_output_file_move_active_socket_exec; + ot->poll = composite_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "direction", direction_items, 2, "Direction", ""); +} diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index aa80f729343..17078443987 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -166,6 +166,7 @@ void NODE_OT_new_node_tree(struct wmOperatorType *ot); void NODE_OT_output_file_add_socket(struct wmOperatorType *ot); void NODE_OT_output_file_remove_active_socket(struct wmOperatorType *ot); +void NODE_OT_output_file_move_active_socket(struct wmOperatorType *ot); extern const char *node_context_dir[]; diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index e1493b5b1a5..1c681220016 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -103,6 +103,7 @@ void node_operatortypes(void) WM_operatortype_append(NODE_OT_output_file_add_socket); WM_operatortype_append(NODE_OT_output_file_remove_active_socket); + WM_operatortype_append(NODE_OT_output_file_move_active_socket); } void ED_operatormacros_node(void) @@ -130,6 +131,11 @@ void ED_operatormacros_node(void) ot = WM_operatortype_append_macro("NODE_OT_move_detach_links", "Detach", OPTYPE_UNDO|OPTYPE_REGISTER); ot->description = "Move a node to detach links"; WM_operatortype_macro_define(ot, "NODE_OT_links_detach"); + WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); + + ot = WM_operatortype_append_macro("NODE_OT_move_detach_links_release", "Detach", OPTYPE_UNDO|OPTYPE_REGISTER); + ot->description = "Move a node to detach links"; + WM_operatortype_macro_define(ot, "NODE_OT_links_detach"); mot = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_boolean_set(mot->ptr, "release_confirm", TRUE); } diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 4df60e6eede..a540f18b3a5 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -517,7 +517,7 @@ static int node_select_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_int_set(op->ptr, "mouse_x", event->mval[0]); RNA_int_set(op->ptr, "mouse_y", event->mval[1]); - return node_select_exec(C,op); + return node_select_exec(C, op); } diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index 7b2bbf3e285..042b668c9cc 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -77,7 +77,7 @@ static void outliner_height(SpaceOops *soops, ListBase *lb, int *h) TreeElement *te= lb->first; while (te) { TreeStoreElem *tselem= TREESTORE(te); - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) outliner_height(soops, &te->subtree, h); (*h) += UI_UNIT_Y; te= te->next; @@ -92,7 +92,7 @@ static void outliner_width(SpaceOops *soops, ListBase *lb, int *w) // TreeStoreElem *tselem= TREESTORE(te); // XXX fixme... te->xend is not set yet - if (!TSELEM_OPEN(tselem,soops)) { + if (!TSELEM_OPEN(tselem, soops)) { if (te->xend > *w) *w = te->xend; } @@ -117,7 +117,7 @@ static void outliner_rna_width(SpaceOops *soops, ListBase *lb, int *w, int start if (startx+100 > *w) *w = startx+100; - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) outliner_rna_width(soops, &te->subtree, w, startx+UI_UNIT_X); te= te->next; } @@ -505,7 +505,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar } } - if (TSELEM_OPEN(tselem,soops)) outliner_draw_restrictbuts(block, scene, ar, soops, &te->subtree); + if (TSELEM_OPEN(tselem, soops)) outliner_draw_restrictbuts(block, scene, ar, soops, &te->subtree); } } @@ -546,7 +546,7 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa ptr= &te->rnaptr; prop= te->directdata; - if (!(RNA_property_type(prop) == PROP_POINTER && (TSELEM_OPEN(tselem,soops))) ) + if (!(RNA_property_type(prop) == PROP_POINTER && (TSELEM_OPEN(tselem, soops))) ) uiDefAutoButR(block, ptr, prop, -1, "", ICON_NONE, sizex, (int)te->ys, OL_RNA_COL_SIZEX, UI_UNIT_Y-1); } else if (tselem->type == TSE_RNA_ARRAY_ELEM) { @@ -557,7 +557,7 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa } } - if (TSELEM_OPEN(tselem,soops)) outliner_draw_rnabuts(block, scene, ar, soops, sizex, &te->subtree); + if (TSELEM_OPEN(tselem, soops)) outliner_draw_rnabuts(block, scene, ar, soops, sizex, &te->subtree); } } @@ -783,7 +783,7 @@ static void outliner_draw_keymapbuts(uiBlock *block, ARegion *ar, SpaceOops *soo break; case OL_KM_MOUSE: str= keymap_mouse_menu(); - uiDefButS(block, MENU, 0, str, xstart,(int)te->ys+1, butw2, UI_UNIT_Y-1, &kmi->type, 0, 0, 0, 0, "Mouse button"); + uiDefButS(block, MENU, 0, str, xstart, (int)te->ys+1, butw2, UI_UNIT_Y-1, &kmi->type, 0, 0, 0, 0, "Mouse button"); xstart+= butw2+5; break; case OL_KM_TWEAK: @@ -814,7 +814,7 @@ static void outliner_draw_keymapbuts(uiBlock *block, ARegion *ar, SpaceOops *soo } } - if (TSELEM_OPEN(tselem,soops)) outliner_draw_keymapbuts(block, ar, soops, &te->subtree); + if (TSELEM_OPEN(tselem, soops)) outliner_draw_keymapbuts(block, ar, soops, &te->subtree); } } @@ -857,7 +857,7 @@ static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, Spa } } - if (TSELEM_OPEN(tselem,soops)) outliner_buttons(C, block, ar, soops, &te->subtree); + if (TSELEM_OPEN(tselem, soops)) outliner_buttons(C, block, ar, soops, &te->subtree); } } @@ -1185,7 +1185,7 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa uiSetRoundBox(UI_CNR_ALL); glColor4ub(255, 255, 255, 100); - uiRoundBox( (float)*offsx-0.5f*ufac, (float)ys-1.0f*ufac, (float)*offsx+UI_UNIT_Y-3.0f*ufac, (float)ys+UI_UNIT_Y-3.0f*ufac, UI_UNIT_Y/2.0f-2.0f*ufac); + uiRoundBox((float) * offsx-0.5f*ufac, (float)ys-1.0f*ufac, (float)*offsx+UI_UNIT_Y-3.0f*ufac, (float)ys+UI_UNIT_Y-3.0f*ufac, UI_UNIT_Y/2.0f-2.0f*ufac); glEnable(GL_BLEND); /* roundbox disables */ } @@ -1317,7 +1317,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene /* active circle */ if (active) { uiSetRoundBox(UI_CNR_ALL); - uiRoundBox( (float)startx+UI_UNIT_Y-1.5f*ufac, (float)*starty+2.0f*ufac, (float)startx+2.0f*UI_UNIT_Y-4.0f*ufac, (float)*starty+UI_UNIT_Y-1.0f*ufac, UI_UNIT_Y/2.0f-2.0f*ufac); + uiRoundBox((float)startx+UI_UNIT_Y-1.5f*ufac, (float)*starty+2.0f*ufac, (float)startx+2.0f*UI_UNIT_Y-4.0f*ufac, (float)*starty+UI_UNIT_Y-1.0f*ufac, UI_UNIT_Y/2.0f-2.0f*ufac); glEnable(GL_BLEND); /* roundbox disables it */ te->flag |= TE_ACTIVE; // for lookup in display hierarchies @@ -1332,7 +1332,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene icon_x = startx+5*ufac; // icons a bit higher - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) UI_icon_draw((float)icon_x, (float)*starty+2*ufac, ICON_DISCLOSURE_TRI_DOWN); else UI_icon_draw((float)icon_x, (float)*starty+2*ufac, ICON_DISCLOSURE_TRI_RIGHT); @@ -1371,7 +1371,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene offsx+= (int)(UI_UNIT_X + UI_GetStringWidth(te->name)); /* closed item, we draw the icons, not when it's a scene, or master-server list though */ - if (!TSELEM_OPEN(tselem,soops)) { + if (!TSELEM_OPEN(tselem, soops)) { if (te->subtree.first) { if (tselem->type==0 && te->idcode==ID_SCE); else if (tselem->type!=TSE_R_LAYER) { /* this tree element always has same amount of branches, so don't draw */ @@ -1397,7 +1397,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene te->ys= (float)*starty; te->xend= startx+offsx; - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { *starty-= UI_UNIT_Y; for (ten= te->subtree.first; ten; ten= ten->next) @@ -1430,7 +1430,7 @@ static void outliner_draw_hierarchy(SpaceOops *soops, ListBase *lb, int startx, *starty-= UI_UNIT_Y; - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) outliner_draw_hierarchy(soops, &te->subtree, startx+UI_UNIT_X, starty); } @@ -1454,12 +1454,12 @@ static void outliner_draw_struct_marks(ARegion *ar, SpaceOops *soops, ListBase * tselem= TREESTORE(te); /* selection status */ - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) if (tselem->type == TSE_RNA_STRUCT) glRecti(0, *starty+1, (int)ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, *starty+UI_UNIT_Y-1); *starty-= UI_UNIT_Y; - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { outliner_draw_struct_marks(ar, soops, &te->subtree, starty); if (tselem->type == TSE_RNA_STRUCT) fdrawline(0, (float)*starty+UI_UNIT_Y, ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, (float)*starty+UI_UNIT_Y); @@ -1480,7 +1480,7 @@ static void outliner_draw_selection(ARegion *ar, SpaceOops *soops, ListBase *lb, glRecti(0, *starty+1, (int)ar->v2d.cur.xmax, *starty+UI_UNIT_Y-1); } *starty-= UI_UNIT_Y; - if (TSELEM_OPEN(tselem,soops)) outliner_draw_selection(ar, soops, &te->subtree, starty); + if (TSELEM_OPEN(tselem, soops)) outliner_draw_selection(ar, soops, &te->subtree, starty); } } diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c index 62d93f62d0f..7b200e9593d 100644 --- a/source/blender/editors/space_outliner/outliner_edit.c +++ b/source/blender/editors/space_outliner/outliner_edit.c @@ -652,7 +652,7 @@ static void outliner_set_coordinates_element(SpaceOops *soops, TreeElement *te, te->ys= (float)(*starty); *starty-= UI_UNIT_Y; - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { TreeElement *ten; for (ten= te->subtree.first; ten; ten= ten->next) { outliner_set_coordinates_element(soops, ten, startx+UI_UNIT_X, starty); @@ -875,7 +875,7 @@ static void tree_element_show_hierarchy(Scene *scene, SpaceOops *soops, ListBase } else tselem->flag |= TSE_CLOSED; - if (TSELEM_OPEN(tselem,soops)) tree_element_show_hierarchy(scene, soops, &te->subtree); + if (TSELEM_OPEN(tselem, soops)) tree_element_show_hierarchy(scene, soops, &te->subtree); } } @@ -1140,7 +1140,7 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, ReportL } /* go over sub-tree */ - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) do_outliner_drivers_editop(soops, &te->subtree, reports, mode); } } @@ -1308,7 +1308,7 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa } /* go over sub-tree */ - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) do_outliner_keyingset_editop(soops, ks, &te->subtree, mode); } } diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index 5515ec45269..00b3979b074 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -99,7 +99,7 @@ static int outliner_select(SpaceOops *soops, ListBase *lb, int *index, short *se change |= 1; } } - else if (TSELEM_OPEN(tselem,soops)) { + else if (TSELEM_OPEN(tselem, soops)) { /* Only try selecting sub-elements if we haven't hit the right element yet * * Hack warning: diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index 13e86209f3a..89eb51f73ba 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -115,9 +115,9 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb, } } } - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { set_operation_types(soops, &te->subtree, - scenelevel, objectlevel, idlevel, datalevel); + scenelevel, objectlevel, idlevel, datalevel); } } } @@ -230,7 +230,7 @@ static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops * operation_cb(C, scene, te, tsep, tselem); } } - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { outliner_do_libdata_operation(C, scene, soops, &te->subtree, operation_cb); } } @@ -356,7 +356,7 @@ static void group_linkobs2scene_cb(bContext *UNUSED(C), Scene *scene, TreeElemen } else { /* link to scene */ - base= MEM_callocN( sizeof(Base), "add_base"); + base= MEM_callocN(sizeof(Base), "add_base"); BLI_addhead(&scene->base, base); base->lay= (1<<20)-1; /*v3d->lay;*/ /* would be nice to use the 3d layer but the include's not here */ gob->ob->flag |= SELECT; @@ -388,7 +388,7 @@ void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops *soop operation_cb(C, scene_owner ? scene_owner : scene_act, te, NULL, tselem); } } - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { outliner_do_object_operation(C, scene_act, soops, &te->subtree, operation_cb); } } @@ -495,7 +495,7 @@ static void outliner_do_data_operation(SpaceOops *soops, int type, int event, Li operation_cb(event, te, tselem); } } - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { outliner_do_data_operation(soops, type, event, &te->subtree, operation_cb); } } @@ -870,7 +870,7 @@ static void outliner_do_id_set_operation(SpaceOops *soops, int type, ListBase *l operation_cb(te, tselem, tsep, newid); } } - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { outliner_do_id_set_operation(soops, type, &te->subtree, newid, operation_cb); } } diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index e2d43386c5e..026132e1f16 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -538,7 +538,7 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree int index; temod->name = "Modifiers"; - for (index=0,md=ob->modifiers.first; md; index++,md=md->next) { + for (index=0, md=ob->modifiers.first; md; index++, md=md->next) { TreeElement *te = outliner_add_element(soops, &temod->subtree, ob, temod, TSE_MODIFIER, index); te->name= md->name; te->directdata = md; @@ -956,7 +956,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i te->name= RNA_struct_ui_name(ptr->type); /* If searching don't expand RNA entries */ - if (SEARCHING_OUTLINER(soops) && BLI_strcasecmp("RNA",te->name)==0) tselem->flag &= ~TSE_CHILDSEARCH; + if (SEARCHING_OUTLINER(soops) && BLI_strcasecmp("RNA", te->name)==0) tselem->flag &= ~TSE_CHILDSEARCH; iterprop= RNA_struct_iterator_property(ptr->type); tot= RNA_property_collection_length(ptr, iterprop); @@ -966,7 +966,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i if (!tselem->used) tselem->flag &= ~TSE_CLOSED; - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { for (a=0; a<tot; a++) outliner_add_element(soops, &te->subtree, (void*)ptr, te, TSE_RNA_PROPERTY, a); } @@ -988,13 +988,13 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i te->rnaptr= *ptr; /* If searching don't expand RNA entries */ - if (SEARCHING_OUTLINER(soops) && BLI_strcasecmp("RNA",te->name)==0) tselem->flag &= ~TSE_CHILDSEARCH; + if (SEARCHING_OUTLINER(soops) && BLI_strcasecmp("RNA", te->name)==0) tselem->flag &= ~TSE_CHILDSEARCH; if (proptype == PROP_POINTER) { pptr= RNA_property_pointer_get(ptr, prop); if (pptr.data) { - if (TSELEM_OPEN(tselem,soops)) + if (TSELEM_OPEN(tselem, soops)) outliner_add_element(soops, &te->subtree, (void*)&pptr, te, TSE_RNA_STRUCT, -1); else te->flag |= TE_LAZY_CLOSED; @@ -1003,7 +1003,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i else if (proptype == PROP_COLLECTION) { tot= RNA_property_collection_length(ptr, prop); - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { for (a=0; a<tot; a++) { RNA_property_collection_lookup_int(ptr, prop, a, &pptr); outliner_add_element(soops, &te->subtree, (void*)&pptr, te, TSE_RNA_STRUCT, a); @@ -1015,7 +1015,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i else if (ELEM3(proptype, PROP_BOOLEAN, PROP_INT, PROP_FLOAT)) { tot= RNA_property_array_length(ptr, prop); - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { for (a=0; a<tot; a++) outliner_add_element(soops, &te->subtree, (void*)ptr, te, TSE_RNA_ARRAY_ELEM, a); } @@ -1048,7 +1048,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i te->directdata= idv; te->name= km->idname; - if (TSELEM_OPEN(tselem,soops)) { + if (TSELEM_OPEN(tselem, soops)) { a= 0; for (kmi = km->items.first; kmi; kmi = kmi->next, a++) { @@ -1351,7 +1351,7 @@ static int outliner_filter_tree(SpaceOops *soops, ListBase *lb) /* flag as not a found item */ tselem->flag &= ~TSE_SEARCHMATCH; - if ((!TSELEM_OPEN(tselem,soops)) || outliner_filter_tree(soops, &te->subtree)==0) { + if ((!TSELEM_OPEN(tselem, soops)) || outliner_filter_tree(soops, &te->subtree)==0) { outliner_free_tree(&te->subtree); BLI_remlink(lb, te); diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 09d974fe4b8..4bc08242020 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -188,7 +188,8 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op) else if (RNA_struct_find_property(op->ptr, "files")) { /* used for image strip */ /* best guess, first images name */ - RNA_BEGIN (op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") + { char *name = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(seq_load->name, name, sizeof(seq_load->name)); MEM_freeN(name); @@ -420,7 +421,8 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad BLI_split_dir_part(seq_load.path, dir_only, sizeof(dir_only)); - RNA_BEGIN (op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") + { RNA_string_get(&itemptr, "name", file_only); BLI_join_dirfile(seq_load.path, sizeof(seq_load.path), dir_only, file_only); @@ -594,7 +596,8 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) strip = seq->strip; se = strip->stripdata; - RNA_BEGIN (op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") + { char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(se->name, filename, sizeof(se->name)); MEM_freeN(filename); diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 5431156de45..38a5151590e 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -926,7 +926,7 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq glTexCoord2f(1.0f, 1.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymax); glTexCoord2f(1.0f, 0.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymin); } - glEnd( ); + glEnd(); glBindTexture(GL_TEXTURE_2D, last_texid); glDisable(GL_TEXTURE_2D); glDeleteTextures(1, &texid); diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index d2b1cccfefc..b021c233f8c 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -201,7 +201,8 @@ static void seq_proxy_build_job(const bContext *C) WM_jobs_callbacks(steve, proxy_startjob, NULL, NULL, proxy_endjob); } - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if ((seq->flag & SELECT)) { context = seq_proxy_rebuild_context(pj->main, pj->scene, seq); link = BLI_genericNodeN(context); @@ -461,7 +462,8 @@ void deselect_all_seq(Scene *scene) if (ed == NULL) return; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { seq->flag &= ~SEQ_ALLSEL; } SEQ_END @@ -844,7 +846,8 @@ static int insert_gap(Scene *scene, int gap, int cfra) if (ed == NULL) return 0; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->startdisp >= cfra) { seq->start += gap; calc_sequence(scene, seq); @@ -870,7 +873,8 @@ static void UNUSED_FUNCTION(touch_seq_files) (Scene * scene) WM_cursor_wait(1); - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->flag & SELECT) { if (seq->type == SEQ_MOVIE) { if (seq->strip && seq->strip->stripdata) { @@ -897,7 +901,8 @@ static void set_filter_seq(Scene *scene) if (okee("Set Deinterlace") == 0) return; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->flag & SELECT) { if (seq->type == SEQ_MOVIE) { seq->flag |= SEQ_FILTERY; @@ -932,7 +937,8 @@ static void UNUSED_FUNCTION(seq_remap_paths) (Scene * scene) if (strcmp(to, from) == 0) return; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->flag & SELECT) { if (strncmp(seq->strip->dir, from, strlen(from)) == 0) { printf("found %s\n", seq->strip->dir); @@ -1477,7 +1483,8 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op) BLI_movelisttolist(ed->seqbasep, &newlist); if (cut_side != SEQ_SIDE_BOTH) { - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (cut_side == SEQ_SIDE_LEFT) { if (seq->startdisp >= cut_frame) { seq->flag &= ~SEQ_ALLSEL; @@ -2650,19 +2657,6 @@ void SEQUENCER_OT_copy(wmOperatorType *ot) /* properties */ } -static void seq_paste_add_sound(Scene *scene, Sequence *seq) -{ - if (seq->type == SEQ_META) { - Sequence *iseq; - for (iseq = seq->seqbase.first; iseq; iseq = iseq->next) { - seq_paste_add_sound(scene, iseq); - } - } - else if (seq->type == SEQ_SOUND) { - seq->scene_sound = sound_add_scene_sound_defaults(scene, seq); - } -} - static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op)) { Scene *scene = CTX_data_scene(C); @@ -2691,9 +2685,6 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op)) /* make sure the pasted strips have unique names between them */ for (; iseq; iseq = iseq->next) { seq_recursive_apply(iseq, apply_unique_name_cb, scene); - - /* restore valid sound_scene for newly added strips */ - seq_paste_add_sound(scene, iseq); } WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); @@ -3010,7 +3001,8 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op) } seq->strip->stripdata = se = MEM_callocN(len * sizeof(StripElem), "stripelem"); - RNA_BEGIN (op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") + { char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(se->name, filename, sizeof(se->name)); MEM_freeN(filename); diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index c40a809e6af..e63a3052d26 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -51,7 +51,7 @@ struct ARegion *sequencer_has_buttons_region(struct ScrArea *sa); /* sequencer_draw.c */ void draw_timeline_seq(const struct bContext *C, struct ARegion *ar); -void draw_image_seq(const struct bContext* C, struct Scene *scene,struct ARegion *ar, struct SpaceSeq *sseq, int cfra, int offset); +void draw_image_seq(const struct bContext* C, struct Scene *scene, struct ARegion *ar, struct SpaceSeq *sseq, int cfra, int offset); void seq_reset_imageofs(struct SpaceSeq *sseq); diff --git a/source/blender/editors/space_sequencer/sequencer_scopes.c b/source/blender/editors/space_sequencer/sequencer_scopes.c index 6b71591c471..2f5dff961fe 100644 --- a/source/blender/editors/space_sequencer/sequencer_scopes.c +++ b/source/blender/editors/space_sequencer/sequencer_scopes.c @@ -87,7 +87,7 @@ static void wform_put_line(int w, } static void wform_put_line_single( - int w, unsigned char *last_pos, unsigned char *new_pos, int col) + int w, unsigned char *last_pos, unsigned char *new_pos, int col) { if (last_pos > new_pos) { unsigned char *temp = new_pos; diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index f326052ea60..677bab37163 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -940,7 +940,8 @@ static short select_grouped_type(Editing *ed, Sequence *actseq) Sequence *seq; short changed = FALSE; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->type == actseq->type) { seq->flag |= SELECT; changed = TRUE; @@ -957,7 +958,8 @@ static short select_grouped_type_basic(Editing *ed, Sequence *actseq) short changed = FALSE; short is_sound = SEQ_IS_SOUND(actseq); - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (is_sound ? SEQ_IS_SOUND(seq) : !SEQ_IS_SOUND(seq)) { seq->flag |= SELECT; changed = TRUE; @@ -974,7 +976,8 @@ static short select_grouped_type_effect(Editing *ed, Sequence *actseq) short changed = FALSE; short is_effect = SEQ_IS_EFFECT(actseq); - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (is_effect ? SEQ_IS_EFFECT(seq) : !SEQ_IS_EFFECT(seq)) { seq->flag |= SELECT; changed = TRUE; @@ -995,7 +998,8 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) return changed; if (SEQ_HAS_PATH(actseq) && dir) { - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (SEQ_HAS_PATH(seq) && seq->strip && strcmp(seq->strip->dir, dir) == 0) { seq->flag |= SELECT; changed = TRUE; @@ -1005,7 +1009,8 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) } else if (actseq->type == SEQ_SCENE) { Scene *sce = actseq->scene; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->type == SEQ_SCENE && seq->scene == sce) { seq->flag |= SELECT; changed = TRUE; @@ -1015,7 +1020,8 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) } else if (actseq->type == SEQ_MOVIECLIP) { MovieClip *clip = actseq->clip; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (seq->type == SEQ_MOVIECLIP && seq->clip == clip) { seq->flag |= SELECT; changed = TRUE; @@ -1037,14 +1043,16 @@ static short select_grouped_effect(Editing *ed, Sequence *actseq) for (i = 0; i <= SEQ_EFFECT_MAX; i++) effects[i] = FALSE; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (ELEM3(actseq, seq->seq1, seq->seq2, seq->seq3)) { effects[seq->type] = TRUE; } } SEQ_END; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (effects[seq->type]) { if (seq->seq1) seq->seq1->flag |= SELECT; if (seq->seq2) seq->seq2->flag |= SELECT; @@ -1062,7 +1070,8 @@ static short select_grouped_time_overlap(Editing *ed, Sequence *actseq) Sequence *seq; short changed = FALSE; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { if (!((seq->startdisp >= actseq->enddisp) || (seq->enddisp < actseq->startdisp))) { seq->flag |= SELECT; changed = TRUE; @@ -1083,7 +1092,8 @@ static short select_grouped_effect_link(Editing *ed, Sequence *actseq) int machine = actseq->machine; SeqIterator iter; - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { seq->tmp= NULL; } SEQ_END; @@ -1153,7 +1163,8 @@ static int sequencer_select_grouped_exec(bContext *C, wmOperator *op) } if (extend == 0) { - SEQP_BEGIN (ed, seq) { + SEQP_BEGIN (ed, seq) + { seq->flag &= ~SELECT; changed = TRUE; } diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index ec340dd323e..e421ace75a0 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -466,6 +466,7 @@ static void sequencer_preview_area_listener(ARegion *ar, wmNotifier *wmn) case ND_FRAME: case ND_MARKERS: case ND_SEQUENCER: + case ND_RENDER_OPTIONS: ED_region_tag_redraw(ar); break; } diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index beccca51265..85eda858d24 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -44,6 +44,7 @@ #include "BKE_context.h" #include "BKE_screen.h" +#include "BKE_text.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -187,6 +188,7 @@ static void text_operatortypes(void) WM_operatortype_append(TEXT_OT_paste); WM_operatortype_append(TEXT_OT_copy); WM_operatortype_append(TEXT_OT_cut); + WM_operatortype_append(TEXT_OT_duplicate_line); WM_operatortype_append(TEXT_OT_convert_whitespace); WM_operatortype_append(TEXT_OT_uncomment); @@ -201,6 +203,8 @@ static void text_operatortypes(void) WM_operatortype_append(TEXT_OT_select_line); WM_operatortype_append(TEXT_OT_select_all); WM_operatortype_append(TEXT_OT_select_word); + + WM_operatortype_append(TEXT_OT_move_lines); WM_operatortype_append(TEXT_OT_jump); WM_operatortype_append(TEXT_OT_move); @@ -297,6 +301,8 @@ static void text_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "TEXT_OT_cut", DELKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "TEXT_OT_copy", INSERTKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "TEXT_OT_paste", INSERTKEY, KM_PRESS, KM_SHIFT, 0); + + WM_keymap_add_item(keymap, "TEXT_OT_duplicate_line", DKEY, KM_PRESS, KM_CTRL, 0); if (U.uiflag & USER_MMB_PASTE) { // XXX not dynamic kmi = WM_keymap_add_item(keymap, "TEXT_OT_paste", MIDDLEMOUSE, KM_PRESS, 0, 0); @@ -317,8 +323,10 @@ static void text_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "TEXT_OT_select_all", AKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "TEXT_OT_select_line", AKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0); WM_keymap_add_item(keymap, "TEXT_OT_select_word", LEFTMOUSE, KM_DBL_CLICK, 0, 0); - + RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_lines", UPARROWKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)->ptr, "direction", TXT_MOVE_LINE_UP); + RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_lines", DOWNARROWKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)->ptr, "direction", TXT_MOVE_LINE_DOWN); + WM_keymap_add_item(keymap, "TEXT_OT_indent", TABKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "TEXT_OT_unindent", TABKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "TEXT_OT_uncomment", DKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0); @@ -353,7 +361,6 @@ static void text_keymap(struct wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", ENDKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)->ptr, "type", FILE_BOTTOM); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR); - RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", DKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_NEXT_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", BACKSPACEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", DEL_PREV_CHAR); /* same as above [#26623] */ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", DELKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_NEXT_WORD); diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h index 2d297dd20d7..4f973e7076b 100644 --- a/source/blender/editors/space_text/text_intern.h +++ b/source/blender/editors/space_text/text_intern.h @@ -118,6 +118,7 @@ void TEXT_OT_refresh_pyconstraints(struct wmOperatorType *ot); void TEXT_OT_paste(struct wmOperatorType *ot); void TEXT_OT_copy(struct wmOperatorType *ot); void TEXT_OT_cut(struct wmOperatorType *ot); +void TEXT_OT_duplicate_line(struct wmOperatorType *ot); void TEXT_OT_convert_whitespace(struct wmOperatorType *ot); void TEXT_OT_uncomment(struct wmOperatorType *ot); @@ -136,6 +137,8 @@ void TEXT_OT_select_line(struct wmOperatorType *ot); void TEXT_OT_select_all(struct wmOperatorType *ot); void TEXT_OT_select_word(struct wmOperatorType *ot); +void TEXT_OT_move_lines(struct wmOperatorType *ot); + void TEXT_OT_jump(struct wmOperatorType *ot); void TEXT_OT_move(struct wmOperatorType *ot); void TEXT_OT_move_select(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 730dfb7d979..a07493ef8fc 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -826,6 +826,36 @@ void TEXT_OT_paste(wmOperatorType *ot) RNA_def_boolean(ot->srna, "selection", 0, "Selection", "Paste text selected elsewhere rather than copied (X11 only)"); } +/**************** duplicate operator *******************/ + +static int text_duplicate_line_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Text *text= CTX_data_edit_text(C); + + txt_duplicate_line(text); + + WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text); + + /* run the script while editing, evil but useful */ + if (CTX_wm_space_text(C)->live_edit) { + text_run_script(C, NULL); + } + + return OPERATOR_FINISHED; +} + +void TEXT_OT_duplicate_line(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Duplicate Line"; + ot->idname = "TEXT_OT_duplicate_line"; + ot->description = "Duplicate the current line"; + + /* api callbacks */ + ot->exec = text_duplicate_line_exec; + ot->poll = text_edit_poll; +} + /******************* copy operator *********************/ static void txt_copy_clipboard(Text *text) @@ -1301,6 +1331,46 @@ void TEXT_OT_select_word(wmOperatorType *ot) ot->poll = text_edit_poll; } +/********************* move lines operators ***********************/ + +static int move_lines_exec(bContext *C, wmOperator *op) +{ + Text *text = CTX_data_edit_text(C); + const int direction = RNA_enum_get(op->ptr, "direction"); + + txt_move_lines(text, direction); + + text_update_cursor_moved(C); + WM_event_add_notifier(C, NC_TEXT|NA_EDITED, text); + + /* run the script while editing, evil but useful */ + if (CTX_wm_space_text(C)->live_edit) + text_run_script(C, NULL); + + return OPERATOR_FINISHED; +} + +void TEXT_OT_move_lines(wmOperatorType *ot) +{ + static EnumPropertyItem direction_items[]= { + {TXT_MOVE_LINE_UP, "UP", 0, "Up", ""}, + {TXT_MOVE_LINE_DOWN, "DOWN", 0, "Down", ""}, + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name = "Move Lines"; + ot->idname = "TEXT_OT_move_lines"; + ot->description = "Moves the currently selected line(s) up/down"; + + /* api callbacks */ + ot->exec = move_lines_exec; + ot->poll = text_edit_poll; + + /* properties */ + RNA_def_enum(ot->srna, "direction", direction_items, 1, "Direction", ""); +} + /******************* previous marker operator *********************/ static int text_previous_marker_exec(bContext *C, wmOperator *UNUSED(op)) diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c index 23fff8fb274..f980e19e9c8 100644 --- a/source/blender/editors/space_text/text_python.c +++ b/source/blender/editors/space_text/text_python.c @@ -364,20 +364,6 @@ static short UNUSED_FUNCTION(do_texttools) (SpaceText * st, char ascii, unsigned return swallow; } -#if 0 -#ifdef WITH_PYTHON -/* Run text plugin scripts if enabled */ -if (st->doplugins && event && val) -{ - if (BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, qual)) { - do_draw = 1; - } -} -#endif -if (do_draw) - ; // XXX redraw_alltext(); -#endif - static short UNUSED_FUNCTION(do_textmarkers) (SpaceText * st, char ascii, unsigned short evnt, short val) { Text *text; diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 674dd670cf7..43a4a9a1de9 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -357,7 +357,8 @@ static void time_draw_keyframes(const bContext *C, SpaceTime *stime, ARegion *ar short active_done = 0; /* draw keyframes from all selected objects */ - CTX_DATA_BEGIN (C, Object*, obsel, selected_objects) { + CTX_DATA_BEGIN (C, Object*, obsel, selected_objects) + { /* last arg is 0, since onlysel doesn't apply here... */ time_draw_idblock_keyframes(v2d, (ID *)obsel, 0); diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index d0e344ef0d5..ca5b21012aa 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -193,8 +193,9 @@ void draw_motion_path_instance(Scene *scene, glVertex3fv(mpv->co); glEnd(); - /* Draw big green dot where the current frame is */ - // NOTE: only do this when drawing keyframes for now... + /* Draw big green dot where the current frame is + * NOTE: this is only done when keyframes are shown, since this adds similar types of clutter + */ if ((avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) && (sfra < CFRA) && (CFRA <= efra)) { @@ -245,7 +246,7 @@ void draw_motion_path_instance(Scene *scene, /* Keyframes - dots and numbers */ if (avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) { unsigned char col[4]; - + AnimData *adt = BKE_animdata_from_id(&ob->id); DLRBT_Tree keys; @@ -273,7 +274,7 @@ void draw_motion_path_instance(Scene *scene, /* Draw slightly-larger yellow dots at each keyframe */ UI_GetThemeColor3ubv(TH_VERTEX_SELECT, col); col[3] = 255; - + glPointSize(4.0f); // XXX perhaps a bit too big glColor3ubv(col); diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index fec93b3b9aa..15e6994dfe4 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1297,7 +1297,7 @@ static void draw_bone(int dt, int armflag, int boneflag, short constflag, unsign { /* Draw a 3d octahedral bone, we use normalized space based on length, - * for glDisplayLists */ + * for display-lists */ glScalef(length, length, length); @@ -1996,7 +1996,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, /* finally names and axes */ if ((arm->flag & (ARM_DRAWNAMES | ARM_DRAWAXES)) && (is_outline == 0)) { - /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ + /* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */ if ((G.f & G_PICKSEL) == 0) { float vec[3]; @@ -2208,7 +2208,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* finally names and axes */ if (arm->flag & (ARM_DRAWNAMES | ARM_DRAWAXES)) { - // patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing + // patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing if ((G.f & G_PICKSEL) == 0) { float vec[3]; unsigned char col[4]; diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index f5f3b4c3f16..530b26d566a 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -179,7 +179,7 @@ static DMDrawOption draw_mesh_face_select__drawFaceOptsInv(void *userData, int i return DM_DRAW_OPTION_SKIP; } -static void draw_mesh_face_select(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) +void draw_mesh_face_select(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) { drawMeshFaceSelect_userData data; @@ -387,7 +387,7 @@ static void draw_textured_end(void) glDisable(GL_CULL_FACE); /* XXX, bad patch - GPU_default_lights() calls - * glLightfv(GL_LIGHT_POSITION, ...) which + * glLightfv(GL_POSITION, ...) which * is transformed by the current matrix... we * need to make sure that matrix is identity. * @@ -593,20 +593,6 @@ static DMDrawOption draw_em_tf_mapped__set_draw(void *userData, int index) } } -static DMDrawOption wpaint__setSolidDrawOptions_material(void *userData, int index) -{ - Mesh *me = (Mesh *)userData; - - if (me->mat && me->mpoly) { - Material *ma = me->mat[me->mpoly[index].mat_nr]; - if (ma && (ma->game.flag & GEMAT_INVISIBLE)) { - return DM_DRAW_OPTION_SKIP; - } - } - - return DM_DRAW_OPTION_NORMAL; -} - /* when face select is on, use face hidden flag */ static DMDrawOption wpaint__setSolidDrawOptions_facemask(void *userData, int index) { @@ -946,6 +932,10 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o draw_mesh_textured_old(scene, v3d, rv3d, ob, dm, draw_flags); return; } + else if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { + draw_mesh_paint(rv3d, ob, dm, draw_flags); + return; + } /* set opengl state for negative scale & color */ if (ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW); @@ -953,12 +943,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o glEnable(GL_LIGHTING); - if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { - /* weight paint mode exception */ - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_material, - GPU_enable_material, NULL, ob->data, DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); - } - else { + { Mesh *me = ob->data; TexMatCallback data = {scene, ob, me, dm}; int (*set_face_cb)(void *, int); @@ -1015,3 +1000,53 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o draw_mesh_face_select(rv3d, ob->data, dm); } +/* Vertex Paint and Weight Paint */ + +void draw_mesh_paint(RegionView3D *rv3d, Object *ob, DerivedMesh *dm, int draw_flags) +{ + DMSetDrawOptions facemask = NULL; + Mesh *me = ob->data; + + /* hide faces in face select mode */ + if (draw_flags & DRAW_FACE_SELECT) + facemask = wpaint__setSolidDrawOptions_facemask; + + if (ob && ob->mode & OB_MODE_WEIGHT_PAINT) { + /* enforce default material settings */ + GPU_enable_material(0, NULL); + + /* but set default spec */ + glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); + glEnable(GL_COLOR_MATERIAL); /* according manpages needed */ + glColor3ub(120, 120, 120); + glDisable(GL_COLOR_MATERIAL); + + /* diffuse */ + glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); + glEnable(GL_LIGHTING); + glEnable(GL_COLOR_MATERIAL); + + dm->drawMappedFaces(dm, facemask, GPU_enable_material, NULL, me, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); + + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_LIGHTING); + + GPU_disable_material(); + } + else if (ob->mode & OB_MODE_VERTEX_PAINT) { + if (me->mloopcol) + dm->drawMappedFaces(dm, facemask, GPU_enable_material, NULL, me, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); + else { + glColor3f(1.0f, 1.0f, 1.0f); + dm->drawMappedFaces(dm, facemask, GPU_enable_material, NULL, me, + DM_DRAW_ALWAYS_SMOOTH); + } + } + + /* draw face selection on top */ + if (draw_flags & DRAW_FACE_SELECT) + draw_mesh_face_select(rv3d, me, dm); +} + diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 4c714b93618..e9b7ef2c6ef 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -47,6 +47,7 @@ #include "DNA_speaker_types.h" #include "DNA_world_types.h" #include "DNA_armature_types.h" +#include "DNA_object_types.h" #include "BLI_utildefines.h" #include "BLI_blenlib.h" @@ -163,7 +164,10 @@ typedef struct drawDMFacesSel_userData { typedef struct drawDMNormal_userData { BMEditMesh *em; + int uniform_scale; float normalsize; + float tmat[3][3]; + float imat[3][3]; } drawDMNormal_userData; typedef struct bbsObmodeMeshVerts_userData { @@ -1758,7 +1762,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base scale[1] = 1.0f / len_v3(ob->obmat[1]); scale[2] = 1.0f / len_v3(ob->obmat[2]); - camera_view_frame_ex(scene, cam, cam->drawsize, is_view, scale, + BKE_camera_view_frame_ex(scene, cam, cam->drawsize, is_view, scale, asp, shift, &drawsize, vec); glDisable(GL_LIGHTING); @@ -1830,7 +1834,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base if (cam->flag & CAM_SHOWLIMITS) { draw_limit_line(cam->clipsta, cam->clipend, 0x77FFFF); /* qdn: was yafray only, now also enabled for Blender to be used with defocus composite node */ - draw_focus_cross(object_camera_dof_distance(ob), cam->drawsize); + draw_focus_cross(BKE_camera_object_dof_distance(ob), cam->drawsize); } wrld = scene->world; @@ -2050,9 +2054,9 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, const flo } void mesh_foreachScreenVert( - ViewContext *vc, - void (*func)(void *userData, BMVert *eve, int x, int y, int index), - void *userData, eV3DClipTest clipVerts) + ViewContext *vc, + void (*func)(void *userData, BMVert *eve, int x, int y, int index), + void *userData, eV3DClipTest clipVerts) { foreachScreenVert_userData data; DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); @@ -2136,9 +2140,9 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, const flo } void mesh_foreachScreenEdge( - ViewContext *vc, - void (*func)(void *userData, BMEdge *eed, int x0, int y0, int x1, int y1, int index), - void *userData, eV3DClipTest clipVerts) + ViewContext *vc, + void (*func)(void *userData, BMEdge *eed, int x0, int y0, int x1, int y1, int index), + void *userData, eV3DClipTest clipVerts) { foreachScreenEdge_userData data; DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); @@ -2183,9 +2187,9 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, const flo } void mesh_foreachScreenFace( - ViewContext *vc, - void (*func)(void *userData, BMFace *efa, int x, int y, int index), - void *userData) + ViewContext *vc, + void (*func)(void *userData, BMFace *efa, int x, int y, int index), + void *userData) { foreachScreenFace_userData data; DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); @@ -2205,9 +2209,9 @@ void mesh_foreachScreenFace( } void nurbs_foreachScreenVert( - ViewContext *vc, - void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y), - void *userData) + ViewContext *vc, + void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y), + void *userData) { Curve *cu = vc->obedit->data; short s[2] = {IS_CLIPPED, 0}; @@ -2268,25 +2272,56 @@ void nurbs_foreachScreenVert( * logic!!! */ +static void calcDrawDMNormalScale(Object *ob, drawDMNormal_userData *data) +{ + float obmat[3][3]; + + copy_m3_m4(obmat, ob->obmat); + + data->uniform_scale = is_uniform_scaled_m3(obmat); + + if (!data->uniform_scale) { + /* inverted matrix */ + invert_m3_m3(data->imat, obmat); + + /* transposed inverted matrix */ + copy_m3_m3(data->tmat, data->imat); + transpose_m3(data->tmat); + } +} + static void draw_dm_face_normals__mapFunc(void *userData, int index, const float cent[3], const float no[3]) { drawDMNormal_userData *data = userData; BMFace *efa = EDBM_face_at_index(data->em, index); + float n[3]; if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { + if (!data->uniform_scale) { + mul_v3_m3v3(n, data->tmat, (float *) no); + normalize_v3(n); + mul_m3_v3(data->imat, n); + } + else { + copy_v3_v3(n, no); + } + glVertex3fv(cent); - glVertex3f(cent[0] + no[0] * data->normalsize, - cent[1] + no[1] * data->normalsize, - cent[2] + no[2] * data->normalsize); + glVertex3f(cent[0] + n[0] * data->normalsize, + cent[1] + n[1] * data->normalsize, + cent[2] + n[2] * data->normalsize); } } -static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, DerivedMesh *dm) + +static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm) { drawDMNormal_userData data; data.em = em; data.normalsize = scene->toolsettings->normalsize; + calcDrawDMNormalScale(ob, &data); + glBegin(GL_LINES); dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, &data); glEnd(); @@ -2316,27 +2351,42 @@ static void draw_dm_vert_normals__mapFunc(void *userData, int index, const float BMVert *eve = EDBM_vert_at_index(data->em, index); if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { - glVertex3fv(co); + float no[3], n[3]; if (no_f) { - glVertex3f(co[0] + no_f[0] * data->normalsize, - co[1] + no_f[1] * data->normalsize, - co[2] + no_f[2] * data->normalsize); + copy_v3_v3(no, no_f); } else { - glVertex3f(co[0] + no_s[0] * (data->normalsize / 32767.0f), - co[1] + no_s[1] * (data->normalsize / 32767.0f), - co[2] + no_s[2] * (data->normalsize / 32767.0f)); + no[0] = no_s[0] / 32767.0f; + no[1] = no_s[1] / 32767.0f; + no[2] = no_s[2] / 32767.0f; } + + if (!data->uniform_scale) { + mul_v3_m3v3(n, data->tmat, (float *) no); + normalize_v3(n); + mul_m3_v3(data->imat, n); + } + else { + copy_v3_v3(n, no); + } + + glVertex3fv(co); + glVertex3f(co[0] + n[0] * data->normalsize, + co[1] + n[1] * data->normalsize, + co[2] + n[2] * data->normalsize); } } -static void draw_dm_vert_normals(BMEditMesh *em, Scene *scene, DerivedMesh *dm) + +static void draw_dm_vert_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm) { drawDMNormal_userData data; data.em = em; data.normalsize = scene->toolsettings->normalsize; + calcDrawDMNormalScale(ob, &data); + glBegin(GL_LINES); dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, &data); glEnd(); @@ -2868,9 +2918,10 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS #define DRAW_EM_MEASURE_STATS_FACEAREA() \ if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { \ - mul_v3_fl(vmid, 1.0 / n); \ + mul_v3_fl(vmid, 1.0f / (float)n); \ if (unit->system) \ - bUnit_AsString(numstr, sizeof(numstr), area * unit->scale_length, \ + bUnit_AsString(numstr, sizeof(numstr), \ + (double)(area * unit->scale_length), \ 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); \ else \ BLI_snprintf(numstr, sizeof(numstr), conv_float, area); \ @@ -3196,11 +3247,11 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, if (me->drawflag & ME_DRAWNORMALS) { UI_ThemeColor(TH_NORMAL); - draw_dm_face_normals(em, scene, cageDM); + draw_dm_face_normals(em, scene, ob, cageDM); } if (me->drawflag & ME_DRAW_VNORMALS) { UI_ThemeColor(TH_VNORMAL); - draw_dm_vert_normals(em, scene, cageDM); + draw_dm_vert_normals(em, scene, ob, cageDM); } if ( (me->drawflag & (ME_DRAWEXTRA_EDGELEN | ME_DRAWEXTRA_FACEAREA | ME_DRAWEXTRA_FACEANG)) && @@ -3299,7 +3350,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D else if (dt == OB_WIRE || totface == 0) { draw_wire = OBDRAW_WIRE_ON; /* draw wire only, no depth buffer stuff */ } - else if ( (draw_flags & DRAW_FACE_SELECT || (is_obact && ob->mode & OB_MODE_TEXTURE_PAINT)) || + else if ( ((is_obact && ob->mode & OB_MODE_TEXTURE_PAINT)) || check_object_draw_texture(scene, v3d, dt)) { if ( (v3d->flag & V3D_SELECT_OUTLINE) && @@ -3454,39 +3505,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } } else if (dt == OB_PAINT) { - if (is_obact) { - if (ob && ob->mode & OB_MODE_WEIGHT_PAINT) { - /* enforce default material settings */ - GPU_enable_material(0, NULL); - - /* but set default spec */ - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - glEnable(GL_COLOR_MATERIAL); /* according manpages needed */ - glColor3ub(120, 120, 120); - glDisable(GL_COLOR_MATERIAL); - /* diffuse */ - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_LIGHTING); - glEnable(GL_COLOR_MATERIAL); - - dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, me->mpoly, - DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - - GPU_disable_material(); - } - else if (ob->mode & OB_MODE_VERTEX_PAINT) { - if (me->mloopcol) - dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, - DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); - else { - glColor3f(1.0f, 1.0f, 1.0f); - dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, - DM_DRAW_ALWAYS_SMOOTH); - } - } - } + draw_mesh_paint(rv3d, ob, dm, draw_flags); } /* set default draw color back for wire or for draw-extra later on */ @@ -5678,7 +5697,7 @@ static void curve_draw_speed(Scene *scene, Object *ob) if (icu == NULL || icu->totvert < 2) return; - glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) ); + glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE)); bglBegin(GL_POINTS); for (a = 0, bezt = icu->bezt; a < icu->totvert; a++, bezt++) { @@ -7002,7 +7021,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) drawtexspace(ob); } if (dtx & OB_DRAWNAME) { - /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ + /* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */ /* but, we also don't draw names for sets or duplicators */ if (flag == 0) { float zero[3] = {0, 0, 0}; @@ -7198,7 +7217,7 @@ static void bbs_obmode_mesh_verts(Object *ob, DerivedMesh *dm, int offset) MVert *mvert = me->mvert; data.mvert = mvert; data.offset = (void *)(intptr_t) offset; - glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) ); + glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE)); bglBegin(GL_POINTS); dm->foreachMappedVert(dm, bbs_obmode_mesh_verts__mapFunc, &data); bglEnd(); @@ -7221,7 +7240,7 @@ static void bbs_mesh_verts(BMEditMesh *em, DerivedMesh *dm, int offset) { void *ptrs[2] = {(void *)(intptr_t) offset, em}; - glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) ); + glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE)); bglBegin(GL_POINTS); dm->foreachMappedVert(dm, bbs_mesh_verts__mapFunc, ptrs); bglEnd(); diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 0e520a511fe..2bb08a4b9b4 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -47,7 +47,6 @@ #include "BKE_curve.h" #include "BKE_constraint.h" // for the get_constraint_target function #include "BKE_DerivedMesh.h" -#include "BKE_deform.h" #include "BKE_displist.h" #include "BKE_effect.h" #include "BKE_font.h" diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 6d810d9103c..13129616843 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -333,7 +333,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, yi -= buth, 200, buth, &(tfp->ve_median[1]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); - but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:",0, yi -= buth, 200, buth, + but = uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, yi -= buth, 200, buth, &(tfp->ve_median[2]), -lim, lim, 10, RNA_TRANSLATION_PREC_DEFAULT, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index ec383e1dbdb..f48b45f9793 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -313,15 +313,15 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** double scalar = bUnit_GetScaler(usys, i); dx_scalar = dx * scalar / unit->scale_length; - if (dx_scalar < (GRID_MIN_PX * 2)) + if (dx_scalar < (GRID_MIN_PX * 2.0)) continue; /* Store the smallest drawn grid size units name so users know how big each grid cell is */ if (*grid_unit == NULL) { *grid_unit = bUnit_GetNameDisplay(usys, i); - rv3d->gridview = (scalar * v3d->grid) / unit->scale_length; + rv3d->gridview = (float)((scalar * v3d->grid) / (double)unit->scale_length); } - blend_fac = 1 - ((GRID_MIN_PX * 2) / dx_scalar); + blend_fac = 1.0f - ((GRID_MIN_PX * 2.0f) / (float)dx_scalar); /* tweak to have the fade a bit nicer */ blend_fac = (blend_fac * blend_fac) * 2.0f; @@ -355,7 +355,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** } } else { // start blending out - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx / (GRID_MIN_PX * 6)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx / (GRID_MIN_PX * 6.0f)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); @@ -363,7 +363,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** } } else { // start blending out (GRID_MIN_PX < dx < (GRID_MIN_PX*10)) - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx / (GRID_MIN_PX * 6)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx / (GRID_MIN_PX * 6.0f)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); @@ -939,21 +939,21 @@ static void view3d_camera_border(Scene *scene, ARegion *ar, View3D *v3d, RegionV rctf rect_view, rect_camera; /* get viewport viewplane */ - camera_params_init(¶ms); - camera_params_from_view3d(¶ms, v3d, rv3d); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_view3d(¶ms, v3d, rv3d); if (no_zoom) params.zoom = 1.0f; - camera_params_compute_viewplane(¶ms, ar->winx, ar->winy, 1.0f, 1.0f); + BKE_camera_params_compute_viewplane(¶ms, ar->winx, ar->winy, 1.0f, 1.0f); rect_view = params.viewplane; /* get camera viewplane */ - camera_params_init(¶ms); - camera_params_from_object(¶ms, v3d->camera); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, v3d->camera); if (no_shift) { params.shiftx = 0.0f; params.shifty = 0.0f; } - camera_params_compute_viewplane(¶ms, scene->r.xsch, scene->r.ysch, scene->r.xasp, scene->r.yasp); + BKE_camera_params_compute_viewplane(¶ms, scene->r.xsch, scene->r.ysch, scene->r.xasp, scene->r.yasp); rect_camera = params.viewplane; /* get camera border within viewport */ @@ -1226,7 +1226,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) * assume and square sensor and only use sensor_x */ float sizex = scene->r.xsch * scene->r.xasp; float sizey = scene->r.ysch * scene->r.yasp; - int sensor_fit = camera_sensor_fit(ca->sensor_fit, sizex, sizey); + int sensor_fit = BKE_camera_sensor_fit(ca->sensor_fit, sizex, sizey); float sensor_x = ca->sensor_x; float sensor_y = (ca->sensor_fit == CAMERA_SENSOR_FIT_AUTO) ? ca->sensor_x : ca->sensor_y; @@ -2612,10 +2612,10 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, if (rv3d->persp == RV3D_CAMOB && v3d->camera) { CameraParams params; - camera_params_init(¶ms); - camera_params_from_object(¶ms, v3d->camera); - camera_params_compute_viewplane(¶ms, sizex, sizey, scene->r.xasp, scene->r.yasp); - camera_params_compute_matrix(¶ms); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, v3d->camera); + BKE_camera_params_compute_viewplane(¶ms, sizex, sizey, scene->r.xasp, scene->r.yasp); + BKE_camera_params_compute_matrix(¶ms); ED_view3d_draw_offscreen(scene, v3d, ar, sizex, sizey, NULL, params.winmat, draw_background); } @@ -2673,10 +2673,10 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, Object *camera, int w { CameraParams params; - camera_params_init(¶ms); - camera_params_from_object(¶ms, v3d.camera); - camera_params_compute_viewplane(¶ms, width, height, scene->r.xasp, scene->r.yasp); - camera_params_compute_matrix(¶ms); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, v3d.camera); + BKE_camera_params_compute_viewplane(¶ms, width, height, scene->r.xasp, scene->r.yasp); + BKE_camera_params_compute_matrix(¶ms); copy_m4_m4(rv3d.winmat, params.winmat); v3d.near = params.clipsta; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 2f66fdf8cd4..ea4d28ce32f 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -73,6 +73,7 @@ #include "ED_transform.h" #include "ED_mesh.h" #include "ED_view3d.h" +#include "ED_sculpt.h" #include "PIL_time.h" /* smoothview */ @@ -695,7 +696,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) if (dot_v3v3(xaxis, m_inv[0]) < 0) { negate_v3(xaxis); } - fac = angle_normalized_v3v3(zvec_global, m_inv[2]) / M_PI; + fac = angle_normalized_v3v3(zvec_global, m_inv[2]) / (float)M_PI; fac = fabsf(fac - 0.5f) * 2; fac = fac * fac; interp_v3_v3v3(xaxis, xaxis, m_inv[0], fac); @@ -2199,6 +2200,10 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { ok = PE_minmax(scene, min, max); } + else if (ob && (ob->mode & OB_MODE_SCULPT)) { + ok = ED_sculpt_minmax(C, min, max); + ok_dist = 0; /* don't zoom */ + } else { Base *base; for (base = FIRSTBASE; base; base = base->next) { @@ -2222,18 +2227,24 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) sub_v3_v3v3(afm, max, min); size = MAX3(afm[0], afm[1], afm[2]); - if (!rv3d->is_persp) { - if (size < 0.0001f) { /* if its a sinble point. don't even re-scale */ - ok_dist = 0; - } - else { - /* perspective should be a bit farther away to look nice */ - size *= 0.7f; + if (ok_dist) { + /* fix up zoom distance if needed */ + + if (rv3d->is_persp) { + if (size <= v3d->near * 1.5f) { + /* do not zoom closer than the near clipping plane */ + size = v3d->near * 1.5f; + } } - } - else { - if (size <= v3d->near * 1.5f) { - size = v3d->near * 1.5f; + else /* ortho */ { + if (size < 0.0001f) { + /* bounding box was a single point so do not zoom */ + ok_dist = 0; + } + else { + /* adjust zoom so it looks nicer */ + size *= 0.7f; + } } } @@ -2251,7 +2262,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) if (rv3d->persp == RV3D_CAMOB && !ED_view3d_camera_lock_check(v3d, rv3d)) { rv3d->persp = RV3D_PERSP; - smooth_view(C, v3d, ar, v3d->camera, NULL, new_ofs, NULL, &new_dist, NULL); + smooth_view(C, v3d, ar, v3d->camera, NULL, new_ofs, NULL, ok_dist ? &new_dist : NULL, NULL); } else { smooth_view(C, v3d, ar, NULL, NULL, new_ofs, NULL, ok_dist ? &new_dist : NULL, NULL); @@ -3649,8 +3660,8 @@ void ED_view3d_from_object(Object *ob, float ofs[3], float quat[4], float *dist, if (lens) { CameraParams params; - camera_params_init(¶ms); - camera_params_from_object(¶ms, ob); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, ob); *lens = params.lens; } } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 168775deae2..66b8ceb7a85 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -130,6 +130,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in /* drawmesh.c */ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, struct DerivedMesh *dm, int faceselect); +void draw_mesh_paint(RegionView3D *rv3d, struct Object *ob, struct DerivedMesh *dm, int faceselect); /* view3d_draw.c */ void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index e1bbc0e1545..f106fcc268e 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -830,7 +830,8 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) int i = 0; int mcords[1024][2]; - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); @@ -975,7 +976,8 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) const char *name = object_mouse_select_menu_data[name_index].idname; if (!extend) { - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { if (base->flag & SELECT) { ED_base_object_select(base, BA_DESELECT); changed = 1; @@ -984,7 +986,8 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { /* this is a bit dodjy, there should only be ONE object with this name, but library objects can mess this up */ if (strcmp(name, base->object->id.name + 2) == 0) { ED_base_object_activate(C, base); @@ -1051,7 +1054,8 @@ static Base *object_mouse_select_menu(bContext *C, ViewContext *vc, unsigned int short ok; LinkNode *linklist = NULL; - CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) + { ok = FALSE; /* two selection methods, the CTRL select uses max dist of 15 */ @@ -1829,7 +1833,8 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i if (extend == 0 && select) { if (bone_only) { - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + { if ((pchan->bone->flag & BONE_UNSELECTABLE) == 0) { pchan->bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); } @@ -2194,7 +2199,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f int bbsel; CircleSelectUserData data; - bbsel = EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0)); + bbsel = EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0f)); ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ vc->em = BMEdit_FromObject(vc->obedit); @@ -2245,7 +2250,7 @@ static void paint_facesel_circle_select(ViewContext *vc, int select, const int m if (me) { bm_vertoffs = me->totpoly + 1; /* max index array */ - /* bbsel= */ /* UNUSED */ EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0)); + /* bbsel= */ /* UNUSED */ EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0f)); edbm_backbuf_check_and_select_tfaces(me, select == LEFTMOUSE); EDBM_backbuf_free(); } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 988d0a00601..87edf6a37a0 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -557,7 +557,8 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) else { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -691,7 +692,8 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) else { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + { if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -928,7 +930,8 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) } } else { - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) + { copy_v3_v3(vec, ob->obmat[3]); /* special case for camera -- snap to bundles */ diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 8a0cb4b597b..733c5c55bfc 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -412,7 +412,7 @@ static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *UNUSED(o float r_co[3]; /* the new location to apply */ /* this function does all the important stuff */ - if (camera_view_frame_fit_to_scene(scene, v3d, camera_ob, r_co)) { + if (BKE_camera_view_frame_fit_to_scene(scene, v3d, camera_ob, r_co)) { ObjectTfmProtectedChannels obtfm; float obmat_new[4][4]; @@ -1000,8 +1000,8 @@ int ED_view3d_clip_range_get(View3D *v3d, RegionView3D *rv3d, float *clipsta, fl { CameraParams params; - camera_params_init(¶ms); - camera_params_from_view3d(¶ms, v3d, rv3d); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_view3d(¶ms, v3d, rv3d); if (clipsta) *clipsta = params.clipsta; if (clipend) *clipend = params.clipend; @@ -1015,9 +1015,9 @@ int ED_view3d_viewplane_get(View3D *v3d, RegionView3D *rv3d, int winx, int winy, { CameraParams params; - camera_params_init(¶ms); - camera_params_from_view3d(¶ms, v3d, rv3d); - camera_params_compute_viewplane(¶ms, winx, winy, 1.0f, 1.0f); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_view3d(¶ms, v3d, rv3d); + BKE_camera_params_compute_viewplane(¶ms, winx, winy, 1.0f, 1.0f); if (viewplane) *viewplane = params.viewplane; if (clipsta) *clipsta = params.clipsta; diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 5fceb62b605..03b197dc4c6 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -225,7 +225,11 @@ void projectIntView(TransInfo *t, const float vec[3], int adr[2]) adr[1]= out[1]; } else if (t->spacetype==SPACE_CLIP) { - UI_view2d_to_region_no_clip(t->view, vec[0], vec[1], adr, adr+1); + float v[2]; + + copy_v2_v2(v, vec); + + UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1); } } @@ -274,6 +278,19 @@ void applyAspectRatio(TransInfo *t, float *vec) vec[0] /= aspx; vec[1] /= aspy; } + else if ((t->spacetype==SPACE_CLIP) && (t->mode==TFM_TRANSLATION)) { + if (t->options & CTX_MOVIECLIP) { + SpaceClip *sc = t->sa->spacedata.first; + float aspx, aspy; + int width, height; + + ED_space_clip_size(sc, &width, &height); + ED_space_clip_aspect(sc, &aspx, &aspy); + + vec[0] *= width / aspx; + vec[1] *= height / aspy; + } + } } void removeAspectRatio(TransInfo *t, float *vec) @@ -294,6 +311,19 @@ void removeAspectRatio(TransInfo *t, float *vec) vec[0] *= aspx; vec[1] *= aspy; } + else if ((t->spacetype==SPACE_CLIP) && (t->mode==TFM_TRANSLATION)) { + if (t->options & CTX_MOVIECLIP) { + SpaceClip *sc = t->sa->spacedata.first; + float aspx, aspy; + int width, height; + + ED_space_clip_size(sc, &width, &height); + ED_space_clip_aspect(sc, &aspx, &aspy); + + vec[0] *= aspx / width; + vec[1] *= aspy / height; + } + } } static void viewRedrawForce(const bContext *C, TransInfo *t) @@ -621,10 +651,10 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= TREDRAW_HARD; } else if (t->mode == TFM_TRANSLATION) { - if (t->options&CTX_MOVIECLIP) { + if (t->options & CTX_MOVIECLIP) { restoreTransObjects(t); - t->flag^= T_ALT_TRANSFORM; + t->flag ^= T_ALT_TRANSFORM; t->redraw |= TREDRAW_HARD; } } @@ -1156,12 +1186,12 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size) size = -size; case RIGHT: glBegin(GL_LINES); - glVertex2s( offset, 0); - glVertex2s( offset + length, 0); - glVertex2s( offset + length, 0); - glVertex2s( offset + length - size, -size); - glVertex2s( offset + length, 0); - glVertex2s( offset + length - size, size); + glVertex2s(offset, 0); + glVertex2s(offset + length, 0); + glVertex2s(offset + length, 0); + glVertex2s(offset + length - size, -size); + glVertex2s(offset + length, 0); + glVertex2s(offset + length - size, size); glEnd(); break; case DOWN: @@ -1170,12 +1200,12 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size) size = -size; case UP: glBegin(GL_LINES); - glVertex2s( 0, offset); - glVertex2s( 0, offset + length); - glVertex2s( 0, offset + length); + glVertex2s(0, offset); + glVertex2s(0, offset + length); + glVertex2s(0, offset + length); glVertex2s(-size, offset + length - size); - glVertex2s( 0, offset + length); - glVertex2s( size, offset + length - size); + glVertex2s(0, offset + length); + glVertex2s(size, offset + length - size); glEnd(); break; } @@ -1188,20 +1218,20 @@ static void drawArrowHead(ArrowDirection d, short size) size = -size; case RIGHT: glBegin(GL_LINES); - glVertex2s( 0, 0); - glVertex2s( -size, -size); - glVertex2s( 0, 0); - glVertex2s( -size, size); + glVertex2s(0, 0); + glVertex2s(-size, -size); + glVertex2s(0, 0); + glVertex2s(-size, size); glEnd(); break; case DOWN: size = -size; case UP: glBegin(GL_LINES); - glVertex2s( 0, 0); + glVertex2s(0, 0); glVertex2s(-size, -size); - glVertex2s( 0, 0); - glVertex2s( size, -size); + glVertex2s(0, 0); + glVertex2s(size, -size); glEnd(); break; } @@ -1215,9 +1245,9 @@ static void drawArc(float size, float angle_start, float angle_end, int segments glBegin(GL_LINE_STRIP); for ( angle = angle_start; angle < angle_end; angle += delta) { - glVertex2f( cosf(angle) * size, sinf(angle) * size); + glVertex2f(cosf(angle) * size, sinf(angle) * size); } - glVertex2f( cosf(angle_end) * size, sinf(angle_end) * size); + glVertex2f(cosf(angle_end) * size, sinf(angle_end) * size); glEnd(); } @@ -1913,8 +1943,8 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl /* axis-angle get limited with euler... */ float eul[3], oldeul[3]; - axis_angle_to_eulO( eul, EULER_ORDER_DEFAULT,axis, *angle); - axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,oldAxis, oldAngle); + axis_angle_to_eulO(eul, EULER_ORDER_DEFAULT, axis, *angle); + axis_angle_to_eulO(oldeul, EULER_ORDER_DEFAULT, oldAxis, oldAngle); if (protectflag & OB_LOCK_ROTX) eul[0]= oldeul[0]; @@ -1923,7 +1953,7 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl if (protectflag & OB_LOCK_ROTZ) eul[2]= oldeul[2]; - eulO_to_axis_angle( axis, angle,eul, EULER_ORDER_DEFAULT); + eulO_to_axis_angle(axis, angle, eul, EULER_ORDER_DEFAULT); /* when converting to axis-angle, we need a special exception for the case when there is no axis */ if (IS_EQF(axis[0], axis[1]) && IS_EQF(axis[1], axis[2])) { @@ -1969,7 +1999,7 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu if (protectflag & OB_LOCK_ROTZ) eul[2]= oldeul[2]; - eul_to_quat( quat,eul); + eul_to_quat(quat, eul); /* restore original quat size */ mul_qt_fl(quat, qlen); @@ -2145,15 +2175,15 @@ static void constraintRotLim(TransInfo *UNUSED(t), TransData *td) /* copy results from cob->matrix */ if (td->ext->rotOrder == ROT_MODE_QUAT) { /* quats */ - mat4_to_quat( td->ext->quat,cob.matrix); + mat4_to_quat(td->ext->quat, cob.matrix); } else if (td->ext->rotOrder == ROT_MODE_AXISANGLE) { /* axis angle */ - mat4_to_axis_angle( &td->ext->quat[1], &td->ext->quat[0],cob.matrix); + mat4_to_axis_angle(&td->ext->quat[1], &td->ext->quat[0], cob.matrix); } else { /* eulers */ - mat4_to_eulO( td->ext->rot, td->ext->rotOrder,cob.matrix); + mat4_to_eulO(td->ext->rot, td->ext->rotOrder, cob.matrix); } } } @@ -2179,7 +2209,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td) if (td->flag & TD_SINGLESIZE) return; - size_to_mat4( cob.matrix,td->ext->size); + size_to_mat4(cob.matrix, td->ext->size); } /* Evaluate valid constraints */ @@ -2230,7 +2260,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td) if (td->flag & TD_SINGLESIZE) return; - mat4_to_size( td->ext->size,cob.matrix); + mat4_to_size(td->ext->size, cob.matrix); } } } @@ -2598,7 +2628,7 @@ static void headerResize(TransInfo *t, float vec[3], char *str) #define VECSIGNFLIP(a, b) ((SIGN(a[0]) & SIGN(b[0]))==0 || (SIGN(a[1]) & SIGN(b[1]))==0 || (SIGN(a[2]) & SIGN(b[2]))==0) /* smat is reference matrix, only scaled */ -static void TransMat3ToSize( float mat[][3], float smat[][3], float *size) +static void TransMat3ToSize(float mat[][3], float smat[][3], float *size) { float vec[3]; @@ -2658,7 +2688,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) //print_v3("fsize", fsize); } else { - mat3_to_size( fsize,tmat); + mat3_to_size(fsize, tmat); } protectedSizeBits(td->protectflag, fsize); @@ -2745,7 +2775,7 @@ int Resize(TransInfo *t, const int mval[2]) copy_v3_v3(t->values, size); - size_to_mat3( mat,size); + size_to_mat3(mat, size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); @@ -2767,7 +2797,7 @@ int Resize(TransInfo *t, const int mval[2]) /* evil hack - redo resize if cliping needed */ if (t->flag & T_CLIP_UV && clipUVTransform(t, size, 1)) { - size_to_mat3( mat,size); + size_to_mat3(mat, size); if (t->con.applySize) t->con.applySize(t, NULL, mat); @@ -2936,14 +2966,14 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short add_v3_v3v3(td->loc, vec, center); - sub_v3_v3v3(vec,td->loc,td->iloc); + sub_v3_v3v3(vec, td->loc, td->iloc); protectedTransBits(td->protectflag, vec); add_v3_v3v3(td->loc, td->iloc, vec); if (td->flag & TD_USEQUAT) { mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat( quat,fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform if (td->ext->quat) { mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); @@ -3010,7 +3040,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if (td->ext->rotOrder == ROT_MODE_QUAT) { mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat( quat,fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ @@ -3024,10 +3054,10 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle); mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat( quat,fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(tquat, quat, iquat); - quat_to_axis_angle( td->ext->rotAxis, td->ext->rotAngle,tquat); + quat_to_axis_angle(td->ext->rotAxis, td->ext->rotAngle, tquat); /* this function works on end result */ protectedAxisAngleBits(td->protectflag, td->ext->rotAxis, td->ext->rotAngle, td->ext->irotAxis, td->ext->irotAngle); @@ -3040,12 +3070,12 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* calculate the total rotatation in eulers */ copy_v3_v3(eul, td->ext->irot); - eulO_to_mat3( eulmat,eul, td->ext->rotOrder); + eulO_to_mat3(eulmat, eul, td->ext->rotOrder); /* mat = transform, obmat = bone rotation */ mul_m3_m3m3(fmat, smat, eulmat); - mat3_to_compatible_eulO( eul, td->ext->rot, td->ext->rotOrder,fmat); + mat3_to_compatible_eulO(eul, td->ext->rot, td->ext->rotOrder, fmat); /* and apply (to end result only) */ protectedRotateBits(td->protectflag, eul, td->ext->irot); @@ -3078,7 +3108,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* euler or quaternion? */ if ((td->ext->rotOrder == ROT_MODE_QUAT) || (td->flag & TD_USEQUAT)) { mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat( quat,fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ @@ -3091,10 +3121,10 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle); mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat( quat,fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(tquat, quat, iquat); - quat_to_axis_angle( td->ext->rotAxis, td->ext->rotAngle,tquat); + quat_to_axis_angle(td->ext->rotAxis, td->ext->rotAngle, tquat); /* this function works on end result */ protectedAxisAngleBits(td->protectflag, td->ext->rotAxis, td->ext->rotAngle, td->ext->irotAxis, td->ext->irotAngle); @@ -3107,11 +3137,11 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* calculate the total rotatation in eulers */ add_v3_v3v3(eul, td->ext->irot, td->ext->drot); /* we have to correct for delta rot */ - eulO_to_mat3( obmat,eul, td->ext->rotOrder); + eulO_to_mat3(obmat, eul, td->ext->rotOrder); /* mat = transform, obmat = object rotation */ mul_m3_m3m3(fmat, smat, obmat); - mat3_to_compatible_eulO( eul, td->ext->rot, td->ext->rotOrder,fmat); + mat3_to_compatible_eulO(eul, td->ext->rot, td->ext->rotOrder, fmat); /* correct back for delta rot */ sub_v3_v3v3(eul, eul, td->ext->drot); @@ -3132,7 +3162,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) float mat[3][3]; int i; - vec_rot_to_mat3( mat,axis, angle); + vec_rot_to_mat3(mat, axis, angle); for (i = 0 ; i < t->total; i++, td++) { @@ -3144,10 +3174,10 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) if (t->con.applyRot) { t->con.applyRot(t, td, axis, NULL); - vec_rot_to_mat3( mat,axis, angle * td->factor); + vec_rot_to_mat3(mat, axis, angle * td->factor); } else if (t->flag & T_PROP_EDIT) { - vec_rot_to_mat3( mat,axis, angle * td->factor); + vec_rot_to_mat3(mat, axis, angle * td->factor); } ElementRotation(t, td, mat, t->around); @@ -3233,8 +3263,8 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a float mat[3][3], smat[3][3], totmat[3][3]; int i; - vec_rot_to_mat3( smat,axis1, angles[0]); - vec_rot_to_mat3( totmat,axis2, angles[1]); + vec_rot_to_mat3(smat, axis1, angles[0]); + vec_rot_to_mat3(totmat, axis2, angles[1]); mul_m3_m3m3(mat, smat, totmat); @@ -3246,8 +3276,8 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a continue; if (t->flag & T_PROP_EDIT) { - vec_rot_to_mat3( smat,axis1, td->factor * angles[0]); - vec_rot_to_mat3( totmat,axis2, td->factor * angles[1]); + vec_rot_to_mat3(smat, axis1, td->factor * angles[0]); + vec_rot_to_mat3(totmat, axis2, td->factor * angles[1]); mul_m3_m3m3(mat, smat, totmat); } @@ -3294,8 +3324,8 @@ int Trackball(TransInfo *t, const int UNUSED(mval[2])) } (void)spos; - vec_rot_to_mat3( smat,axis1, phi[0]); - vec_rot_to_mat3( totmat,axis2, phi[1]); + vec_rot_to_mat3(smat, axis1, phi[0]); + vec_rot_to_mat3(totmat, axis2, phi[1]); mul_m3_m3m3(mat, smat, totmat); @@ -3453,7 +3483,7 @@ static void applyTranslation(TransInfo *t, float vec[3]) axis_angle_to_quat(quat, axis, angle); - quat_to_mat3( mat,quat); + quat_to_mat3(mat, quat); ElementRotation(t, td, mat, V3D_LOCAL); } @@ -3894,7 +3924,7 @@ int handleEventBevel(TransInfo *t, wmEvent *event) int Bevel(TransInfo *t, const int UNUSED(mval[2])) { - float distance,d; + float distance, d; int i; char str[128]; const char *mode; @@ -4147,9 +4177,9 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) /* we've tucked the scale in loc */ oldy= td->iloc[1]; - size_to_mat3( sizemat,td->iloc); + size_to_mat3(sizemat, td->iloc); mul_m3_m3m3(tmat, tmat, sizemat); - mat3_to_size( td->loc,tmat); + mat3_to_size(td->loc, tmat); td->loc[1]= oldy; } @@ -4179,7 +4209,7 @@ int BoneSize(TransInfo *t, const int mval[2]) constraintNumInput(t, size); } - size_to_mat3( mat,size); + size_to_mat3(mat, size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); @@ -4357,7 +4387,7 @@ static int createSlideVerts(TransInfo *t) BMVert *v, *v2, *first; BMLoop *l, *l1, *l2; TransDataSlideVert *sv_array; - BMBVHTree *btree = BMBVH_NewBVH(em, 0, NULL, NULL); + BMBVHTree *btree = BMBVH_NewBVH(em, BMBVH_RESPECT_HIDDEN, NULL, NULL); SmallHash table; SlideData *sld = MEM_callocN(sizeof(*sld), "sld"); View3D *v3d = t->sa ? t->sa->spacedata.first : NULL; @@ -4831,7 +4861,7 @@ void freeSlideVerts(TransInfo *t) LinkNode *look = sld->vertlist; GHash *vertgh = sld->vhash; while (look) { - sv = BLI_ghash_lookup(vertgh,(EditVert*)look->link); + sv = BLI_ghash_lookup(vertgh, (EditVert*)look->link); if (sv != NULL) { sv->up->f &= !SELECT; sv->down->f &= !SELECT; @@ -5137,7 +5167,7 @@ int Mirror(TransInfo *t, const int UNUSED(mval[2])) if (t->con.mode & CON_APPLY) { size[0] = size[1] = size[2] = -1; - size_to_mat3( mat,size); + size_to_mat3(mat, size); if (t->con.applySize) { t->con.applySize(t, NULL, mat); @@ -5162,7 +5192,7 @@ int Mirror(TransInfo *t, const int UNUSED(mval[2])) else { size[0] = size[1] = size[2] = 1; - size_to_mat3( mat,size); + size_to_mat3(mat, size); for (i = 0, td=t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -5430,7 +5460,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, /* do the snapping to nearest frame/second */ if (doTime) { - val= (float)( floor((val/secf) + 0.5f) * secf ); + val= (float)(floor((val/secf) + 0.5f) * secf); } else #endif @@ -5569,9 +5599,9 @@ static void applyTimeTranslate(TransInfo *t, float UNUSED(sval)) if (autosnap == SACTSNAP_STEP) { if (doTime) - deltax= (float)( floor((deltax/secf) + 0.5f) * secf ); + deltax= (float)(floor((deltax/secf) + 0.5f) * secf); else - deltax= (float)( floor(deltax + 0.5f) ); + deltax= (float)(floor(deltax + 0.5f)); } val = BKE_nla_tweakedit_remap(adt, td->ival, NLATIME_CONVERT_MAP); @@ -5583,9 +5613,9 @@ static void applyTimeTranslate(TransInfo *t, float UNUSED(sval)) if (autosnap == SACTSNAP_STEP) { if (doTime) - val= (float)( floor((deltax/secf) + 0.5f) * secf ); + val= (float)(floor((deltax/secf) + 0.5f) * secf); else - val= (float)( floor(val + 0.5f) ); + val= (float)(floor(val + 0.5f)); } *(td->val) = td->ival + val; @@ -5835,9 +5865,9 @@ static void applyTimeScale(TransInfo *t) if (autosnap == SACTSNAP_STEP) { if (doTime) - fac= (float)( floor(fac/secf + 0.5f) * secf ); + fac= (float)(floor(fac/secf + 0.5f) * secf); else - fac= (float)( floor(fac + 0.5f) ); + fac= (float)(floor(fac + 0.5f)); } /* check if any need to apply nla-mapping */ diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 0bef33149d7..69af8cf2489 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -68,7 +68,7 @@ struct ReportList; struct SmallHash; typedef struct TransSnapPoint { - struct TransSnapPoint *next,*prev; + struct TransSnapPoint *next, *prev; float co[3]; } TransSnapPoint; diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index ebded7b0a6e..b18d132f8df 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -664,7 +664,7 @@ void drawConstraint(TransInfo *t) else { if (tc->mode & CON_SELECT) { float vec[3]; - char col2[3] = {255,255,255}; + char col2[3] = {255, 255, 255}; int depth_test_enabled; convertViewVec(t, vec, (t->mval[0] - t->con.imval[0]), (t->mval[1] - t->con.imval[1])); @@ -767,7 +767,7 @@ static void drawObjectConstraint(TransInfo *t) td++; - for (i=1;i<t->total;i++,td++) { + for (i=1; i < t->total; i++, td++) { if (t->con.mode & CON_AXIS0) { drawLine(t, td->ob->obmat[3], td->axismtx[0], 'X', 0); } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 00c8e0a1d34..599d4a559ed 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -266,7 +266,7 @@ static void createTransTexspace(TransInfo *t) } id = ob->data; - if (id == NULL || !ELEM3( GS(id->name), ID_ME, ID_CU, ID_MB )) { + if (id == NULL || !ELEM3(GS(id->name), ID_ME, ID_CU, ID_MB )) { t->total = 0; return; } @@ -418,57 +418,12 @@ static short apply_targetless_ik(Object *ob) /* pose_mat(b) = pose_mat(b-1) * offs_bone * channel * constraint * IK */ /* we put in channel the entire result of rmat= (channel * constraint * IK) */ /* pose_mat(b) = pose_mat(b-1) * offs_bone * rmat */ - /* rmat = pose_mat(b) * inv( pose_mat(b-1) * offs_bone ) */ + /* rmat = pose_mat(b) * inv(pose_mat(b-1) * offs_bone ) */ parchan= chanlist[segcount-1]; bone= parchan->bone; bone->flag |= BONE_TRANSFORM; /* ensures it gets an auto key inserted */ - /* XXX Old code. Will remove it later. */ -#if 0 - if (parchan->parent) { - Bone *parbone= parchan->parent->bone; - float offs_bone[4][4]; - - /* offs_bone = yoffs(b-1) + root(b) + bonemat(b) */ - copy_m4_m3(offs_bone, bone->bone_mat); - - /* The bone's root offset (is in the parent's coordinate system) */ - copy_v3_v3(offs_bone[3], bone->head); - - /* Get the length translation of parent (length along y axis) */ - offs_bone[3][1]+= parbone->length; - - /* pose_mat(b-1) * offs_bone */ - if (parchan->bone->flag & BONE_HINGE) { - /* the rotation of the parent restposition */ - copy_m4_m4(rmat, parbone->arm_mat); /* rmat used as temp */ - - /* the location of actual parent transform */ - copy_v3_v3(rmat[3], offs_bone[3]); - offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; - mul_m4_v3(parchan->parent->pose_mat, rmat[3]); - - mult_m4_m4m4(tmat, rmat, offs_bone); - } - else if (parchan->bone->flag & BONE_NO_SCALE) { - mult_m4_m4m4(tmat, parchan->parent->pose_mat, offs_bone); - normalize_m4(tmat); - } - else - mult_m4_m4m4(tmat, parchan->parent->pose_mat, offs_bone); - - invert_m4_m4(imat, tmat); - } - else { - copy_m4_m3(tmat, bone->bone_mat); - - copy_v3_v3(tmat[3], bone->head); - invert_m4_m4(imat, tmat); - } - /* result matrix */ - mult_m4_m4m4(rmat, imat, parchan->pose_mat); -#endif armature_mat_pose_to_bone(parchan, parchan->pose_mat, rmat); /* apply and decompose, doesn't work for constraints or non-uniform scale well */ @@ -484,25 +439,25 @@ static short apply_targetless_ik(Object *ob) * and applied poses. */ if (parchan->rotmode > 0) - mat3_to_eulO(parchan->eul, parchan->rotmode,rmat3); + mat3_to_eulO(parchan->eul, parchan->rotmode, rmat3); else if (parchan->rotmode == ROT_MODE_AXISANGLE) - mat3_to_axis_angle(parchan->rotAxis, &parchan->rotAngle,rmat3); + mat3_to_axis_angle(parchan->rotAxis, &parchan->rotAngle, rmat3); else - mat3_to_quat(parchan->quat,rmat3); + mat3_to_quat(parchan->quat, rmat3); /* for size, remove rotation */ /* causes problems with some constraints (so apply only if needed) */ if (data->flag & CONSTRAINT_IK_STRETCH) { if (parchan->rotmode > 0) - eulO_to_mat3( qrmat,parchan->eul, parchan->rotmode); + eulO_to_mat3(qrmat, parchan->eul, parchan->rotmode); else if (parchan->rotmode == ROT_MODE_AXISANGLE) - axis_angle_to_mat3( qrmat,parchan->rotAxis, parchan->rotAngle); + axis_angle_to_mat3(qrmat, parchan->rotAxis, parchan->rotAngle); else - quat_to_mat3( qrmat,parchan->quat); + quat_to_mat3(qrmat, parchan->quat); invert_m3_m3(imat3, qrmat); mul_m3_m3m3(smat, rmat3, imat3); - mat3_to_size( parchan->size,smat); + mat3_to_size(parchan->size, smat); } /* causes problems with some constraints (e.g. childof), so disable this */ @@ -593,53 +548,11 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr if (constraints_list_needinv(t, &pchan->constraints)) { copy_m3_m4(tmat, pchan->constinv); invert_m3_m3(cmat, tmat); - mul_serie_m3(td->mtx, pmat, omat, cmat, NULL,NULL,NULL,NULL,NULL); - } - else - mul_serie_m3(td->mtx, pmat, omat, NULL, NULL,NULL,NULL,NULL,NULL); - } - - /* XXX Old code. Will remove it later. */ -#if 0 - if (ELEM(t->mode, TFM_TRANSLATION, TFM_RESIZE) && (pchan->bone->flag & BONE_NO_LOCAL_LOCATION)) - unit_m3(bmat); - else - copy_m3_m3(bmat, pchan->bone->bone_mat); - - if (pchan->parent) { - if (pchan->bone->flag & BONE_HINGE) { - copy_m3_m4(pmat, pchan->parent->bone->arm_mat); - if (!(pchan->bone->flag & BONE_NO_SCALE)) { - float tsize[3], tsmat[3][3]; - mat4_to_size(tsize, pchan->parent->pose_mat); - size_to_mat3(tsmat, tsize); - mul_m3_m3m3(pmat, tsmat, pmat); - } - } - else { - copy_m3_m4(pmat, pchan->parent->pose_mat); - if (pchan->bone->flag & BONE_NO_SCALE) - normalize_m3(pmat); - } - - if (constraints_list_needinv(t, &pchan->constraints)) { - copy_m3_m4(tmat, pchan->constinv); - invert_m3_m3(cmat, tmat); - mul_serie_m3(td->mtx, bmat, pmat, omat, cmat, NULL,NULL,NULL,NULL); - } - else - mul_serie_m3(td->mtx, bmat, pmat, omat, NULL,NULL,NULL,NULL,NULL); - } - else { - if (constraints_list_needinv(t, &pchan->constraints)) { - copy_m3_m4(tmat, pchan->constinv); - invert_m3_m3(cmat, tmat); - mul_serie_m3(td->mtx, bmat, omat, cmat, NULL,NULL,NULL,NULL,NULL); + mul_serie_m3(td->mtx, pmat, omat, cmat, NULL, NULL, NULL, NULL, NULL); } else - mul_m3_m3m3(td->mtx, omat, bmat); + mul_serie_m3(td->mtx, pmat, omat, NULL, NULL, NULL, NULL, NULL, NULL); } -# endif invert_m3_m3(td->smtx, td->mtx); @@ -705,9 +618,8 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb) { Bone *bone= lb->first; - for (;bone;bone= bone->next) { - if ((bone->flag & BONE_HINGE) && (bone->flag & BONE_CONNECTED)) - { + for ( ; bone;bone= bone->next) { + if ((bone->flag & BONE_HINGE) && (bone->flag & BONE_CONNECTED)) { bone->flag |= BONE_HINGE_CHILD_TRANSFORM; } else if ((bone->flag & BONE_TRANSFORM) && @@ -768,7 +680,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) total++; if (mode == TFM_TRANSLATION) { - if ( has_targetless_ik(pchan)==NULL ) { + if (has_targetless_ik(pchan) == NULL) { if (pchan->parent && (pchan->bone->flag & BONE_CONNECTED)) { if (pchan->bone->flag & BONE_HINGE_CHILD_TRANSFORM) hastranslation = 1; @@ -783,8 +695,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) } /* if there are no translatable bones, do rotation */ - if (mode == TFM_TRANSLATION && !hastranslation) - { + if (mode == TFM_TRANSLATION && !hastranslation) { *out_mode = TFM_ROTATION; } @@ -821,7 +732,7 @@ static void pchan_autoik_adjust (bPoseChannel *pchan, short chainlen) } /* change the chain-length of auto-ik */ -void transform_autoik_update (TransInfo *t, short mode) +void transform_autoik_update(TransInfo *t, short mode) { short *chainlen= &t->settings->autoik_chainlen; bPoseChannel *pchan; @@ -1112,16 +1023,13 @@ static void createTransArmatureVerts(TransInfo *t) t->mode= TFM_BONE_ENVELOPE; t->total = 0; - for (ebo = edbo->first; ebo; ebo = ebo->next) - { - if (EBONE_VISIBLE(arm, ebo) && !(ebo->flag & BONE_EDITMODE_LOCKED)) - { - if (t->mode==TFM_BONESIZE) - { + for (ebo = edbo->first; ebo; ebo = ebo->next) { + if (EBONE_VISIBLE(arm, ebo) && !(ebo->flag & BONE_EDITMODE_LOCKED)) { + if (t->mode == TFM_BONESIZE) { if (ebo->flag & BONE_SELECTED) t->total++; } - else if (t->mode==TFM_BONE_ROLL) { + else if (t->mode == TFM_BONE_ROLL) { if (ebo->flag & BONE_SELECTED) t->total++; } @@ -1141,16 +1049,12 @@ static void createTransArmatureVerts(TransInfo *t) td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransEditBone"); - for (ebo = edbo->first; ebo; ebo = ebo->next) - { + for (ebo = edbo->first; ebo; ebo = ebo->next) { ebo->oldlength = ebo->length; // length==0.0 on extrude, used for scaling radius of bone points - if (EBONE_VISIBLE(arm, ebo) && !(ebo->flag & BONE_EDITMODE_LOCKED)) - { - if (t->mode==TFM_BONE_ENVELOPE) - { - if (ebo->flag & BONE_ROOTSEL) - { + if (EBONE_VISIBLE(arm, ebo) && !(ebo->flag & BONE_EDITMODE_LOCKED)) { + if (t->mode==TFM_BONE_ENVELOPE) { + if (ebo->flag & BONE_ROOTSEL) { td->val= &ebo->rad_head; td->ival= *td->val; @@ -1166,8 +1070,7 @@ static void createTransArmatureVerts(TransInfo *t) td++; } - if (ebo->flag & BONE_TIPSEL) - { + if (ebo->flag & BONE_TIPSEL) { td->val= &ebo->rad_tail; td->ival= *td->val; copy_v3_v3(td->center, ebo->tail); @@ -1186,8 +1089,7 @@ static void createTransArmatureVerts(TransInfo *t) } else if (t->mode==TFM_BONESIZE) { if (ebo->flag & BONE_SELECTED) { - if (arm->drawtype==ARM_ENVELOPE) - { + if (arm->drawtype==ARM_ENVELOPE) { td->loc= NULL; td->val= &ebo->dist; td->ival= ebo->dist; @@ -1217,8 +1119,7 @@ static void createTransArmatureVerts(TransInfo *t) } } else if (t->mode==TFM_BONE_ROLL) { - if (ebo->flag & BONE_SELECTED) - { + if (ebo->flag & BONE_SELECTED) { td->loc= NULL; td->val= &(ebo->roll); td->ival= ebo->roll; @@ -1233,8 +1134,7 @@ static void createTransArmatureVerts(TransInfo *t) } } else { - if (ebo->flag & BONE_TIPSEL) - { + if (ebo->flag & BONE_TIPSEL) { copy_v3_v3(td->iloc, ebo->tail); copy_v3_v3(td->center, (t->around==V3D_LOCAL) ? ebo->head : td->iloc); td->loc= ebo->tail; @@ -1248,8 +1148,7 @@ static void createTransArmatureVerts(TransInfo *t) sub_v3_v3v3(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, td->axismtx); - if ((ebo->flag & BONE_ROOTSEL) == 0) - { + if ((ebo->flag & BONE_ROOTSEL) == 0) { td->extra = ebo; } @@ -1259,8 +1158,7 @@ static void createTransArmatureVerts(TransInfo *t) td++; } - if (ebo->flag & BONE_ROOTSEL) - { + if (ebo->flag & BONE_ROOTSEL) { copy_v3_v3(td->iloc, ebo->head); copy_v3_v3(td->center, td->iloc); td->loc= ebo->head; @@ -1703,7 +1601,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) PTCacheEditPoint *point; PTCacheEditKey *key; float mat[4][4]; - int i,k, transformparticle; + int i, k, transformparticle; int count = 0, hasselected = 0; int propmode = t->flag & T_PROP_EDIT; @@ -1712,7 +1610,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) psys = edit->psys; if (psys) - psmd = psys_get_modifier(ob,psys); + psmd = psys_get_modifier(ob, psys); base->flag |= BA_HAS_RECALC_DATA; @@ -1752,7 +1650,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) unit_m4(mat); - invert_m4_m4(ob->imat,ob->obmat); + invert_m4_m4(ob->imat, ob->obmat); for (i=0, point=edit->points; i<edit->totpoint; i++, point++) { TransData *head, *tail; @@ -1835,7 +1733,7 @@ void flushTransParticles(TransInfo *t) if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, psys->particles + i, mat); - invert_m4_m4(imat,mat); + invert_m4_m4(imat, mat); for (k=0, key=point->keys; k<point->totkey; k++, key++) { copy_v3_v3(co, key->world_co); @@ -2030,8 +1928,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) char *selstate = NULL; short selectmode = ts->selectmode; - if (t->flag & T_MIRROR) - { + if (t->flag & T_MIRROR) { EDBM_verts_mirror_cache_begin(em, TRUE); mirror = 1; } @@ -2142,7 +2039,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) * the modifiers that support deform matrices (defcos) */ if (totleft > 0) { mappedcos= crazyspace_get_mapped_editverts(t->scene, t->obedit); - quats= MEM_mallocN( (t->total)*sizeof(float)*4, "crazy quats"); + quats= MEM_mallocN((t->total)*sizeof(float)*4, "crazy quats"); crazyspace_set_quats_editmesh(em, (float*)defcos, mappedcos, quats); /* BMESH_TODO, abuses vertex index, should use an int array */ if (mappedcos) MEM_freeN(mappedcos); @@ -2158,8 +2055,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); for (a=0; eve; eve=BM_iter_step(&iter), a++) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && selstate[a] && eve->co[0]!=0.0f) { - if (eve->co[0]<0.0f) - { + if (eve->co[0] < 0.0f) { t->mirror = -1; mirror = -1; } @@ -2220,7 +2116,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } /* Mirror? */ - if ( (mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) { + if ((mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) { BMVert *vmir= EDBM_verts_mirror_get(em, eve); //t->obedit, em, eve, tob->iloc, a); if (vmir && vmir != eve) { tob->extra = vmir; @@ -2231,13 +2127,10 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } } - if (mirror != 0) - { + if (mirror != 0) { tob = t->data; - for ( a = 0; a < t->total; a++, tob++ ) - { - if (ABS(tob->loc[0]) <= 0.00001f) - { + for (a = 0; a < t->total; a++, tob++ ) { + if (ABS(tob->loc[0]) <= 0.00001f) { tob->flag |= TD_MIRROR_EDGE; } } @@ -2381,7 +2274,7 @@ void flushTransSeq(TransInfo *t) if (seq->depth==0) { /* test overlap, displayes red outline */ seq->flag &= ~SEQ_OVERLAP; - if ( seq_test_overlap(seqbasep, seq) ) { + if (seq_test_overlap(seqbasep, seq)) { seq->flag |= SEQ_OVERLAP; } } @@ -3074,14 +2967,14 @@ typedef struct tGPFtransdata { } tGPFtransdata; /* This function helps flush transdata written to tempdata into the gp-frames */ -void flushTransGPactionData (TransInfo *t) +void flushTransGPactionData(TransInfo *t) { tGPFtransdata *tfd; int i; /* find the first one to start from */ if (t->mode == TFM_TIME_SLIDE) - tfd= (tGPFtransdata *)( (float *)(t->customData) + 2 ); + tfd= (tGPFtransdata *)((float *)(t->customData) + 2); else tfd= (tGPFtransdata *)(t->customData); @@ -3200,7 +3093,7 @@ static void createTransActionData(bContext *C, TransInfo *t) if (ac.datatype == ANIMCONT_GPENCIL) { if (t->mode == TFM_TIME_SLIDE) { t->customData= MEM_callocN((sizeof(float)*2)+(sizeof(tGPFtransdata)*count), "TimeSlide + tGPFtransdata"); - tfd= (tGPFtransdata *)( (float *)(t->customData) + 2 ); + tfd= (tGPFtransdata *)((float *)(t->customData) + 2); } else { t->customData= MEM_callocN(sizeof(tGPFtransdata)*count, "tGPFtransdata"); @@ -3555,9 +3448,9 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) * then check if we're using auto-handles. * - If so, change them auto-handles to aligned handles so that handles get affected too */ - if ( ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM) && - ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM) && - ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) + if (ELEM(bezt->h1, HD_AUTO, HD_AUTO_ANIM) && + ELEM(bezt->h2, HD_AUTO, HD_AUTO_ANIM) && + ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) { if (hdata && (sel1) && (sel3)) { bezt->h1= HD_ALIGN; @@ -3646,8 +3539,8 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert, const short UNUSED( * optimization: this only needs to be performed in the first loop */ if (bezm->swapHs == 0) { - if ( (bezm->bezt->vec[0][0] > bezm->bezt->vec[1][0]) && - (bezm->bezt->vec[2][0] < bezm->bezt->vec[1][0]) ) + if ((bezm->bezt->vec[0][0] > bezm->bezt->vec[1][0]) && + (bezm->bezt->vec[2][0] < bezm->bezt->vec[1][0]) ) { /* handles need to be swapped */ bezm->swapHs = 1; @@ -3746,7 +3639,7 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv * anim_data is the list of channels (F-Curves) retrieved already containing the * channels to work on. It should not be freed here as it may still need to be used. */ -void remake_graph_transdata (TransInfo *t, ListBase *anim_data) +void remake_graph_transdata(TransInfo *t, ListBase *anim_data) { SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; bAnimListElem *ale; @@ -3801,9 +3694,9 @@ void flushTransGraphData(TransInfo *t) switch (sipo->autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame (or second if drawing seconds) */ if (sipo->flag & SIPO_DRAWTIME) - td2d->loc[0]= (float)( floor((td2d->loc[0]/secf) + 0.5f) * secf ); + td2d->loc[0] = (float)(floorf((td2d->loc[0]/secf) + 0.5f) * secf); else - td2d->loc[0]= (float)( floor(td2d->loc[0]+0.5f) ); + td2d->loc[0] = (float)(floorf(td2d->loc[0]+0.5f)); break; case SACTSNAP_MARKER: /* snap to nearest marker */ @@ -3966,7 +3859,7 @@ static int SeqTransCount(TransInfo *t, Sequence *parent, ListBase *seqbase, int for (seq= seqbase->first; seq; seq= seq->next) { seq->depth= depth; - /* seq->tmp is used by seq_tx_get_final_{left,right} to check sequence's range and clamp to it if needed. + /* seq->tmp is used by seq_tx_get_final_{left, right} to check sequence's range and clamp to it if needed. * it's first place where digging into sequences tree, so store link to parent here */ seq->tmp = parent; @@ -4260,9 +4153,9 @@ static void createTransSeqData(bContext *C, TransInfo *t) int i; for (i=0; i<3; i++) { seq_user= *((&seq->seq1) + i); - if ( seq_user && (seq_user->flag & SELECT) && - !(seq_user->flag & SEQ_LOCK) && - !(seq_user->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) + if (seq_user && (seq_user->flag & SELECT) && + !(seq_user->flag & SEQ_LOCK) && + !(seq_user->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) { seq->flag |= SELECT; } @@ -4560,8 +4453,8 @@ static int count_proportional_objects(TransInfo *t) /* mark all children */ for (base= scene->base.first; base; base= base->next) { /* all base not already selected or marked that is editable */ - if ( (base->object->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && - (BASE_EDITABLE_BGMODE(v3d, scene, base))) + if ((base->object->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && + (BASE_EDITABLE_BGMODE(v3d, scene, base))) { mark_children(base->object); } @@ -4572,8 +4465,8 @@ static int count_proportional_objects(TransInfo *t) Object *ob= base->object; /* if base is not selected, not a parent of selection or not a child of selection and it is editable */ - if ( (ob->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && - (BASE_EDITABLE_BGMODE(v3d, scene, base))) + if ((ob->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && + (BASE_EDITABLE_BGMODE(v3d, scene, base))) { /* used for flush, depgraph will change recalcs if needed :) */ @@ -4924,14 +4817,16 @@ void special_aftertrans_update(bContext *C, TransInfo *t) ED_node_link_intersect_test(t->sa, 0); } else if (t->spacetype == SPACE_CLIP) { - SpaceClip *sc = t->sa->spacedata.first; - MovieClip *clip = ED_space_clip(sc); - - if (t->scene->nodetree) { - /* tracks can be used for stabilization nodes, - * flush update for such nodes */ - nodeUpdateID(t->scene->nodetree, &clip->id); - WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + if (t->options & CTX_MOVIECLIP) { + SpaceClip *sc = t->sa->spacedata.first; + MovieClip *clip = ED_space_clip(sc); + + if (t->scene->nodetree) { + /* tracks can be used for stabilization nodes, + * flush update for such nodes */ + nodeUpdateID(t->scene->nodetree, &clip->id); + WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + } } } else if (t->spacetype == SPACE_ACTION) { @@ -4962,8 +4857,8 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && - ((canceled == 0) || (duplicate)) ) + if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && + ((canceled == 0) || (duplicate)) ) { if (adt) { ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); @@ -4993,8 +4888,8 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && - ((canceled == 0) || (duplicate)) ) + if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && + ((canceled == 0) || (duplicate))) { posttrans_action_clean(&ac, (bAction *)ac.data); } @@ -5006,8 +4901,8 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && - ((canceled == 0) || (duplicate)) ) + if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && + ((canceled == 0) || (duplicate))) { bGPdata *gpd; @@ -5074,8 +4969,8 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ( (sipo->flag & SIPO_NOTRANSKEYCULL)==0 && - ((canceled == 0) || (duplicate)) ) + if ((sipo->flag & SIPO_NOTRANSKEYCULL)==0 && + ((canceled == 0) || (duplicate))) { if (adt) { ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 0); @@ -5186,10 +5081,10 @@ void special_aftertrans_update(bContext *C, TransInfo *t) DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } - else if ( (t->scene->basact) && - (ob = t->scene->basact->object) && - (ob->mode & OB_MODE_PARTICLE_EDIT) && - PE_get_current(t->scene, ob)) + else if ((t->scene->basact) && + (ob = t->scene->basact->object) && + (ob->mode & OB_MODE_PARTICLE_EDIT) && + PE_get_current(t->scene, ob)) { /* do nothing */ } @@ -5289,7 +5184,8 @@ static void createTransObject(bContext *C, TransInfo *t) td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransOb"); tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "TransObExtension"); - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) + { Object *ob= base->object; td->flag = TD_SELECTED; @@ -5402,6 +5298,8 @@ static void createTransNodeData(bContext *C, TransInfo *t) /* *** CLIP EDITOR *** */ +/* * motion tracking * */ + enum { transDataTracking_ModeTracks = 0, transDataTracking_ModeCurves = 1, @@ -5923,7 +5821,8 @@ void createTransData(bContext *C, TransInfo *t) } else if (t->spacetype == SPACE_CLIP) { t->flag |= T_POINTS|T_2D_EDIT; - createTransTrackingData(C, t); + if (t->options & CTX_MOVIECLIP) + createTransTrackingData(C, t); } else if (t->obedit) { t->ext = NULL; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 217e0d36fce..bea1002b5c6 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -204,16 +204,16 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) } if (axis & 2) { - if (fabs(iloc[1])<=tolerance[1] || - loc[1]*iloc[1]<0.0f) + if (fabsf(iloc[1]) <= tolerance[1] || + loc[1] * iloc[1]<0.0f) { loc[1]= 0.0f; clip = 1; } } if (axis & 4) { - if (fabs(iloc[2])<=tolerance[2] || - loc[2]*iloc[2]<0.0f) + if (fabsf(iloc[2]) <= tolerance[2] || + loc[2] * iloc[2] < 0.0f) { loc[2]= 0.0f; clip = 1; @@ -541,12 +541,12 @@ static void recalcData_nla(TransInfo *t) switch (snla->autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame/time */ if (snla->flag & SNLA_DRAWTIME) { - tdn->h1[0]= (float)( floor((tdn->h1[0]/secf) + 0.5f) * secf ); - tdn->h2[0]= (float)( floor((tdn->h2[0]/secf) + 0.5f) * secf ); + tdn->h1[0] = (float)(floor(((double)tdn->h1[0] / secf) + 0.5) * secf); + tdn->h2[0] = (float)(floor(((double)tdn->h2[0] / secf) + 0.5) * secf); } else { - tdn->h1[0]= (float)( floor(tdn->h1[0]+0.5f) ); - tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); + tdn->h1[0] = floorf(tdn->h1[0] + 0.5f); + tdn->h2[0] = floorf(tdn->h2[0] + 0.5f); } break; @@ -633,15 +633,16 @@ static void recalcData_image(TransInfo *t) } /* helper for recalcData() - for Movie Clip transforms */ -static void recalcData_clip(TransInfo *t) +static void recalcData_spaceclip(TransInfo *t) { SpaceClip *sc = t->sa->spacedata.first; + MovieClip *clip = ED_space_clip(sc); ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); MovieTrackingTrack *track; - + flushTransTracking(t); - + track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { @@ -658,10 +659,10 @@ static void recalcData_clip(TransInfo *t) BKE_tracking_clamp_track(track, CLAMP_SEARCH_DIM); } } - + track = track->next; } - + DAG_id_tag_update(&clip->id, 0); } @@ -900,7 +901,7 @@ void recalcData(TransInfo *t) recalcData_view3d(t); } else if (t->spacetype == SPACE_CLIP) { - recalcData_clip(t); + recalcData_spaceclip(t); } } @@ -948,7 +949,7 @@ void resetTransRestrictions(TransInfo *t) } /* the *op can be NULL */ -int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) +int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) { Scene *sce = CTX_data_scene(C); ToolSettings *ts = CTX_data_tool_settings(C); @@ -1212,7 +1213,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } /* Here I would suggest only TransInfo related issues, like free data & reset vars. Not redraws */ -void postTrans (bContext *C, TransInfo *t) +void postTrans(bContext *C, TransInfo *t) { TransData *td; @@ -1653,7 +1654,7 @@ void calculatePropRatio(TransInfo *t) td->factor = (float)sqrt(2*dist - dist * dist); break; case PROP_RANDOM: - BLI_srand( BLI_rand() ); /* random seed */ + BLI_srand(BLI_rand()); /* random seed */ td->factor = BLI_frand()*dist; break; default: diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 467e3dc600e..0f0d1cc8344 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -199,17 +199,17 @@ static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, const int mva mdx = (mi->precision_mval[0] + (float)(mval[0] - mi->precision_mval[0]) / 10.0f) - data[2]; mdy = (mi->precision_mval[1] + (float)(mval[1] - mi->precision_mval[1]) / 10.0f) - data[3]; - distance = (length != 0.0f)? (mdx*dx + mdy*dy) / length: 0.0f; + distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length: 0.0; } else { int mdx, mdy; mdx = mval[0] - data[2]; mdy = mval[1] - data[3]; - distance = (length != 0.0f)? (mdx*dx + mdy*dy) / length: 0.0f; + distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length: 0.0; } - output[0] = (float)((length != 0.0f)? distance / length: 0.0f); + output[0] = (length != 0.0) ? (double)(distance / length) : 0.0f; } } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index f8a982c6b71..093c81c8d37 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -297,7 +297,7 @@ int calc_manipulator_stats(const bContext *C) if (obedit->type==OB_MESH) { BMEditMesh *em = BMEdit_FromObject(obedit); BMEditSelection ese; - float vec[3]= {0,0,0}; + float vec[3]= {0, 0, 0}; /* USE LAST SELECTE WITH ACTIVE */ if ((v3d->around == V3D_ACTIVE) && BM_select_history_active_get(em->bm, &ese)) { @@ -508,7 +508,7 @@ int calc_manipulator_stats(const bContext *C) if (edit) { point = edit->points; - for (a=0; a<edit->totpoint; a++,point++) { + for (a=0; a<edit->totpoint; a++, point++) { if (point->flag & PEP_HIDE) continue; for (k=0, ek=point->keys; k<point->totkey; k++, ek++) { @@ -643,7 +643,7 @@ static float screen_aligned(RegionView3D *rv3d, float mat[][4]) glTranslatef(mat[3][0], mat[3][1], mat[3][2]); /* sets view screen aligned */ - glRotatef( -360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); + glRotatef(-360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); return len_v3(mat[0]); /* draw scale */ } @@ -884,7 +884,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glClipPlane(GL_CLIP_PLANE0, plane); } /* sets view screen aligned */ - glRotatef( -360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); + glRotatef(-360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); /* Screen aligned help circle */ if (arcs) { @@ -1512,7 +1512,7 @@ void BIF_draw_manipulator(const bContext *C) if (v3d->twflag & V3D_DRAW_MANIPULATOR) { - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); if (v3d->twtype & V3D_MANIP_ROTATE) { @@ -1553,7 +1553,7 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, const int mval[2], fl setwinmatrixview3d(ar, v3d, &rect); mult_m4_m4m4(rv3d->persmat, rv3d->winmat, rv3d->viewmat); - glSelectBuffer( 64, buffer); + glSelectBuffer(64, buffer); glRenderMode(GL_SELECT); glInitNames(); /* these two calls whatfor? It doesnt work otherwise */ glPushName(-2); diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index b9ae3180591..ccd794d0101 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -145,7 +145,7 @@ static int snap_type_exec(bContext *C, wmOperator *op) { ToolSettings *ts= CTX_data_tool_settings(C); - ts->snap_mode = RNA_enum_get(op->ptr,"type"); + ts->snap_mode = RNA_enum_get(op->ptr, "type"); WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */ @@ -926,7 +926,6 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac kmi = WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_A, KM_ANY, 0, 0); RNA_boolean_set(kmi->ptr, "release_confirm", TRUE); kmi = WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); - RNA_boolean_set(kmi->ptr, "release_confirm", TRUE); WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); @@ -936,7 +935,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac WM_keymap_add_item(keymap, "NODE_OT_move_detach_links", DKEY, KM_PRESS, KM_ALT, 0); /* XXX release_confirm is set in the macro operator definition */ - WM_keymap_add_item(keymap, "NODE_OT_move_detach_links", EVT_TWEAK_A, KM_ANY, KM_ALT, 0); + WM_keymap_add_item(keymap, "NODE_OT_move_detach_links_release", EVT_TWEAK_A, KM_ANY, KM_ALT, 0); WM_keymap_add_item(keymap, "NODE_OT_move_detach_links", EVT_TWEAK_S, KM_ANY, KM_ALT, 0); break; case SPACE_SEQ: diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 3d7f5d758c6..a8979fa1ab9 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -572,7 +572,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BMEditMesh *em = me->edit_btmesh; BMVert *eve; BMEditSelection ese; - float vec[3]= {0,0,0}; + float vec[3]= {0, 0, 0}; /* USE LAST SELECTED WITH ACTIVE */ if (activeOnly && BM_select_history_active_get(em->bm, &ese)) { @@ -768,7 +768,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], float mat[4][4]; /* Rotation of MetaElem is stored in quat */ - quat_to_mat4( mat,ml_sel->quat); + quat_to_mat4(mat, ml_sel->quat); copy_v3_v3(normal, mat[2]); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 0a5613bca22..fa579293a73 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -188,10 +188,10 @@ void drawSnapping(const struct bContext *C, TransInfo *t) glBegin(GL_LINES); glVertex3f(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]); - glVertex3f( t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], - t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1], - t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]); - glEnd(); + glVertex3f(t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], + t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1], + t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]); + glEnd(); } if (v3d->zbuf) @@ -216,7 +216,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t) cpack(0xFFFFFF); glTranslatef(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], 0.0f); - //glRectf(0,0,1,1); + //glRectf(0, 0, 1, 1); setlinestyle(0); cpack(0x0); @@ -700,7 +700,7 @@ static float RotationBetween(TransInfo *t, float p1[3], float p2[3]) mul_m3_v3(mtx, end); mul_m3_v3(mtx, start); - angle = atan2(start[1],start[0]) - atan2(end[1],end[0]); + angle = atan2(start[1], start[0]) - atan2(end[1], end[0]); } if (angle > (float)M_PI) { @@ -1055,9 +1055,9 @@ static int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], fl copy_v3_v3(location, intersect); if (v4co) - normal_quad_v3( normal,v1co, v2co, v3co, v4co); + normal_quad_v3(normal, v1co, v2co, v3co, v4co); else - normal_tri_v3( normal,v1co, v2co, v3co); + normal_tri_v3(normal, v1co, v2co, v3co); mul_m4_v3(obmat, location); @@ -1738,9 +1738,9 @@ static int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], copy_v3_v3(location, intersect); if (f->v4) - normal_quad_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); + normal_quad_v3(normal, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); else - normal_tri_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); + normal_tri_v3(normal, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); mul_m4_v3(obmat, location); @@ -1767,13 +1767,13 @@ static int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], copy_v3_v3(location, intersect); if (f->v4) - normal_quad_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); + normal_quad_v3(normal, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, verts[f->v4].co); else - normal_tri_v3( normal,verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); + normal_tri_v3(normal, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co); mul_m4_v3(obmat, location); - new_depth = len_v3v3(location, ray_start); + new_depth = len_v3v3(location, ray_start); mul_m3_v3(timat, normal); normalize_v3(normal); diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index fb7e2254e45..a90f8253654 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -855,7 +855,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) glDisable(GL_BLEND); /* draw vert preview */ - glPointSize(pointsize * 2.0); + glPointSize(pointsize * 2.0f); UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE); glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_stitchable); glDrawArrays(GL_POINTS, 0, stitch_preview->num_stitchable); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index a30274c0f2c..b515f30e150 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -728,7 +728,7 @@ static int nearest_uv_between(BMEditMesh *em, BMFace *efa, int UNUSED(nverts), i BMLoop *l; MLoopUV *luv; BMIter iter; - float m[3], v1[3], v2[3], c1, c2, *uv1, /* *uv2, */ /* UNUSED */ *uv3; + float m[3], v1[3], v2[3], c1, c2, *uv1 = NULL, /* *uv2, */ /* UNUSED */ *uv3 = NULL; int id1, id2, i; id1 = (id + efa->len - 1) % efa->len; @@ -799,9 +799,9 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em, luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); if (penalty && uvedit_uv_select_test(em, scene, l)) - dist = fabs(co[0] - luv->uv[0]) + penalty[0] + fabs(co[1] - luv->uv[1]) + penalty[1]; + dist = fabsf(co[0] - luv->uv[0]) + penalty[0] + fabsf(co[1] - luv->uv[1]) + penalty[1]; else - dist = fabs(co[0] - luv->uv[0]) + fabs(co[1] - luv->uv[1]); + dist = fabsf(co[0] - luv->uv[0]) + fabsf(co[1] - luv->uv[1]); if (dist <= mindist) { if (dist == mindist) @@ -2603,9 +2603,7 @@ static int circle_select_exec(bContext *C, wmOperator *op) if (change) { uv_select_sync_flush(ts, em, select); - if (ts->uv_flag & UV_SYNC_SELECTION) { - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); - } + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); } return OPERATOR_FINISHED; @@ -2711,7 +2709,8 @@ static int uv_lasso_select_exec(bContext *C, wmOperator *op) int i = 0; int mcords[1024][2]; - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c index c1abfe69cc1..2b93246e797 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.c +++ b/source/blender/editors/uvedit/uvedit_parametrizer.c @@ -1,3 +1,25 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): + * + * ***** END GPL LICENSE BLOCK ***** + */ + /** \file blender/editors/uvedit/uvedit_parametrizer.c * \ingroup eduv */ @@ -4334,7 +4356,7 @@ void param_smooth_area(ParamHandle *handle) void param_pack(ParamHandle *handle, float margin) { /* box packing variables */ - boxPack *boxarray, *box; + BoxPack *boxarray, *box; float tot_width, tot_height, scale; PChart *chart; @@ -4351,7 +4373,7 @@ void param_pack(ParamHandle *handle, float margin) param_scale(handle, 1.0f / phandle->aspx, 1.0f / phandle->aspy); /* we may not use all these boxes */ - boxarray = MEM_mallocN(phandle->ncharts * sizeof(boxPack), "boxPack box"); + boxarray = MEM_mallocN(phandle->ncharts * sizeof(BoxPack), "BoxPack box"); for (i = 0; i < phandle->ncharts; i++) { @@ -4402,7 +4424,7 @@ void param_pack(ParamHandle *handle, float margin) } } - boxPack2D(boxarray, phandle->ncharts - unpacked, &tot_width, &tot_height); + BLI_box_pack_2D(boxarray, phandle->ncharts - unpacked, &tot_width, &tot_height); if (tot_height > tot_width) scale = 1.0f / tot_height; diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h b/source/blender/editors/uvedit/uvedit_parametrizer.h index 1643a89b089..3c886367191 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.h +++ b/source/blender/editors/uvedit/uvedit_parametrizer.h @@ -1,10 +1,32 @@ -/** \file blender/editors/uvedit/uvedit_parametrizer.h - * \ingroup eduv +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): + * + * ***** END GPL LICENSE BLOCK ***** */ #ifndef __UVEDIT_PARAMETRIZER_H__ #define __UVEDIT_PARAMETRIZER_H__ +/** \file blender/editors/uvedit/uvedit_parametrizer.h + * \ingroup eduv + */ + #ifdef __cplusplus extern "C" { #endif diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index e1b2d87c4f2..b30821dc56a 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -257,8 +257,8 @@ static void stitch_uv_rotate(float rotation, float medianPoint[2], float uv[2]) uv[0] -= medianPoint[0]; uv[1] -= medianPoint[1]; - uv_rotation_result[0] = cos(rotation) * uv[0] - sin(rotation) * uv[1]; - uv_rotation_result[1] = sin(rotation) * uv[0] + cos(rotation) * uv[1]; + uv_rotation_result[0] = cosf(rotation) * uv[0] - sinf(rotation) * uv[1]; + uv_rotation_result[1] = sinf(rotation) * uv[0] + cosf(rotation) * uv[1]; uv[0] = uv_rotation_result[0] + medianPoint[0]; uv[1] = uv_rotation_result[1] + medianPoint[1]; @@ -286,8 +286,8 @@ static int stitch_check_uvs_stitchable(UvElement *element, UvElement *element_it l_iter = element_iter->l; luv_iter = CustomData_bmesh_get(&state->em->bm->ldata, l_iter->head.data, CD_MLOOPUV); - if (fabs(luv_orig->uv[0] - luv_iter->uv[0]) < limit && - fabs(luv_orig->uv[1] - luv_iter->uv[1]) < limit) + if (fabsf(luv_orig->uv[0] - luv_iter->uv[0]) < limit && + fabsf(luv_orig->uv[1] - luv_iter->uv[1]) < limit) { return 1; } @@ -403,7 +403,7 @@ static void stitch_island_calculate_edge_rotation(UvEdge *edge, StitchState *sta edgecos = uv1[0] * uv2[0] + uv1[1] * uv2[1]; edgesin = uv1[0] * uv2[1] - uv2[0] * uv1[1]; - rotation = (edgesin > 0) ? acos(MAX2(-1.0, MIN2(1.0, edgecos))) : -acos(MAX2(-1.0, MIN2(1.0, edgecos))); + rotation = (edgesin > 0.0f) ? acosf(MAX2(-1.0f, MIN2(1.0f, edgecos))) : -acosf(MAX2(-1.0f, MIN2(1.0f, edgecos))); island_stitch_data[element1->island].num_rot_elements++; island_stitch_data[element1->island].rotation += rotation; @@ -412,7 +412,7 @@ static void stitch_island_calculate_edge_rotation(UvEdge *edge, StitchState *sta static void stitch_island_calculate_vert_rotation(UvElement *element, StitchState *state, IslandStitchData *island_stitch_data) { - float edgecos = 1, edgesin = 0; + float edgecos = 1.0f, edgesin = 0.0f; int index; UvElement *element_iter; float rotation = 0; @@ -441,12 +441,12 @@ static void stitch_island_calculate_vert_rotation(UvElement *element, StitchStat negate_v2_v2(normal, state->normals + index_tmp2 * 2); edgecos = dot_v2v2(normal, state->normals + index_tmp1 * 2); edgesin = cross_v2v2(normal, state->normals + index_tmp1 * 2); - rotation += (edgesin > 0) ? acos(edgecos) : -acos(edgecos); + rotation += (edgesin > 0.0f) ? acosf(edgecos) : -acosf(edgecos); } } if (state->midpoints) - rotation /= 2.0; + rotation /= 2.0f; island_stitch_data[element->island].num_rot_elements++; island_stitch_data[element->island].rotation += rotation; } @@ -1162,7 +1162,8 @@ static int stitch_init(bContext *C, wmOperator *op) EDBM_index_arrays_init(em, 0, 0, 1); - RNA_BEGIN (op->ptr, itemptr, "selection") { + RNA_BEGIN (op->ptr, itemptr, "selection") + { faceIndex = RNA_int_get(&itemptr, "face_index"); elementIndex = RNA_int_get(&itemptr, "element_index"); efa = EDBM_face_at_index(em, faceIndex); @@ -1178,13 +1179,13 @@ static int stitch_init(bContext *C, wmOperator *op) } else { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - i = 0; - BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { if (uvedit_uv_select_test(em, scene, l)) { UvElement *element = ED_uv_element_get(state->element_map, efa, l); - stitch_select_uv(element, state, 1); + if (element) { + stitch_select_uv(element, state, 1); + } } - i++; } } } @@ -1363,7 +1364,7 @@ static int stitch_modal(bContext *C, wmOperator *op, wmEvent *event) case PADPLUSKEY: case WHEELUPMOUSE: if (event->alt) { - stitch_state->limit_dist += 0.01; + stitch_state->limit_dist += 0.01f; if (!stitch_process_data(stitch_state, scene, 0)) { return stitch_cancel(C, op); } @@ -1376,8 +1377,8 @@ static int stitch_modal(bContext *C, wmOperator *op, wmEvent *event) case PADMINUS: case WHEELDOWNMOUSE: if (event->alt) { - stitch_state->limit_dist -= 0.01; - stitch_state->limit_dist = MAX2(0.01, stitch_state->limit_dist); + stitch_state->limit_dist -= 0.01f; + stitch_state->limit_dist = MAX2(0.01f, stitch_state->limit_dist); if (!stitch_process_data(stitch_state, scene, 0)) { return stitch_cancel(C, op); } diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 2a9d472c204..14c8420a8f5 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -262,13 +262,13 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, } else { /* ngon - scanfill time! */ - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); firstv = lastv = NULL; BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { int i; - v = BLI_addfillvert(&sf_ctx, l->v->co); + v = BLI_scanfill_vert_add(&sf_ctx, l->v->co); /* add small random offset */ for (i = 0; i < 3; i++) { @@ -278,7 +278,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, v->tmp.p = l; if (lastv) { - BLI_addfilledge(&sf_ctx, lastv, v); + BLI_scanfill_edge_add(&sf_ctx, lastv, v); } lastv = v; @@ -286,9 +286,9 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, firstv = v; } - BLI_addfilledge(&sf_ctx, firstv, v); + BLI_scanfill_edge_add(&sf_ctx, firstv, v); - BLI_edgefill_ex(&sf_ctx, TRUE, efa->no); + BLI_scanfill_calc_ex(&sf_ctx, TRUE, efa->no); for (sefa = sf_ctx.fillfacebase.first; sefa; sefa = sefa->next) { ls[0] = sefa->v1->tmp.p; ls[1] = sefa->v2->tmp.p; @@ -306,7 +306,7 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, param_face_add(handle, key, 3, vkeys, co, uv, pin, select); } - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); } } @@ -837,10 +837,11 @@ void ED_uvedit_live_unwrap(Scene *scene, Object *obedit) { BMEditMesh *em = BMEdit_FromObject(obedit); - if (scene->toolsettings->edge_mode_live_unwrap && - CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)) { - ED_unwrap_lscm(scene, obedit, FALSE); /* unwrap all not just sel */ - } + if (scene->toolsettings->edge_mode_live_unwrap && + CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)) + { + ED_unwrap_lscm(scene, obedit, FALSE); /* unwrap all not just sel */ + } } /*************** UV Map Common Transforms *****************/ @@ -1026,7 +1027,7 @@ static void correct_uv_aspect(BMEditMesh *em) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - luv->uv[0] = ((luv->uv[0] - 0.5) * scale) + 0.5; + luv->uv[0] = ((luv->uv[0] - 0.5f) * scale) + 0.5f; } } } @@ -1039,7 +1040,7 @@ static void correct_uv_aspect(BMEditMesh *em) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - luv->uv[1] = ((luv->uv[1] - 0.5) * scale) + 0.5; + luv->uv[1] = ((luv->uv[1] - 0.5f) * scale) + 0.5f; } } } @@ -1142,6 +1143,7 @@ void ED_unwrap_lscm(Scene *scene, Object *obedit, const short sel) param_lscm_solve(handle); param_lscm_end(handle); + param_average(handle); param_pack(handle, scene->toolsettings->uvcalc_margin); param_flush(handle); @@ -1263,12 +1265,12 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - project_from_view_ortho(luv->uv, l->v->co, rotmat); + BLI_uvproject_from_view_ortho(luv->uv, l->v->co, rotmat); } } } else if (camera) { - struct UvCameraInfo *uci = project_camera_info(v3d->camera, obedit->obmat, scene->r.xsch, scene->r.ysch); + struct ProjCameraInfo *uci = BLI_uvproject_camera_info(v3d->camera, obedit->obmat, scene->r.xsch, scene->r.ysch); if (uci) { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { @@ -1277,7 +1279,7 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - project_from_camera(luv->uv, l->v->co, uci); + BLI_uvproject_from_camera(luv->uv, l->v->co, uci); } } @@ -1293,7 +1295,7 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - project_from_view(luv->uv, l->v->co, rv3d->persmat, rotmat, ar->winx, ar->winy); + BLI_uvproject_from_view(luv->uv, l->v->co, rv3d->persmat, rotmat, ar->winx, ar->winy); } } } diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 01afc0e24eb..59e384cbd4b 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -50,8 +50,13 @@ set(SRC intern/gpu_draw.c intern/gpu_extensions.c intern/gpu_material.c - intern/gpu_shader_material.glsl.c - intern/gpu_shader_vertex.glsl.c + + shaders/gpu_shader_material.glsl.c + shaders/gpu_shader_vertex.glsl.c + shaders/gpu_shader_sep_gaussian_blur_frag.glsl.c + shaders/gpu_shader_sep_gaussian_blur_vert.glsl.c + shaders/gpu_shader_vsm_store_frag.glsl.c + shaders/gpu_shader_vsm_store_vert.glsl.c GPU_buffers.h GPU_draw.h diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h index 5f541e2e8e6..b04da04258e 100644 --- a/source/blender/gpu/GPU_extensions.h +++ b/source/blender/gpu/GPU_extensions.h @@ -109,6 +109,7 @@ GPUTexture *GPU_texture_create_1D(int w, float *pixels, char err_out[256]); GPUTexture *GPU_texture_create_2D(int w, int h, float *pixels, char err_out[256]); GPUTexture *GPU_texture_create_3D(int w, int h, int depth, float *fpixels); GPUTexture *GPU_texture_create_depth(int w, int h, char err_out[256]); +GPUTexture *GPU_texture_create_vsm_shadow_map(int size, char err_out[256]); GPUTexture *GPU_texture_from_blender(struct Image *ima, struct ImageUser *iuser, double time, int mipmap); void GPU_texture_free(GPUTexture *tex); @@ -140,6 +141,7 @@ void GPU_framebuffer_texture_unbind(GPUFrameBuffer *fb, GPUTexture *tex); void GPU_framebuffer_free(GPUFrameBuffer *fb); void GPU_framebuffer_restore(void); +void GPU_framebuffer_blur(GPUFrameBuffer *fb, GPUTexture *tex, GPUFrameBuffer *blurfb, GPUTexture *blurtex); /* GPU OffScreen * - wrapper around framebuffer and texture for simple offscreen drawing @@ -169,6 +171,15 @@ void GPU_shader_uniform_texture(GPUShader *shader, int location, GPUTexture *tex int GPU_shader_get_attribute(GPUShader *shader, const char *name); +/* Builtin/Non-generated shaders */ +typedef enum GPUBuiltinShader { + GPU_SHADER_VSM_STORE = (1<<0), + GPU_SHADER_SEP_GAUSSIAN_BLUR = (1<<1), +} GPUBuiltinShader; + +GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader); +void GPU_shader_free_builtin_shaders(void); + /* Vertex attributes for shaders */ #define GPU_MAX_ATTRIB 32 diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index 33c5d474932..7f5ae0ba2a1 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -225,6 +225,7 @@ GPULamp *GPU_lamp_from_blender(struct Scene *scene, struct Object *ob, struct Ob void GPU_lamp_free(struct Object *ob); int GPU_lamp_has_shadow_buffer(GPULamp *lamp); +void GPU_lamp_update_buffer_mats(GPULamp *lamp); void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]); void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp); diff --git a/source/blender/gpu/SConscript b/source/blender/gpu/SConscript index 11b0ee5f9fa..cf1c91f25fe 100644 --- a/source/blender/gpu/SConscript +++ b/source/blender/gpu/SConscript @@ -2,6 +2,7 @@ Import ('env') sources = env.Glob('intern/*.c') +sources += env.Glob('shaders/*.c') defs = [ 'GLEW_STATIC' ] diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 980aed64ed9..0b3ee03c8de 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -408,7 +408,7 @@ GPUDrawObject *GPU_drawobject_new( DerivedMesh *dm ) points_per_mat[mface[i].mat_nr] += mface[i].v4 ? 6 : 3; /* create the GPUDrawObject */ - gdo = MEM_callocN(sizeof(GPUDrawObject),"GPUDrawObject"); + gdo = MEM_callocN(sizeof(GPUDrawObject), "GPUDrawObject"); gdo->totvert = dm->getNumVerts(dm); gdo->totedge = dm->getNumEdges(dm); @@ -601,7 +601,7 @@ static void GPU_buffer_copy_vertex(DerivedMesh *dm, float *varray, int *index, i j = dm->drawObject->tot_triangle_point*3; for (i = 0; i < dm->drawObject->totvert; i++) { if (dm->drawObject->vert_points[i].point_index >= dm->drawObject->tot_triangle_point) { - copy_v3_v3(&varray[j],mvert[i].co); + copy_v3_v3(&varray[j], mvert[i].co); j+=3; } } @@ -685,16 +685,16 @@ static void GPU_buffer_copy_uv(DerivedMesh *dm, float *varray, int *index, int * start = index[mat_orig_to_new[f->mat_nr]]; /* v1 v2 v3 */ - copy_v2_v2(&varray[start],mtface[i].uv[0]); - copy_v2_v2(&varray[start+2],mtface[i].uv[1]); - copy_v2_v2(&varray[start+4],mtface[i].uv[2]); + copy_v2_v2(&varray[start], mtface[i].uv[0]); + copy_v2_v2(&varray[start+2], mtface[i].uv[1]); + copy_v2_v2(&varray[start+4], mtface[i].uv[2]); index[mat_orig_to_new[f->mat_nr]] += 6; if (f->v4) { /* v3 v4 v1 */ - copy_v2_v2(&varray[start+6],mtface[i].uv[2]); - copy_v2_v2(&varray[start+8],mtface[i].uv[3]); - copy_v2_v2(&varray[start+10],mtface[i].uv[0]); + copy_v2_v2(&varray[start+6], mtface[i].uv[2]); + copy_v2_v2(&varray[start+8], mtface[i].uv[3]); + copy_v2_v2(&varray[start+10], mtface[i].uv[0]); index[mat_orig_to_new[f->mat_nr]] += 6; } } @@ -788,25 +788,25 @@ static void GPU_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(i for (i = 0; i < dm->numTessFaceData; i++, tf++) { MFace mf; - dm->getTessFace(dm,i,&mf); + dm->getTessFace(dm, i, &mf); - copy_v2_v2(&varray[j],tf->uv[0]); - copy_v2_v2(&varray[j+2],tf->uv[1]); + copy_v2_v2(&varray[j], tf->uv[0]); + copy_v2_v2(&varray[j+2], tf->uv[1]); - copy_v2_v2(&varray[j+4],tf->uv[1]); - copy_v2_v2(&varray[j+6],tf->uv[2]); + copy_v2_v2(&varray[j+4], tf->uv[1]); + copy_v2_v2(&varray[j+6], tf->uv[2]); if (!mf.v4) { - copy_v2_v2(&varray[j+8],tf->uv[2]); - copy_v2_v2(&varray[j+10],tf->uv[0]); + copy_v2_v2(&varray[j+8], tf->uv[2]); + copy_v2_v2(&varray[j+10], tf->uv[0]); j+=12; } else { - copy_v2_v2(&varray[j+8],tf->uv[2]); - copy_v2_v2(&varray[j+10],tf->uv[3]); + copy_v2_v2(&varray[j+8], tf->uv[2]); + copy_v2_v2(&varray[j+10], tf->uv[3]); - copy_v2_v2(&varray[j+12],tf->uv[3]); - copy_v2_v2(&varray[j+14],tf->uv[0]); + copy_v2_v2(&varray[j+12], tf->uv[3]); + copy_v2_v2(&varray[j+14], tf->uv[0]); j+=16; } } diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index 4113344760b..4f7fc3639f4 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -258,6 +258,8 @@ void GPU_codegen_exit(void) FUNCTION_HASH = NULL; } + GPU_shader_free_builtin_shaders(); + if (glsl_material_library) { MEM_freeN(glsl_material_library); glsl_material_library = NULL; diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index c830971dcbd..b2c2bc092b2 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -620,7 +620,7 @@ int GPU_verify_image(Image *ima, ImageUser *iuser, int tftile, int compare, int /* create image */ glGenTextures(1, (GLuint *)bind); - glBindTexture( GL_TEXTURE_2D, *bind); + glBindTexture(GL_TEXTURE_2D, *bind); if (!(gpu_get_mipmap() && mipmap)) { if (use_high_bit_depth) @@ -1087,7 +1087,7 @@ void GPU_begin_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, O GMS.gob = ob; GMS.gscene = scene; GMS.totmat= ob->totcol+1; /* materials start from 1, default material is 0 */ - GMS.glay= v3d->lay; + GMS.glay= (v3d->localvd)? v3d->localvd->lay: v3d->lay; /* keep lamps visible in local view */ GMS.gviewmat= rv3d->viewmat; GMS.gviewinv= rv3d->viewinv; @@ -1304,7 +1304,7 @@ void GPU_end_object_materials(void) GMS.gmatbuf= NULL; GMS.alphablend= NULL; - /* resetting the texture matrix after the glScale needed for tiled textures */ + /* resetting the texture matrix after the scaling needed for tiled textures */ if (GTS.tilemode) { glMatrixMode(GL_TEXTURE); glLoadIdentity(); diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 83d9619f217..32e4ff8d81c 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -67,6 +67,17 @@ * - arb draw buffers? 2.0 core */ +/* Non-generated shaders */ +extern char datatoc_gpu_shader_vsm_store_vert_glsl[]; +extern char datatoc_gpu_shader_vsm_store_frag_glsl[]; +extern char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[]; +extern char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[]; + +typedef struct GPUShaders { + GPUShader *vsm_store; + GPUShader *sep_gaussian_blur; +} GPUShaders; + static struct GPUGlobal { GLint maxtextures; GLuint currentfb; @@ -77,7 +88,8 @@ static struct GPUGlobal { GPUDeviceType device; GPUOSType os; GPUDriverType driver; -} GG = {1, 0, 0, 0, 0}; + GPUShaders shaders; +} GG = {1, 0}; /* GPU Types */ @@ -588,6 +600,25 @@ GPUTexture *GPU_texture_create_depth(int w, int h, char err_out[256]) return tex; } +/** + * A shadow map for VSM needs two components (depth and depth^2) + */ +GPUTexture *GPU_texture_create_vsm_shadow_map(int size, char err_out[256]) +{ + GPUTexture *tex = GPU_texture_create_nD(size, size, 2, NULL, 0, err_out); + + if (tex) { + /* Now we tweak some of the settings */ + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RG32F, size, size, 0, GL_RG, GL_FLOAT, 0); + + GPU_texture_unbind(tex); + } + + return tex; +} + void GPU_texture_bind(GPUTexture *tex, int number) { GLenum arbnumber; @@ -846,6 +877,67 @@ void GPU_framebuffer_restore(void) } } +void GPU_framebuffer_blur(GPUFrameBuffer *fb, GPUTexture *tex, GPUFrameBuffer *blurfb, GPUTexture *blurtex) +{ + float scaleh[2] = {1.0f/GPU_texture_opengl_width(blurtex), 0.0f}; + float scalev[2] = {0.0f, 1.0f/GPU_texture_opengl_height(tex)}; + + GPUShader *blur_shader = GPU_shader_get_builtin_shader(GPU_SHADER_SEP_GAUSSIAN_BLUR); + int scale_uniform, texture_source_uniform; + + if (!blur_shader) + return; + + scale_uniform = GPU_shader_get_uniform(blur_shader, "ScaleU"); + texture_source_uniform = GPU_shader_get_uniform(blur_shader, "textureSource"); + + /* Blurring horizontally */ + + /* We do the bind ourselves rather than using GPU_framebuffer_texture_bind() to avoid + pushing unnecessary matrices onto the OpenGL stack. */ + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, blurfb->object); + + GPU_shader_bind(blur_shader); + GPU_shader_uniform_vector(blur_shader, scale_uniform, 2, 1, (float*)scaleh); + GPU_shader_uniform_texture(blur_shader, texture_source_uniform, tex); + glViewport(0, 0, GPU_texture_opengl_width(blurtex), GPU_texture_opengl_height(blurtex)); + + /* Peparing to draw quad */ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + GPU_texture_bind(tex, 0); + + /* Drawing quad */ + glBegin(GL_QUADS); + glTexCoord2d(0, 0); glVertex2f(1, 1); + glTexCoord2d(1, 0); glVertex2f(-1, 1); + glTexCoord2d(1, 1); glVertex2f(-1, -1); + glTexCoord2d(0, 1); glVertex2f(1, -1); + glEnd(); + + /* Blurring vertically */ + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object); + glViewport(0, 0, GPU_texture_opengl_width(tex), GPU_texture_opengl_height(tex)); + GPU_shader_uniform_vector(blur_shader, scale_uniform, 2, 1, (float*)scalev); + GPU_shader_uniform_texture(blur_shader, texture_source_uniform, blurtex); + GPU_texture_bind(blurtex, 0); + + glBegin(GL_QUADS); + glTexCoord2d(0, 0); glVertex2f(1, 1); + glTexCoord2d(1, 0); glVertex2f(-1, 1); + glTexCoord2d(1, 1); glVertex2f(-1, -1); + glTexCoord2d(0, 1); glVertex2f(1, -1); + glEnd(); + + GPU_shader_unbind(blur_shader); +} + /* GPUOffScreen */ struct GPUOffScreen { @@ -1173,6 +1265,42 @@ int GPU_shader_get_attribute(GPUShader *shader, const char *name) return index; } +GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader) +{ + GPUShader *retval = NULL; + + switch (shader) { + case GPU_SHADER_VSM_STORE: + if (!GG.shaders.vsm_store) + GG.shaders.vsm_store = GPU_shader_create(datatoc_gpu_shader_vsm_store_vert_glsl, datatoc_gpu_shader_vsm_store_frag_glsl, NULL); + retval = GG.shaders.vsm_store; + break; + case GPU_SHADER_SEP_GAUSSIAN_BLUR: + if (!GG.shaders.sep_gaussian_blur) + GG.shaders.sep_gaussian_blur = GPU_shader_create(datatoc_gpu_shader_sep_gaussian_blur_vert_glsl, datatoc_gpu_shader_sep_gaussian_blur_frag_glsl, NULL); + retval = GG.shaders.sep_gaussian_blur; + break; + } + + if (retval == NULL) + printf("Unable to create a GPUShader for builtin shader: %d\n", shader); + + return retval; +} + +void GPU_shader_free_builtin_shaders() +{ + if (GG.shaders.vsm_store) { + MEM_freeN(GG.shaders.vsm_store); + GG.shaders.vsm_store = NULL; + } + + if (GG.shaders.sep_gaussian_blur) { + MEM_freeN(GG.shaders.sep_gaussian_blur); + GG.shaders.sep_gaussian_blur = NULL; + } +} + #if 0 /* GPUPixelBuffer */ diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index e14e4dce405..383dd6b8f2f 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -118,6 +118,7 @@ struct GPULamp { float spotsi, spotbl, k; float dist, att1, att2; + float shadow_color[3]; float bias, d, clipend; int size; @@ -131,11 +132,17 @@ struct GPULamp { float dynpersmat[4][4]; GPUFrameBuffer *fb; + GPUFrameBuffer *blurfb; GPUTexture *tex; + GPUTexture *depthtex; + GPUTexture *blurtex; ListBase materials; }; +/* Forward declaration so shade_light_textures() can use this, while still keeping the code somewhat organized */ +static void texture_rgb_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, GPUNodeLink **in); + /* Functions */ static GPUMaterial *GPU_material_construct_begin(Material *ma) @@ -320,10 +327,15 @@ void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float v mul_m4_v3(viewmat, lamp->dynco); } - if (material->dynproperty & DYN_LAMP_IMAT) + if (material->dynproperty & DYN_LAMP_IMAT) { mult_m4_m4m4(lamp->dynimat, lamp->imat, viewinv); - if (material->dynproperty & DYN_LAMP_PERSMAT) + } + + if (material->dynproperty & DYN_LAMP_PERSMAT) { + if (!GPU_lamp_has_shadow_buffer(lamp)) /* The lamp matrices are already updated if we're using shadow buffers */ + GPU_lamp_update_buffer_mats(lamp); mult_m4_m4m4(lamp->dynpersmat, lamp->persmat, viewinv); + } } GPU_pass_update_uniforms(material->pass); @@ -614,12 +626,35 @@ static void add_user_list(ListBase *list, void *data) BLI_addtail(list, link); } +static void shade_light_textures(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **rgb) +{ + GPUNodeLink *tex_rgb; + MTex *mtex = NULL; + int i; + float one = 1.f; + + for (i=0; i<MAX_MTEX; ++i) { + mtex = lamp->la->mtex[i]; + + if (mtex && mtex->tex->type & TEX_IMAGE && mtex->tex->ima) { + mat->dynproperty |= DYN_LAMP_PERSMAT; + + GPU_link(mat, "shade_light_texture", + GPU_builtin(GPU_VIEW_POSITION), + GPU_image(mtex->tex->ima, &mtex->tex->iuser), + GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob), + &tex_rgb); + texture_rgb_blend(mat, tex_rgb, *rgb, GPU_uniform(&one), GPU_uniform(&mtex->colfac), mtex->blendtype, rgb); + } + } +} + static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *lamp) { Material *ma= shi->mat; GPUMaterial *mat= shi->gpumat; GPUNodeLink *lv, *dist, *visifac, *is, *inp, *i, *vn, *view; - GPUNodeLink *outcol, *specfac, *t, *shadfac= NULL; + GPUNodeLink *outcol, *specfac, *t, *shadfac= NULL, *lcol; float one = 1.0f; if ((lamp->mode & LA_ONLYSHADOW) && !(ma->mode & MA_SHADOW)) @@ -670,6 +705,9 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la i = is; GPU_link(mat, "shade_visifac", i, visifac, shi->refl, &i); + + GPU_link(mat, "shade_mul_value", i, GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), &lcol); + shade_light_textures(mat, lamp, &lcol); #if 0 if (ma->mode & MA_TANGENT_VN) @@ -682,20 +720,29 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la if ((ma->mode & MA_SHADOW) && GPU_lamp_has_shadow_buffer(lamp)) { if (!(mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS)) { mat->dynproperty |= DYN_LAMP_PERSMAT; - - GPU_link(mat, "test_shadowbuf", - GPU_builtin(GPU_VIEW_POSITION), - GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob), - GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob), - GPU_uniform(&lamp->bias), inp, &shadfac); + + if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) { + GPU_link(mat, "test_shadowbuf_vsm", + GPU_builtin(GPU_VIEW_POSITION), + GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob), + GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob), + GPU_uniform(&lamp->bias), GPU_uniform(&lamp->la->bleedbias), inp, &shadfac); + } else { + GPU_link(mat, "test_shadowbuf", + GPU_builtin(GPU_VIEW_POSITION), + GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob), + GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob), + GPU_uniform(&lamp->bias), inp, &shadfac); + } if (lamp->mode & LA_ONLYSHADOW) { GPU_link(mat, "shade_only_shadow", i, shadfac, GPU_dynamic_uniform(&lamp->dynenergy, GPU_DYNAMIC_LAMP_DYNENERGY, lamp->ob), &shadfac); - if (!(lamp->mode & LA_NO_DIFF)) - GPU_link(mat, "shade_only_shadow_diffuse", shadfac, shi->rgb, - shr->diff, &shr->diff); + if (!(lamp->mode & LA_NO_DIFF)) { + GPU_link(mat, "mix_mult", shadfac, shr->diff, + GPU_uniform(lamp->shadow_color), &shr->diff); + } if (!(lamp->mode & LA_NO_SPEC)) GPU_link(mat, "shade_only_shadow_specular", shadfac, shi->specrgb, @@ -705,8 +752,6 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la add_user_list(&lamp->materials, shi->gpumat->ma); return; } - - GPU_link(mat, "math_multiply", i, shadfac, &i); } } else if ((mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS) && (lamp->mode & LA_ONLYSHADOW)) { @@ -720,8 +765,11 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la if (GPU_link_changed(shi->refl) || ma->ref != 0.0f) { if (!(lamp->mode & LA_NO_DIFF)) { GPUNodeLink *rgb; - GPU_link(mat, "shade_mul_value", i, GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), &rgb); - add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff); + GPU_link(mat, "shade_mul_value", i, lcol, &rgb); + GPU_link(mat, "mtex_value_invert", shadfac, &shadfac); + GPU_link(mat, "mix_mult", shadfac, rgb, GPU_uniform(lamp->shadow_color), &rgb); + GPU_link(mat, "mtex_value_invert", shadfac, &shadfac); + add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff); } } @@ -730,7 +778,7 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la (GPU_link_changed(shi->spec) || ma->spec != 0.0f)) { if (lamp->type == LA_HEMI) { GPU_link(mat, "shade_hemi_spec", vn, lv, view, GPU_uniform(&ma->spec), shi->har, visifac, &t); - GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), shi->specrgb, &outcol); + GPU_link(mat, "shade_add_spec", t, lcol, shi->specrgb, &outcol); GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec); } else { @@ -748,16 +796,16 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la if (lamp->type==LA_AREA) GPU_link(mat, "shade_spec_area_inp", specfac, inp, &specfac); - GPU_link(mat, "shade_spec_t", shadfac, shi->spec, visifac, specfac, &t); + GPU_link(mat, "shade_spec_t", shadfac, shi->spec, visifac, specfac, &t); if (ma->mode & MA_RAMP_SPEC) { GPUNodeLink *spec; do_specular_ramp(shi, specfac, t, &spec); - GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), spec, &outcol); + GPU_link(mat, "shade_add_spec", t, lcol, spec, &outcol); GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec); } else { - GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), shi->specrgb, &outcol); + GPU_link(mat, "shade_add_spec", t, lcol, shi->specrgb, &outcol); GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec); } } @@ -1048,7 +1096,7 @@ static void do_material_tex(GPUShadeInput *shi) if (tex->imaflag & TEX_NORMALMAP) { /* normalmap image */ - GPU_link(mat, "mtex_normal", texco, GPU_image(tex->ima, &tex->iuser), &tnor ); + GPU_link(mat, "mtex_normal", texco, GPU_image(tex->ima, &tex->iuser), &tnor); if (mtex->norfac < 0.0f) GPU_link(mat, "mtex_negate_texnormal", tnor, &tnor); @@ -1151,70 +1199,70 @@ static void do_material_tex(GPUShadeInput *shi) if ( iBumpSpacePrev != iBumpSpace ) { if ( mtex->texflag & MTEX_BUMP_OBJECTSPACE ) - GPU_link( mat, "mtex_bump_init_objspace", - surf_pos, vNorg, - GPU_builtin(GPU_VIEW_MATRIX), GPU_builtin(GPU_INVERSE_VIEW_MATRIX), GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_INVERSE_OBJECT_MATRIX), - fPrevMagnitude, vNacc, - &fPrevMagnitude, &vNacc, - &vR1, &vR2, &fDet ); + GPU_link(mat, "mtex_bump_init_objspace", + surf_pos, vNorg, + GPU_builtin(GPU_VIEW_MATRIX), GPU_builtin(GPU_INVERSE_VIEW_MATRIX), GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_INVERSE_OBJECT_MATRIX), + fPrevMagnitude, vNacc, + &fPrevMagnitude, &vNacc, + &vR1, &vR2, &fDet); else if ( mtex->texflag & MTEX_BUMP_TEXTURESPACE ) - GPU_link( mat, "mtex_bump_init_texturespace", - surf_pos, vNorg, - fPrevMagnitude, vNacc, - &fPrevMagnitude, &vNacc, - &vR1, &vR2, &fDet ); + GPU_link(mat, "mtex_bump_init_texturespace", + surf_pos, vNorg, + fPrevMagnitude, vNacc, + &fPrevMagnitude, &vNacc, + &vR1, &vR2, &fDet); else - GPU_link( mat, "mtex_bump_init_viewspace", - surf_pos, vNorg, - fPrevMagnitude, vNacc, - &fPrevMagnitude, &vNacc, - &vR1, &vR2, &fDet ); + GPU_link(mat, "mtex_bump_init_viewspace", + surf_pos, vNorg, + fPrevMagnitude, vNacc, + &fPrevMagnitude, &vNacc, + &vR1, &vR2, &fDet); iBumpSpacePrev = iBumpSpace; } if (found_deriv_map) { - GPU_link( mat, "mtex_bump_deriv", - texco, GPU_image(tex->ima, &tex->iuser), GPU_uniform(&ima_x), GPU_uniform(&ima_y), tnorfac, - &dBs, &dBt ); + GPU_link(mat, "mtex_bump_deriv", + texco, GPU_image(tex->ima, &tex->iuser), GPU_uniform(&ima_x), GPU_uniform(&ima_y), tnorfac, + &dBs, &dBt ); } - else if ( mtex->texflag & MTEX_3TAP_BUMP ) - GPU_link( mat, "mtex_bump_tap3", - texco, GPU_image(tex->ima, &tex->iuser), tnorfac, - &dBs, &dBt ); - else if ( mtex->texflag & MTEX_5TAP_BUMP ) - GPU_link( mat, "mtex_bump_tap5", - texco, GPU_image(tex->ima, &tex->iuser), tnorfac, - &dBs, &dBt ); + else if ( mtex->texflag & MTEX_3TAP_BUMP) + GPU_link(mat, "mtex_bump_tap3", + texco, GPU_image(tex->ima, &tex->iuser), tnorfac, + &dBs, &dBt ); + else if ( mtex->texflag & MTEX_5TAP_BUMP) + GPU_link(mat, "mtex_bump_tap5", + texco, GPU_image(tex->ima, &tex->iuser), tnorfac, + &dBs, &dBt ); else if ( mtex->texflag & MTEX_BICUBIC_BUMP ) { if (GPU_bicubic_bump_support()) { - GPU_link( mat, "mtex_bump_bicubic", - texco, GPU_image(tex->ima, &tex->iuser), tnorfac, - &dBs, &dBt ); + GPU_link(mat, "mtex_bump_bicubic", + texco, GPU_image(tex->ima, &tex->iuser), tnorfac, + &dBs, &dBt); } else { - GPU_link( mat, "mtex_bump_tap5", - texco, GPU_image(tex->ima, &tex->iuser), tnorfac, - &dBs, &dBt ); + GPU_link(mat, "mtex_bump_tap5", + texco, GPU_image(tex->ima, &tex->iuser), tnorfac, + &dBs, &dBt); } } if ( mtex->texflag & MTEX_BUMP_TEXTURESPACE ) { float imag_tspace_dimension_y = aspect*imag_tspace_dimension_x; - GPU_link( mat, "mtex_bump_apply_texspace", - fDet, dBs, dBt, vR1, vR2, - GPU_image(tex->ima, &tex->iuser), texco, - GPU_uniform(&imag_tspace_dimension_x), GPU_uniform(&imag_tspace_dimension_y), vNacc, - &vNacc, &shi->vn ); + GPU_link(mat, "mtex_bump_apply_texspace", + fDet, dBs, dBt, vR1, vR2, + GPU_image(tex->ima, &tex->iuser), texco, + GPU_uniform(&imag_tspace_dimension_x), GPU_uniform(&imag_tspace_dimension_y), vNacc, + &vNacc, &shi->vn ); } else - GPU_link( mat, "mtex_bump_apply", - fDet, dBs, dBt, vR1, vR2, vNacc, - &vNacc, &shi->vn ); + GPU_link(mat, "mtex_bump_apply", + fDet, dBs, dBt, vR1, vR2, vNacc, + &vNacc, &shi->vn ); } } @@ -1562,12 +1610,17 @@ static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *l lamp->bias *= 0.25f; /* makeshadowbuf */ - angle= saacos(lamp->spotsi); - temp= 0.5f*lamp->size*cosf(angle)/sinf(angle); - pixsize= (lamp->d)/temp; - wsize= pixsize*0.5f*lamp->size; - - perspective_m4( lamp->winmat,-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend); + if (lamp->type == LA_SUN) { + wsize = la->shadow_frustum_size; + orthographic_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend); + } + else { + angle= saacos(lamp->spotsi); + temp= 0.5f*lamp->size*cosf(angle)/sinf(angle); + pixsize= (lamp->d)/temp; + wsize= pixsize*0.5f*lamp->size; + perspective_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend); + } } static void gpu_lamp_shadow_free(GPULamp *lamp) @@ -1576,10 +1629,22 @@ static void gpu_lamp_shadow_free(GPULamp *lamp) GPU_texture_free(lamp->tex); lamp->tex= NULL; } + if (lamp->depthtex) { + GPU_texture_free(lamp->depthtex); + lamp->depthtex= NULL; + } if (lamp->fb) { GPU_framebuffer_free(lamp->fb); lamp->fb= NULL; } + if (lamp->blurtex) { + GPU_texture_free(lamp->blurtex); + lamp->blurtex= NULL; + } + if (lamp->blurfb) { + GPU_framebuffer_free(lamp->blurfb); + lamp->blurfb= NULL; + } } GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par) @@ -1604,7 +1669,7 @@ GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par) la = ob->data; gpu_lamp_from_blender(scene, ob, par, la, lamp); - if (la->type==LA_SPOT && (la->mode & LA_SHAD_BUF)) { + if ((la->type==LA_SPOT && (la->mode & LA_SHAD_BUF)) || (la->type==LA_SUN && (la->mode & LA_SHAD_RAY))) { /* opengl */ lamp->fb = GPU_framebuffer_create(); if (!lamp->fb) { @@ -1612,18 +1677,72 @@ GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par) return lamp; } - lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size, NULL); - if (!lamp->tex) { - gpu_lamp_shadow_free(lamp); - return lamp; + if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) { + /* Shadow depth map */ + lamp->depthtex = GPU_texture_create_depth(lamp->size, lamp->size, NULL); + if (!lamp->depthtex) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, NULL)) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + /* Shadow color map */ + lamp->tex = GPU_texture_create_vsm_shadow_map(lamp->size, NULL); + if (!lamp->tex) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, NULL)) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + /* FBO and texture for blurring */ + lamp->blurfb = GPU_framebuffer_create(); + if (!lamp->blurfb) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + lamp->blurtex = GPU_texture_create_vsm_shadow_map(lamp->size*0.5, NULL); + if (!lamp->blurtex) { + gpu_lamp_shadow_free(lamp); + return lamp; + } + + if (!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, NULL)) { + gpu_lamp_shadow_free(lamp); + return lamp; + } } + else { + lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size, NULL); + if (!lamp->tex) { + gpu_lamp_shadow_free(lamp); + return lamp; + } - if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, NULL)) { - gpu_lamp_shadow_free(lamp); - return lamp; + if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, NULL)) { + gpu_lamp_shadow_free(lamp); + return lamp; + } } GPU_framebuffer_restore(); + + lamp->shadow_color[0] = la->shdwr; + lamp->shadow_color[1] = la->shdwg; + lamp->shadow_color[2] = la->shdwb; + } + else { + lamp->shadow_color[0] = 1.0; + lamp->shadow_color[1] = 1.0; + lamp->shadow_color[2] = 1.0; } return lamp; @@ -1663,7 +1782,7 @@ int GPU_lamp_has_shadow_buffer(GPULamp *lamp) lamp->tex && lamp->fb); } -void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]) +void GPU_lamp_update_buffer_mats(GPULamp *lamp) { float rangemat[4][4], persmat[4][4]; @@ -1686,11 +1805,18 @@ void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize rangemat[3][2] = 0.5f; mult_m4_m4m4(lamp->persmat, rangemat, persmat); +} + +void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]) +{ + GPU_lamp_update_buffer_mats(lamp); /* opengl */ glDisable(GL_SCISSOR_TEST); GPU_framebuffer_texture_bind(lamp->fb, lamp->tex, GPU_texture_opengl_width(lamp->tex), GPU_texture_opengl_height(lamp->tex)); + if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) + GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE)); /* set matrices */ copy_m4_m4(viewmat, lamp->viewmat); @@ -1700,6 +1826,11 @@ void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp) { + if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) { + GPU_shader_unbind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE)); + GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex); + } + GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex); GPU_framebuffer_restore(); glEnable(GL_SCISSOR_TEST); diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c deleted file mode 100644 index 6a6db7eadbb..00000000000 --- a/source/blender/gpu/intern/gpu_shader_material.glsl.c +++ /dev/null @@ -1,1553 +0,0 @@ -/* DataToC output of file <gpu_shader_material_glsl> */ - -int datatoc_gpu_shader_material_glsl_size = 49493; -char datatoc_gpu_shader_material_glsl[] = { - 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108, -111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, - 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32, -114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99, -109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, - 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, - 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, - 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, - 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, - 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101, -108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, - 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9, -101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99, -109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114, -103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101, -108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, - 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, - 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, - 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, - 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104, -115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, - 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32, -115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9, -115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, - 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9, -125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, - 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, - 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, - 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, - 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, - 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32, -118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, - 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32, -105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, - 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, - 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, - 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, - 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, - 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114,103, 98, - 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, - 32, 48, 46, 48, 52, 48, 52, 53, 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, - 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117, -114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, - 50, 46, 52, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, - 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, 10, 9, - 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, 46, 57, - 50, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, - 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, 98, 95, -116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32, -118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95, -116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116, -111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, - 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114, -103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95, -102,114,111,109, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, - 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, - 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, - 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97, -114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116, -111, 46, 98, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, - 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10, - 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, - 56, 52, 54, 10, 35,100,101,102,105,110,101, 32, 77, 95, 49, 95, 80, 73, 32, 48, 46, 51, 49, 56, 51, 48, 57, 56, 56, 54, 49, 56, - 51, 55, 57, 48, 54, 57, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, - 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116, -116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, - 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, - 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, - 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116, -101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, - 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, - 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32, -118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, - 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111, -108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, - 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 99,111,108, 95, 97,108, -112,104, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, - 97,108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, - 41, 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, - 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, - 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, - 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, - 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99, -111,108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,118, 99, -111,108, 95, 97,108,112,104, 97, 32, 61, 32, 97,116,116,118, 99,111,108, 46, 97, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, - 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, - 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97, -120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97, -116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109, -105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, - 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111, -117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10, -118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117, -116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, - 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111, -117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, - 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99, -116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108, -111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, - 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, - 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, -118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, - 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108, -111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105, -102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, - 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, - 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, - 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102, -108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111, -117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, -115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, - 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, - 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, - 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, - 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, - 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, - 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117, -116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108, -111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117, -116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112, -111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, - 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108, -115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, -108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32, -102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, - 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97, -108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, - 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97, -108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, - 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97, -116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116, -118, 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, - 97,116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, -117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, - 53, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, - 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, -118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, - 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, - 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97, -108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, - 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, - 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111, -105,100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116, -104, 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, -108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, - 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, - 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, - 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98, -115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, - 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, - 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32, -102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, - 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, - 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, - 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, - 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, - 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, - 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, - 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, - 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32, -118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, -117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, - 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118, -111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, - 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, - 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116, -104, 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10, -123, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, - 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32, -110,111,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, - 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, - 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114, -101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, - 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117, -114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, - 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116, -117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, - 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, - 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, - 99, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, - 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 50, 68, - 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, -117,116, 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, - 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46, -114, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46,114, 59, 10, 9,111,117,116, 99,111,108, 46,103, 32, 61, - 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114, -101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46,103, 44, 32, 48, 46, 48, 41, 41, 46, - 97, 44, 32, 48, 46, 48, 41, 41, 46,103, 59, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 50, - 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101, -109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46, 98, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46, - 98, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, - 40,111,117,116, 99,111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, - 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95, -118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, -108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95, -114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, - 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, - 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, -117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,122, -101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, - 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, -125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51, 32,111,117, -116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,117,116,118, - 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, - 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, - 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111, -117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111, -117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 97,100, -100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, - 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97, -109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, - 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111, -108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,116, 40,102, -108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, -102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111, -108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, - 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110, 40,102,108, -111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111, -117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, - 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, - 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 40, -118,101, 99, 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111, -108, 50, 41, 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, - 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,108, 97,121, - 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109, -112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, - 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, - 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 42, 61, 32,102, - 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117, -116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, - 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, - 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, - 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,101,108,115,101, - 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42, -102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111, -108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, - 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, - 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, - 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32, -111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,111, 97,116, - 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32, -118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, - 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, - 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99, -111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,102, 97, 99, - 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, - 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, - 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, - 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 33, 61, - 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, - 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 50, 46,103, - 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, -103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40, 99,111,108, - 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99, -111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, 46, 98, 59, 10,125, 10, 10,118, -111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, - 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, - 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111, -117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,108, 49, 32, 45, 32, 99,111,108, - 50, 41, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, - 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, -111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, - 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, - 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, - 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, - 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, - 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111, -108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, - 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111, -108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, - 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, - 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, - 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, - 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, -114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32, -102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9, -111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, - 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46, -114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109, -112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102, -108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9, 9,105, -102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, - 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,112, 41, 32, - 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, - 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111, -108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, - 45, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, - 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, - 32, 61, 32,111,117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111, -108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, -116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,116, 32,102, - 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, - 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, - 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, - 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,116,109,112, 32, 61, - 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, - 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 40, -116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 47,116,109, -112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108, -115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, - 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 10, 9,116,109,112, - 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, - 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, - 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 47, -116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9, -101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, - 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 10, 9,116, -109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,105,102, 40,116,109,112, 32, - 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32, -105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, - 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, - 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, - 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59, 10,125, - 10, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, -111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, - 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, - 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111, -108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, - 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104, -115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, - 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104, -115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,111,108, 32, - 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,116, 99,111, -108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 97,116, - 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109, -112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, - 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, - 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, - 44, 32,104,115,118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114, -103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9, 9,104,115,118, 46,121, 32, - 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, - 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, - 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118, -101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, - 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, - 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104, -115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 10, 9,114,103, - 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,104,115,118, 46,122, 32, 61, 32, -102, 97, 99,109, 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 10, 9,104,115,118, 95,116,111, - 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 99, -111,108,111,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, - 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, - 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99, -109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, - 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,111, 95,104, -115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, - 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, - 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,104,115,118, - 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, - 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, - 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, - 32,109,105,120, 95,115,111,102,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32, -118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, - 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97, -116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,111,110,101, 61, 32, -118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,111,110,101, - 32, 45, 32, 99,111,108, 50, 41, 42, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, - 32,102, 97, 99,109, 42, 99,111,108, 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 42, 99, -111,108, 50, 42, 99,111,108, 49, 32, 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105, -120, 95,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118, -101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, - 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9,111,117,116, 99, -111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9, -111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, - 50, 46,114, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 61, 32, 99, -111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49, 46, 48, 41, - 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, - 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 32, 45, 32, 48, 46, 53, - 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, - 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,105,102, 40, 99,111, -108, 50, 46, 98, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, - 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, - 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, - 99,111,108, 50, 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,114,103, 98, - 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,111,108,111,114,109, 97,112, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, 97,108, -112,104, 97, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,111,108,111,114, -109, 97,112, 44, 32,118,101, 99, 50, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 41, 59, 10, 9,111,117,116, 97,108,112,104, 97, 32, - 61, 32,111,117,116, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, 99, 52, - 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 10,123, 10, 9,111, -117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, - 46, 52, 53, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101,115,101, - 32,102, 97, 99,116,111,114,115, 32,105,110, 32,115,121,110, 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46,104, 58, - 82, 71, 66, 84, 79, 66, 87, 32, 42, 47, 10,125, 10, 10,118,111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97,116, 32, -102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10, -123, 10, 9,111,117,116, 99,111,108, 46,120,121,122, 32, 61, 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118,101, 99, - 51, 40, 49, 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, - 59, 10, 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59, 10,125, 10, 10,118,111,105,100, 32,104,117,101, - 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44, 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, 97,116, - 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, - 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,104,115,118, 59, 10, 10, 9,114,103, 98, - 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,104,115,118, 91, 48, 93, 32, 43, 61, 32, 40, -104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,105,102, 40,104,115,118, 91, 48, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, - 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 48, 93, 60, 48, 46, 48, 41, 32,104,115,118, - 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 10, 9,104,115,118, 91, 49, 93, 32, 42, 61, 32,115, 97,116, 59, 10, 9,105,102, 40,104, -115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40, -104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 48, 46, 48, 59, 10, 9,104,115,118, 91, 50, 93, - 32, 42, 61, 32,118, 97,108,117,101, 59, 10, 9,105,102, 40,104,115,118, 91, 50, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, - 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, - 50, 93, 61, 32, 48, 46, 48, 59, 10, 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111, -108, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, 44, 32, -102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, - 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32, 98, 41, 10,123, 10, 9,114, 32, 61, 32, 99,111,108, 46,114, 59, 10, 9,103, 32, 61, 32, 99, -111,108, 46,103, 59, 10, 9, 98, 32, 61, 32, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32, 99,111,109, 98,105,110, -101, 95,114,103, 98, 40,102,108,111, 97,116, 32,114, 44, 32,102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, - 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 41, 10,123, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32, -103, 44, 32, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100,101, 40, -118,101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, -111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, - 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, 85, 82, - 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120,116,117,114, -101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 46,121,120,122, 59, 10,125, 10, 10, -118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,108,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, - 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, - 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, -117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46, -120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, - 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, 32,118, -101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111, -108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 97, - 32, 61, 32,115,113,114,116, 40,118,101, 99, 46,120, 42,118,101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46, -121, 32, 43, 32,118,101, 99, 46,122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46, 48, 59, 10, 9,102,108,111, 97,116, 32,119,105, - 32, 61, 32, 48, 46, 53, 32, 43, 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59, 10, 10, 9,118, 97,108,117,101, 32, 61, 32,119, -105, 59, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, - 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, - 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, - 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, - 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97, -108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40,118,101, - 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 10, 9,118, 97, -108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 10, 9,110,111,114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108, -111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,110,111,114,109, 97,108, 46,121, 32, 61, 32, 50, 46, 48, 42, 40, 48, 46, - 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 10, 9,110,111,114,109, 97,108, 46,122, 32, 61, 32, 50, 46, 48, 42, 40, 99, -111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116, -101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, - 32,111,114, 99,111, 41, 10,123, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10,125, 10, 10,118,111,105, -100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -117,118, 41, 10,123, 10, 9, 47, 42, 32,100,105,115, 97, 98,108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111,114,107, -115, 32,116,111,103,101,116,104,101,114, 32,119,105,116,104, 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116,101,120, - 95, 50,100, 95,109, 97,112,112,105,110,103, 10, 9, 32, 32, 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, - 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 10, 9, -117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116, -101,120, 99,111, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116,111, 32, -115,104,105, 45, 62,111,114,110, 44, 32,119,104,105, 99,104, 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, 99, 97, -110, 99,101,108,115, 10, 9, 32, 32, 32,111,117,116, 32, 98,108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110,101,103, - 97,116,105,111,110, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, -110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, 40,118, -101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101,110,116, - 41, 10,123, 10, 9,111,117,116,116, 97,110,103,101,110,116, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103, -101,110,116, 46,120,121,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,103,108,111, 98, 97,108, 40,109, - 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, - 51, 32,103,108,111, 98, 97,108, 41, 10,123, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97, -116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101, -120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, 97,116, 52, - 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, 98,106, -101, 99,116, 41, 10,123, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105,110,118,109, 97,116, 42, 40,118,105,101,119, -105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118, -111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,118,105,101, -119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 10,123, 10, 9,114,101,102, 32, 61, 32,118,105,101,119, 32, 45, - 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101,119, 41, 42,118,110, 59, 10,125, 10, 10,118,111,105,100, 32,115, -104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32, -110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, - 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116, -101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9, -102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, - 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, - 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,108, 40,118,101, 99, 51, 32,111, -117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102, -108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, - 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, - 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, -120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, -116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, - 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, - 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 51, 40,102, 97, 99,109, 41, - 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40,118, -101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,114,103, 98, 95,111,118,101,114,108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116, -101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9, -102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, - 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, - 32,111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111, -108, 46,114, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, - 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,114, 41, 41, - 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, - 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 42, 40,102, 97, - 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59, 10, 9,101,108,115,101, 10, 9, - 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, -116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111, -108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99, -111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, - 42,116,101,120, 99,111,108, 46, 98, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32, 49, 46, - 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99, -111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, -116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32, 45,102, 97, 99,116, - 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109, -116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, -120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, -116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,102, 97, - 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,114,103, 98, 95,100,105,118, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, -108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, - 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, - 40,116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, - 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,114, 47,116,101,120, 99,111,108, - 46,114, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,103, - 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,103, - 47,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32, -105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99,116, 42,111, -117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114, -103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, - 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, - 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, - 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99, -111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99, -111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100, - 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108, -111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105, -110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, - 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111, -108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, - 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, - 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111, -108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, - 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, - 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, - 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105, -110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, -114,103, 98, 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99, -111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32, -118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, - 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, - 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, - 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, - 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, - 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,103, 41, 32,105, -110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, - 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, - 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32, -101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, -116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109, -105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, - 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105, -110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, -108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,115, 97, -116, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, -118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46, -114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, -118, 97,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108, -111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105, -110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,118, 97,108, 40,102, 97, 99, -116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40, -116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, - 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 99,111,108,111,114, - 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, - 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111, -108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, 99,111,108,111,114, 40,102, 97, 99,116, - 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116, -101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, - 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, - 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 41, 10,123, 10, 9,102, 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40,102, 97, - 99,103, 41, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,102, 97, 99,103, - 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 10, 9, 9, -102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 10, 9, 9,102, 97, 99,109, 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, - 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111,117,116, - 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102, -108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102, -108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, - 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101, -120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116, -101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9, -109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, - 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, - 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, - 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,111,117, -116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, -102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, -116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, - 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, - 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,117, 98, 40,102,108,111, 97,116, 32,111,117, -116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, -102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, -116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 10, - 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, - 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117,116, 99, -111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108, -111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108, -111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, - 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,116, 59, 10, 9,105,110, - 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118, -111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, - 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, - 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, - 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, - 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, - 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99, -111,108, 47,116,101,120, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 10, -125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,102,102, 40,102,108,111, 97,116, 32,111,117, -116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, -102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, -116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111, -117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, - 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, -116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10, -123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40, -102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, - 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32, -105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, 97,116, - 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, -116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10, -123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40, -102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, - 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 41, 32, -105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 95,112,111,115,105,116, -105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, - 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118, -111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, - 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,104, 97,114, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 10, -125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109,112, 40, -102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9, -104, 97,114, 32, 42, 61, 32, 49, 50, 56, 46, 48, 59, 10, 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117, -116,104, 97,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, - 41, 32,111,117,116,104, 97,114, 32, 61, 32, 53, 49, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, - 32,104, 97,114, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, 99,111, -108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, - 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, - 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, - 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, -114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,116, -101,110,115,105,116,121, 41, 10,123, 10, 9,105,110,116,101,110,115,105,116,121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, - 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114,103, 98, 46,114,103, 98, 41, 59, 10,125, 10, 10,118, -111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110,118, 97, -108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,117,101, 41, 10,123, 10, 9,111,117,116,118, - 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105,110,118, 97,108,117,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95,105,110,118,101,114,116, 40,118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, - 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, - 40, 49, 46, 48, 41, 32, 45, 32,105,110,114,103, 98, 46,114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116, -101,110, 99,105,108, 44, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108,111, 97, -116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116,101,110, -115,105,116,121, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, - 10, 9,111,117,116,105,110,116,101,110,115,105,116,121, 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101,110, 99, -105,108, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10, -125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115, -116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115, -116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,102,108,111, 97, -116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97, 59, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114, -103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,115,116,101,110, 99,105,108, 41, 59, 10, 9,111,117,116,115,116,101,110, - 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,111,102, -115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99, -111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,115, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97, -112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, - 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, - 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, - 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32, -118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 44, 32,118,101, 99, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -109,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, - 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, - 99,111,108,111,114, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, - 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105, -100, 32,109,116,101,120, 95,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101, -114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 47, 32, - 84,104,101, 32,105,110,118,101,114,116, 32,111,102, 32,116,104,101, 32,114,101,100, 32, 99,104, 97,110,110,101,108, 32,105,115, - 32,116,111, 32,109, 97,107,101, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,109, 97,112, 32, 99,111,109,112, -108,105, 97,110,116, 32,119,105,116,104, 32,116,104,101, 32,111,117,116,115,105,100,101, 32,119,111,114,108,100, 46, 10, 9, 47, - 47, 32, 73,116, 32,110,101,101,100,115, 32,116,111, 32, 98,101, 32,100,111,110,101, 32, 98,101, 99, 97,117,115,101, 32,105,110, - 32, 66,108,101,110,100,101,114, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,117,115,101,100, 32,112,111,105, -110,116,115, 32,105,110,119, 97,114,100, 46, 10, 9, 47, 47, 32, 83,104,111,117,108,100, 32,116,104,105,115, 32,101,118,101,114, - 32, 99,104, 97,110,103,101, 32,116,104,105,115, 32,110,101,103, 97,116,101, 32,109,117,115,116, 32, 98,101, 32,114,101,109,111, -118,101,100, 46, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, -105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 50, 46, 48, 42, 40,118, -101, 99, 51, 40, 45, 99,111,108,111,114, 46,114, 44, 32, 99,111,108,111,114, 46,103, 44, 32, 99,111,108,111,114, 46, 98, 41, 32, - 45, 32,118,101, 99, 51, 40, 45, 48, 46, 53, 44, 32, 48, 46, 53, 44, 32, 48, 46, 53, 41, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,115, 95,105,110,105,116, 40, 32,118,101, 99, 51, 32,118, 78, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 41, 10,123, 10, 9, -118, 78,111,114,103, 32, 61, 32,118, 78, 59, 10, 9,118, 78, 97, 99, 99, 32, 61, 32,118, 78, 59, 10, 9,102, 80,114,101,118, 77, - 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10, 47, 42, 42, 32,104,101,108,112,101,114, 32,109,101, -116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116,104,101, 32,117,112,112,101,114, 32,108,101,102,116, 32, 51, -120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32, 52,120, 52, 32,109, 97,116,114,105,120, 32, 42, 47, 10,109, - 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, 32,109, 52, 41, 10,123, 10, 9,109, 97,116, 51, 32,109, 51, 59, - 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, 48, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 49, 93, 32, 61, 32,109, 52, - 91, 49, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 50, 93, 32, 61, 32,109, 52, 91, 50, 93, 46,120,121,122, 59, 10, 9,114,101, -116,117,114,110, 32,109, 51, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95, -111, 98,106,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117, -114,102, 95,110,111,114,109, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,109, 97,116, 52, 32,109, 86,105,101,119, 44, 32,109, 97, -116, 52, 32,109, 86,105,101,119, 73,110,118, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 44, 32,109, 97,116, 52, 32,109, 79, 98, -106, 73,110,118, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105, -116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, - 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, - 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,109, 97,116, 51, 32,111, 98,106, 50,118,105,101,119, 32, 61, 32,116,111, - 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 41, 59, 10, 9,109, 97,116, 51, - 32,118,105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, - 77, 97,116,114,105,120, 73,110,118,101,114,115,101, 41, 59, 10, 9, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, - 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9, -118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,121, 40, 32, -115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97,108,105,122,101, - 40, 32,115,117,114,102, 95,110,111,114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 10, 10, 9,118, 82, 49, 32, - 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99, -114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111, -116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9, 47, 42, 32,112,114,101,116,114, 97, -110,115,102,111,114,109, 32,118, 78, 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, - 41, 32,117,115,105,110,103, 32,116,104,101, 32,105,110,118,101,114,115,101, 32,116,114, 97,110,115,112,111,115,101,100, 32, 42, - 47, 10, 9,118, 82, 49, 32, 61, 32,118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 82, 50, 32, 61, 32, -118, 82, 50, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 78, 32, 61, 32,118, 78, 32, 42, 32,118,105,101,119, 50, -111, 98,106, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, - 68,101,116, 41, 32, 42, 32,108,101,110,103,116,104, 40,118, 78, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32, -118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97, -103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, - 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, - 95,105,110,105,116, 95,116,101,120,116,117,114,101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111, -115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108, -111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, - 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, - 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, - 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,118,101, - 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9, -118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, - 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108, -105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, - 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,118, 83, -105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, - 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 10, 9,102, 68,101,116, 32, 61, - 32,115,105,103,110, 40, 32,100,111,116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 10, 9, 10, 9,102, -108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9,118, 78, - 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, - 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103, -110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32, -115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, - 9, 9, 32, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, - 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, - 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, - 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, - 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112, -111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, - 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, - 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32, -110,111,114,109, 97,108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, - 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, - 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, - 49, 32, 41, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, - 68,101,116, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, - 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, - 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51, 32,116, -101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108, -101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, - 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, - 32, 83, 84,108,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61, 32,116, -101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9,118,101, 99, 50, - 32, 83, 84,117,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, - 41, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 10, 9,114,103, 98,116,111, - 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32, 41, 59, - 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114, 41, 44, - 32, 72,108,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, - 32, 83, 84,117,108, 41, 44, 32, 72,117,108, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, - 32, 40, 72,108,114, 32, 45, 32, 72,108,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72, -117,108, 32, 45, 32, 72,108,108, 41, 59, 10,125, 10, 10, 35,105,102,100,101,102, 32, 66, 85, 77, 80, 95, 66, 73, 67, 85, 66, 73, - 67, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 98,105, 99,117, 98,105, 99, 40, 32,118,101, 99, 51, 32, -116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97, -108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108, -111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,102,108,111, - 97,116, 32, 72,108, 59, 10, 9,102,108,111, 97,116, 32, 72,114, 59, 10, 9,102,108,111, 97,116, 32, 72,100, 59, 10, 9,102,108, -111, 97,116, 32, 72,117, 59, 10, 9, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, - 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, - 46,120,121, 41, 59, 10, 32, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, - 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120, -121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101, -120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, - 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,114, -103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 41, 59, - 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72, -114, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, - 44, 32, 72,100, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, - 84,117, 41, 44, 32, 72,117, 41, 59, 10, 9, 10, 9,118,101, 99, 50, 32,100, 72,100,120,121, 32, 61, 32,118,101, 99, 50, 40, 72, -114, 32, 45, 32, 72,108, 44, 32, 72,117, 32, 45, 32, 72,100, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 66,108,101,110,100, 32, - 61, 32, 99,108, 97,109,112, 40, 49, 46, 48, 45,116,101,120,116,117,114,101, 81,117,101,114,121, 76, 79, 68, 40,105,109, 97, 44, - 32,116,101,120, 99,111, 46,120,121, 41, 46,120, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40,102, 66,108, -101,110,100, 33, 61, 48, 46, 48, 41, 10, 9,123, 10, 9, 9, 47, 47, 32,116,104,101, 32,100,101,114,105,118, 97,116,105,118,101, - 32,111,102, 32,116,104,101, 32, 98,105, 99,117, 98,105, 99, 32,115, 97,109,112,108,105,110,103, 32,111,102, 32,108,101,118,101, -108, 32, 48, 10, 9, 9,105,118,101, 99, 50, 32,118, 68,105,109, 59, 10, 9, 9,118, 68,105,109, 32, 61, 32,116,101,120,116,117, -114,101, 83,105,122,101, 40,105,109, 97, 44, 32, 48, 41, 59, 10, 10, 9, 9, 47, 47, 32,116, 97,107,105,110,103, 32,116,104,101, - 32,102,114, 97, 99,116, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,116,101,120,116,117,114,101, 32, 99,111,111,114,100, -105,110, 97,116,101, 32,105,115, 32, 97, 32,104, 97,114,100, 99,111,100,101,100, 32,119,114, 97,112, 32,109,111,100,101, 46, 10, - 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32, 97, 99, 99,101,112,116, 97, 98,108,101, 32, 97,115, 32,116,101,120,116,117, -114,101,115, 32,117,115,101, 32,119,114, 97,112, 32,109,111,100,101, 32,101,120, 99,108,117,115,105,118,101,108,121, 32,105,110, - 32, 51, 68, 32,118,105,101,119, 32,101,108,115,101,119,104,101,114,101, 32,105,110, 32, 98,108,101,110,100,101,114, 46, 32, 10, - 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,100,111,110,101, 32,115,111, 32,116,104, 97,116, 32,119,101, 32, 99, 97,110, - 32,115,116,105,108,108, 32,103,101,116, 32, 97, 32,118, 97,108,105,100, 32,116,101,120,101,108, 32,119,105,116,104, 32,117,118, -115, 32,111,117,116,115,105,100,101, 32,116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, 10, 9, 9, 47, 47, 32, 98,121, 32, -116,101,120,101,108, 70,101,116, 99,104, 32, 98,101,108,111,119, 44, 32, 97,115, 32, 99,111,111,114,100,105,110, 97,116,101,115, - 32, 97,114,101, 32, 99,108, 97,109,112,101,100, 32,119,104,101,110, 32,117,115,105,110,103, 32,116,104,105,115, 32,102,117,110, - 99,116,105,111,110, 46, 10, 9, 9,118,101, 99, 50, 32,102, 84,101,120, 76,111, 99, 32, 61, 32,118, 68,105,109, 42,102,114, 97, - 99,116, 40,116,101,120, 99,111, 46,120,121, 41, 32, 45, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 59, 10, 9, - 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 32, 61, 32,105,118,101, 99, 50, 40,102,108,111,111,114, 40,102, 84,101, -120, 76,111, 99, 41, 41, 59, 10, 9, 9,118,101, 99, 50, 32,116, 32, 61, 32, 99,108, 97,109,112, 40,102, 84,101,120, 76,111, 99, - 32, 45, 32,105, 84,101,120, 76,111, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 9, 9, 47, 47, 32,115, 97,116, 32,106, -117,115,116, 32,116,111, 32, 98,101, 32,112,101,100, 97,110,116,105, 99, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 32, 42, 32, 84,104,105,115, 32, 98,108,111, 99,107, 32,119, -105,108,108, 32,114,101,112,108, 97, 99,101, 32,116,104,101, 32,111,110,101, 32, 98,101,108,111,119, 32,119,104,101,110, 32,111, -110,101, 32, 99,104, 97,110,110,101,108, 32,116,101,120,116,117,114,101,115, 32, 97,114,101, 32,112,114,111,112,101,114,108,121, - 32,115,117,112,112,111,114,116,101,100, 46, 32, 42, 10, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 76, 32, 61, 32,116, -101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, - 40, 45, 49, 44, 45, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, - 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 82, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104, -101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 49, 44, 45, 49, 41, 32, 43, 32,118, -101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97, -109,112,108,101,115, 76, 76, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84, -101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 45, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, - 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 76, 82, 32, 61, 32,116, -101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, - 40, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 10, - 9, 9,109, 97,116, 52, 32, 72, 32, 61, 32,109, 97,116, 52, 40,118, 83, 97,109,112,108,101,115, 85, 76, 46,119, 44, 32,118, 83, - 97,109,112,108,101,115, 85, 76, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,119, 44, 32,118, 83, 97,109,112,108, -101,115, 76, 76, 46,120, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 76, 46,122, 44, 32,118, 83, 97,109,112, -108,101,115, 85, 76, 46,121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, - 76, 46,121, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, - 85, 82, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,120, - 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 85, 82, 46, -121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,121, 41, 59, 10, - 42, 47, 9, 10, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 61, 32,105, 84,101,120, 76,111, 99, - 32, 43, 32,105,118,101, 99, 50, 40, 45, 49, 44, 32, 45, 49, 41, 59, 10, 10, 9, 9,109, 97,116, 52, 32, 72, 59, 10, 9, 9, 10, - 9, 9,102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 52, 59, 32,105, 43, 43, 41,123, 10, 9, 9, - 9,102,111,114, 40,105,110,116, 32,106, 32, 61, 32, 48, 59, 32,106, 32, 60, 32, 52, 59, 32,106, 43, 43, 41,123, 10, 9, 9, 9, - 9,105,118,101, 99, 50, 32,105, 84,101,120, 84,109,112, 32, 61, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 43, 32,105,118, -101, 99, 50, 40,105, 44,106, 41, 59, 10, 9, 9, 9, 9, 10, 9, 9, 9, 9, 47, 47, 32,119,114, 97,112, 32,116,101,120,116,117, -114,101, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32,109, 97,110,117, 97,108,108,121, 32,102,111,114, 32,116,101,120,101, -108, 70,101,116, 99,104, 32,116,111, 32,119,111,114,107, 32,111,110, 32,117,118,115, 32,111,105,116,115,105,100,101, 32,116,104, -101, 32, 48, 44, 49, 32,114, 97,110,103,101, 46, 10, 9, 9, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,103,117, 97,114, - 97,110,116,101,101,100, 32,116,111, 32,119,111,114,107, 32,115,105,110, 99,101, 32,119,101, 32,116, 97,107,101, 32,116,104,101, - 32,102,114, 97, 99,116,105,111,110, 97,108, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,117,118, 32, 97, 98,111,118,101, - 46, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,120, 32, 61, 32, 40,105, 84,101,120, 84,109,112, 46,120, 32, 60, 32, 48, - 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 43, 32,118, 68,105,109, 46,120, 32, 58, 32, 40, 40,105, 84,101,120, 84,109, -112, 46,120, 32, 62, 61, 32,118, 68,105,109, 46,120, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 45, 32,118, 68,105,109, - 46,120, 32, 58, 32,105, 84,101,120, 84,109,112, 46,120, 41, 59, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,121, 32, 61, - 32, 40,105, 84,101,120, 84,109,112, 46,121, 32, 60, 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, 46,121, 32, 43, 32,118, 68, -105,109, 46,121, 32, 58, 32, 40, 40,105, 84,101,120, 84,109,112, 46,121, 32, 62, 61, 32,118, 68,105,109, 46,121, 41, 63, 32,105, - 84,101,120, 84,109,112, 46,121, 32, 45, 32,118, 68,105,109, 46,121, 32, 58, 32,105, 84,101,120, 84,109,112, 46,121, 41, 59, 10, - 10, 9, 9, 9, 9,114,103, 98,116,111, 98,119, 40,116,101,120,101,108, 70,101,116, 99,104, 40,105,109, 97, 44, 32,105, 84,101, -120, 84,109,112, 44, 32, 48, 41, 44, 32, 72, 91,105, 93, 91,106, 93, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9, 9, 10, - 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,116, 46,120, 44, 32,121, 32, 61, 32,116, 46,121, 59, 10, 9, 9,102,108,111, 97, -116, 32,120, 50, 32, 61, 32,120, 32, 42, 32,120, 44, 32,120, 51, 32, 61, 32,120, 50, 32, 42, 32,120, 44, 32,121, 50, 32, 61, 32, -121, 32, 42, 32,121, 44, 32,121, 51, 32, 61, 32,121, 50, 32, 42, 32,121, 59, 10, 10, 9, 9,118,101, 99, 52, 32, 88, 32, 61, 32, -118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40,120, 51, 43,120, 41, 43,120, 50, 44, 9, 9, 49, 46, 53, 42,120, 51, 45, 50, 46, 53, - 42,120, 50, 43, 49, 44, 9, 45, 49, 46, 53, 42,120, 51, 43, 50, 42,120, 50, 43, 48, 46, 53, 42,120, 44, 9, 9, 48, 46, 53, 42, - 40,120, 51, 45,120, 50, 41, 41, 59, 10, 9, 9,118,101, 99, 52, 32, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40, -121, 51, 43,121, 41, 43,121, 50, 44, 9, 9, 49, 46, 53, 42,121, 51, 45, 50, 46, 53, 42,121, 50, 43, 49, 44, 9, 45, 49, 46, 53, - 42,121, 51, 43, 50, 42,121, 50, 43, 48, 46, 53, 42,121, 44, 9, 9, 48, 46, 53, 42, 40,121, 51, 45,121, 50, 41, 41, 59, 10, 9, - 9,118,101, 99, 52, 32,100, 88, 32, 61, 32,118,101, 99, 52, 40, 45, 49, 46, 53, 42,120, 50, 43, 50, 42,120, 45, 48, 46, 53, 44, - 9, 9, 52, 46, 53, 42,120, 50, 45, 53, 42,120, 44, 9, 9, 9, 45, 52, 46, 53, 42,120, 50, 43, 52, 42,120, 43, 48, 46, 53, 44, - 9, 9, 49, 46, 53, 42,120, 50, 45,120, 41, 59, 10, 9, 9,118,101, 99, 52, 32,100, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 49, - 46, 53, 42,121, 50, 43, 50, 42,121, 45, 48, 46, 53, 44, 9, 9, 52, 46, 53, 42,121, 50, 45, 53, 42,121, 44, 9, 9, 9, 45, 52, - 46, 53, 42,121, 50, 43, 52, 42,121, 43, 48, 46, 53, 44, 9, 9, 49, 46, 53, 42,121, 50, 45,121, 41, 59, 10, 9, 10, 9, 9, 47, - 47, 32, 99,111,109,112,108,101,116,101, 32,100,101,114,105,118, 97,116,105,118,101, 32,105,110, 32,110,111,114,109, 97,108,105, -122,101,100, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32, 40,109,117,108, 32, 98,121, 32,118, 68,105,109, 41, 10, 9, 9, -118,101, 99, 50, 32,100, 72,100, 83, 84, 32, 61, 32,118, 68,105,109, 32, 42, 32,118,101, 99, 50, 40,100,111,116, 40, 89, 44, 32, - 72, 32, 42, 32,100, 88, 41, 44, 32,100,111,116, 40,100, 89, 44, 32, 72, 32, 42, 32, 88, 41, 41, 59, 10, 10, 9, 9, 47, 47, 32, -116,114, 97,110,115,102,111,114,109, 32,100,101,114,105,118, 97,116,105,118,101, 32,116,111, 32,115, 99,114,101,101,110, 45,115, -112, 97, 99,101, 10, 9, 9,118,101, 99, 50, 32,100, 72,100,120,121, 95, 98,105, 99,117, 98,105, 99, 32, 61, 32,118,101, 99, 50, - 40, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101,120, 68,120, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, - 84,101,120, 68,120, 46,121, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101, -120, 68,121, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, 84,101,120, 68,121, 46,121, 32, 41, 59, 10, 10, 9, 9, - 47, 47, 32, 98,108,101,110,100, 32, 98,101,116,119,101,101,110, 32,116,104,101, 32,116,119,111, 10, 9, 9,100, 72,100,120,121, - 32, 61, 32,100, 72,100,120,121, 42, 40, 49, 45,102, 66,108,101,110,100, 41, 32, 43, 32,100, 72,100,120,121, 95, 98,105, 99,117, - 98,105, 99, 42,102, 66,108,101,110,100, 59, 10, 9,125, 10, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, -100, 72,100,120,121, 46,120, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32,100, 72,100,120,121, 46,121, - 59, 10,125, 10, 10, 35,101,110,100,105,102, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 53, - 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, - 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, - 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, - 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, - 9,118,101, 99, 50, 32, 83, 84, 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, - 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, - 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, - 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, - 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, - 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,100, 44, 72, -117, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, 99, 41, - 44, 32, 72, 99, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, - 32, 83, 84,108, 41, 44, 32, 72,108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, - 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116, -117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, - 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 10, 9, 10, 9,100, - 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32, -104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95, 98,117,109,112, 95,100,101,114,105,118, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, - 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121, - 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, - 66,116, 32, 41, 32, 10,123, 10, 9,102,108,111, 97,116, 32,115, 32, 61, 32, 49, 46, 48, 59, 9, 9, 47, 47, 32,110,101,103, 97, -116,101, 32,116,104,105,115, 32,105,102, 32,102,108,105,112,112,101,100, 32,116,101,120,116,117,114,101, 32, 99,111,111,114,100, -105,110, 97,116,101, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120, -121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, - 59, 10, 9, 10, 9, 47, 47, 32,116,104,105,115, 32,118, 97,114,105, 97,110,116, 32,117,115,105,110,103, 32, 97, 32,100,101,114, -105,118, 97,116,105,118,101, 32,109, 97,112, 32,105,115, 32,100,101,115, 99,114,105, 98,101,100, 32,104,101,114,101, 10, 9, 47, - 47, 32,104,116,116,112, 58, 47, 47,109,109,105,107,107,101,108,115,101,110, 51,100, 46, 98,108,111,103,115,112,111,116, 46, 99, -111,109, 47, 50, 48, 49, 49, 47, 48, 55, 47,100,101,114,105,118, 97,116,105,118,101, 45,109, 97,112,115, 46,104,116,109,108, 10, - 9,118,101, 99, 50, 32,100,105,109, 32, 61, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 44, 32,105,109, 97, 95,121, 41, 59, 10, - 9,118,101, 99, 50, 32,100, 66,100,117,118, 32, 61, 32,104, 83, 99, 97,108,101, 42,100,105,109, 42, 40, 50, 46, 48, 42,116,101, -120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 46,120,121, 45, 49, 46, 48, 41, 59, 10, - 9, 10, 9,100, 66,115, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, 68,120, 46,120, 32, 43, 32,115, 42,100, 66,100, -117,118, 46,121, 42, 84,101,120, 68,120, 46,121, 59, 10, 9,100, 66,116, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, - 68,121, 46,120, 32, 43, 32,115, 42,100, 66,100,117,118, 46,121, 42, 84,101,120, 68,121, 46,121, 59, 10,125, 10, 10,118,111,105, -100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102, -108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118, -101, 99, 51, 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 32, 32,111, -117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116, -117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, - 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, 66,116, - 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105, -110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, - 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, 97,116, - 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, - 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,118, -101, 99, 51, 32,116,101,120, 99,111, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, - 97, 95,121, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117, -116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117, -114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100, -120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40, -116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105, -103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, 32, 47, - 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105,109, 97, - 95,121, 42, 84,101,120, 68,120, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 49, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32,100, 66,116, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, - 68,121, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, - 9, 9, 9, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117, -114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108, -105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110, -101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, - 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, -118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120, 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114,109, 97, -108, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103,101,110, -116, 40,118,101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, - 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, - 10,123, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32,116, 97,110,103,101,110,116, 46,119, 32, 42, 32, 99,114,111,115,115, 40,110, -111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 46,120,121,122, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, 97,108, - 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 46,120,121,122, 32, 43, 32,116,101,120, -110,111,114,109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,122, 42,110,111,114,109, 97,108, 59, - 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97, -108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40,102,108, -111, 97,116, 32,110,111,114,102, 97, 99, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,110,101, -119,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, -111,117,116,110,111,114,109, 97,108, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32,110,111,114,102, 97, 99, 41, 42,110,111,114,109, 97, -108, 32, 43, 32,110,111,114,102, 97, 99, 42,110,101,119,110,111,114,109, 97,108, 59, 10, 9,111,117,116,110,111,114,109, 97,108, - 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, - 42, 42, 42, 42, 32, 77, 65, 84, 69, 82, 73, 65, 76, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,108, - 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,117,110, 95,104,101,109,105, 40,118,101, 99, 51, 32,108, 97,109, -112,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115, -116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32,108, 97, -109,112,118,101, 99, 59, 10, 9,100,105,115,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, - 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,111,116,104,101, -114, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, - 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, -105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 9,100,105, -115,116, 32, 61, 32,108,101,110,103,116,104, 40,108,118, 41, 59, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105,122,101, - 40,108,118, 41, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97, -109,112, 95,102, 97,108,108,111,102,102, 95,105,110,118,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,108, 97,109,112,100, -105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, - 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100, -105,115,116, 32, 43, 32,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102, -102, 95,105,110,118,115,113,117, 97,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97, -116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105, -115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100,105,115, -116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,115,108, -105,100,101,114,115, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,108,100, 49, 44, - 32,102,108,111, 97,116, 32,108,100, 50, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97, -116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,107,119, 32, 61, - 32,108, 97,109,112,100,105,115,116, 42,108, 97,109,112,100,105,115,116, 59, 10, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, -108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,108,100, 49, 42,100,105,115,116, 41, 59, 10, - 9,118,105,115,105,102, 97, 99, 32, 42, 61, 32,108, 97,109,112,100,105,115,116,107,119, 47, 40,108, 97,109,112,100,105,115,116, -107,119, 32, 43, 32,108,100, 50, 42,100,105,115,116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109, -112, 95,102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32, -115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, -116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,100,105,115,116, 47,108, 97, -109,112,100,105,115,116, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105, -115,105, 98,105,108,105,116,121, 95,115,112,104,101,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32, -102,108,111, 97,116, 32,100,105,115,116, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 61, 32,108, 97,109, -112,100,105,115,116, 32, 45, 32,100,105,115,116, 59, 10, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 61, 32,118,105,115,105, -102, 97, 99, 42,109, 97,120, 40,116, 44, 32, 48, 46, 48, 41, 47,108, 97,109,112,100,105,115,116, 59, 10,125, 10, 10,118,111,105, -100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95,115,113,117, 97,114,101, 40,118,101, - 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,109, 97,116, 52, 32,108, 97,109,112,105,109, 97,116, 44, 32,118,101, 99, 51, 32, -108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, 10, 9,105,102, 40,100,111,116, 40,108,118, - 44, 32,108, 97,109,112,118,101, 99, 41, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,118,114,111,116, - 32, 61, 32, 40,108, 97,109,112,105,109, 97,116, 42,118,101, 99, 52, 40,108,118, 44, 32, 48, 46, 48, 41, 41, 46,120,121,122, 59, - 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,109, 97,120, 40, 97, 98,115, 40,108,118,114,111,116, 46,120, 47,108,118,114, -111,116, 46,122, 41, 44, 32, 97, 98,115, 40,108,118,114,111,116, 46,121, 47,108,118,114,111,116, 46,122, 41, 41, 59, 10, 10, 9, - 9,105,110,112,114, 32, 61, 32, 49, 46, 48, 47,115,113,114,116, 40, 49, 46, 48, 32, 43, 32,120, 42,120, 41, 59, 10, 9,125, 10, - 9,101,108,115,101, 10, 9, 9,105,110,112,114, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, - 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95, 99,105,114, 99,108,101, 40,118,101, 99, 51, 32,108, 97,109, -112,118,101, 99, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, - 10, 9,105,110,112,114, 32, 61, 32,100,111,116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 40,102,108,111, 97,116, 32,115,112, -111,116,115,105, 44, 32,102,108,111, 97,116, 32,115,112,111,116, 98,108, 44, 32,102,108,111, 97,116, 32,105,110,112,114, 44, 32, -102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105, -102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 32, 61, 32,115,112,111,116,115,105, 59, 10, 10, 9,105,102, 40,105, -110,112,114, 32, 60, 61, 32,116, 41, 32,123, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, - 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,116, 32, 61, 32,105,110,112,114, 32, 45, 32,116, 59, 10, 10, 9, 9, 47, 42, - 32,115,111,102,116, 32, 97,114,101, 97, 32, 42, 47, 10, 9, 9,105,102, 40,115,112,111,116, 98,108, 32, 33, 61, 32, 48, 46, 48, - 41, 10, 9, 9, 9,105,110,112,114, 32, 42, 61, 32,115,109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, - 44, 32,116, 47,115,112,111,116, 98,108, 41, 59, 10, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32,118,105,115, -105,102, 97, 99, 42,105,110,112,114, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98, -105,108,105,116,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, - 32, 40,118,105,115,105,102, 97, 99, 32, 60, 32, 48, 46, 48, 48, 49, 41, 63, 32, 48, 46, 48, 58, 32,118,105,115,105,102, 97, 99, - 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,101,119, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117, -116, 32,118,101, 99, 51, 32,118,105,101,119, 41, 10,123, 10, 9, 47, 42, 32,104, 97,110,100,108,101, 32,112,101,114,115,112,101, - 99,116,105,118,101, 47,111,114,116,104,111,103,114, 97,112,104,105, 99, 32, 42, 47, 10, 9,118,105,101,119, 32, 61, 32, 40,103, -108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, - 63, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 58, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, - 45, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 40,118, -101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10, -123, 10, 9,118,101, 99, 51, 32, 99, 32, 61, 32, 99,114,111,115,115, 40,108,118, 44, 32,116, 97,110,103, 41, 59, 10, 9,118,101, - 99, 51, 32,118,110,111,114, 32, 61, 32, 99,114,111,115,115, 40, 99, 44, 32,116, 97,110,103, 41, 59, 10, 10, 9,118,110, 32, 61, - 32, 45,110,111,114,109, 97,108,105,122,101, 40,118,110,111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, - 95,105,110,112, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,105,110,112, 41, 10,123, 10, 9,105,110,112, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 10,125, 10, 10,118, -111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,110,111, 95,100,105,102,102,117,115,101, 40,111,117,116, 32,102,108,111, 97, -116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, - 95,105,115, 95,104,101,109,105, 40,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, - 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 53, 42,105,110,112, 32, 43, 32, 48, 46, 53, 59, 10,125, 10, 10,102,108,111, 97, -116, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,118,101, - 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,101, 99, 51, 32,118,101, 99, 91, 52, 93, 44, 32, - 99, 91, 52, 93, 59, 10, 9,102,108,111, 97,116, 32,114, 97,100, 91, 52, 93, 44, 32,102, 97, 99, 59, 10, 9, 10, 9,118,101, 99, - 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 48, 93, 46,120,121,122, - 41, 59, 10, 9,118,101, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, - 91, 49, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, - 32, 45, 32, 97,114,101, 97, 91, 50, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97, -108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 51, 93, 46,120,121,122, 41, 59, 10, 10, 9, 99, 91, 48, 93, 32, 61, - 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, - 41, 59, 10, 9, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 49, - 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99, -114,111,115,115, 40,118,101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9, 99, 91, 51, 93, 32, 61, 32,110, -111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, - 10, 10, 9,114, 97,100, 91, 48, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, - 91, 49, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 49, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 49, 93, - 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 50, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118, -101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 51, 93, 32, 61, 32, 97, 99,111,115, 40, -100,111,116, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 10, 10, 9,102, 97, 99, 61, 32, 32,114, 97, -100, 91, 48, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 48, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 49, - 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 49, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 50, 93, 42,100, -111,116, 40,118,110, 44, 32, 99, 91, 50, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 51, 93, 42,100,111,116, 40, -118,110, 44, 32, 99, 91, 51, 93, 41, 59, 10, 10, 9,114,101,116,117,114,110, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110,112, 95, 97,114,101, 97, 40,118,101, 99, 51, 32,112, -111,115,105,116,105,111,110, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112,118, -101, 99, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,102,108,111, 97,116, 32, 97,114, -101, 97,115,105,122,101, 44, 32,102,108,111, 97,116, 32,107, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112, 41, 10, -123, 10, 9,118,101, 99, 51, 32, 99,111, 32, 61, 32,112,111,115,105,116,105,111,110, 59, 10, 9,118,101, 99, 51, 32,118,101, 99, - 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 10, 9,105,102, 40,100,111,116, 40,118,101, 99, 44, 32,108, 97, -109,112,118,101, 99, 41, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,110,112, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, - 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,105,110,116,101,110,115, 32, 61, 32, 97,114,101, 97, 95,108, 97, -109,112, 95,101,110,101,114,103,121, 40, 97,114,101, 97, 44, 32, 99,111, 44, 32,118,110, 41, 59, 10, 10, 9, 9,105,110,112, 32, - 61, 32,112,111,119, 40,105,110,116,101,110,115, 42, 97,114,101, 97,115,105,122,101, 44, 32,107, 41, 59, 10, 9,125, 10,125, 10, - 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,111,114,101,110, 95,110, 97,121,101,114, 40,102, -108,111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, - 32,102,108,111, 97,116, 32,114,111,117,103,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,118, -101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, - 32,110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, 97, -116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, - 97,116, 32,114,101, 97,108,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 10, 9,105,102, 40,114,101, 97,108, -110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, - 32,105,102, 40,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9, -101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, - 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 76,105,116, 95, 65, 32, 61, 32, 97, 99,111,115, 40,114,101, - 97,108,110,108, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 86,105,101,119, 95, 65, 32, 61, 32, 97, 99,111,115, 40,110,118, 41, - 59, 10, 10, 9, 9,118,101, 99, 51, 32, 76,105,116, 95, 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 45, 32, -114,101, 97,108,110,108, 42,110, 41, 59, 10, 9, 9,118,101, 99, 51, 32, 86,105,101,119, 95, 66, 32, 61, 32,110,111,114,109, 97, -108,105,122,101, 40,118, 32, 45, 32,110,118, 42,110, 41, 59, 10, 10, 9, 9,102,108,111, 97,116, 32,116, 32, 61, 32,109, 97,120, - 40,100,111,116, 40, 76,105,116, 95, 66, 44, 32, 86,105,101,119, 95, 66, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,102,108, -111, 97,116, 32, 97, 44, 32, 98, 59, 10, 10, 9, 9,105,102, 40, 76,105,116, 95, 65, 32, 62, 32, 86,105,101,119, 95, 65, 41, 32, -123, 10, 9, 9, 9, 97, 32, 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9, 9, 98, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, - 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, 97, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, 9, 9, 98, 32, - 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9,125, 10, 10, 9, 9,102,108,111, 97,116, 32, 65, 32, 61, 32, 49, 46, 48, 32, 45, 32, - 40, 48, 46, 53, 42, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103, -104, 41, 32, 43, 32, 48, 46, 51, 51, 41, 41, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 66, 32, 61, 32, 48, 46, 52, 53, 42, 40, - 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, - 46, 48, 57, 41, 41, 59, 10, 10, 9, 9, 98, 32, 42, 61, 32, 48, 46, 57, 53, 59, 10, 9, 9,105,115, 32, 61, 32,110,108, 42, 40, - 65, 32, 43, 32, 40, 66, 32, 42, 32,116, 32, 42, 32,115,105,110, 40, 97, 41, 32, 42, 32,116, 97,110, 40, 98, 41, 41, 41, 59, 10, - 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,116,111,111,110, 40,118,101, - 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, - 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, - 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 9,102,108,111, 97,116, - 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105, -122,101, 41, 32,105,115, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 32, 40,115,105, -122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, - 32,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,115, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110, -103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100, -101, 95,100,105,102,102,117,115,101, 95,109,105,110,110, 97,101,114,116, 40,102,108,111, 97,116, 32,110,108, 44, 32,118,101, 99, - 51, 32,110, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,100, 97,114,107,110,101,115,115, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, -105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, - 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,105,102, 40,100, 97,114, -107,110,101,115,115, 32, 60, 61, 32, 49, 46, 48, 41, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40,109, 97,120, - 40,110,118, 42,110,108, 44, 32, 48, 46, 49, 41, 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9, - 9,101,108,115,101, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40, 49, 46, 48, 48, 48, 49, 32, 45, 32,110,118, - 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9,125, 10,125, 10, 10,102,108,111, 97,116, 32,102, -114,101,115,110,101,108, 95,102, 97, 99, 40,118,101, 99, 51, 32,118,105,101,119, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,102, -108,111, 97,116, 32,103,114, 97,100, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, - 49, 44, 32,116, 50, 59, 10, 9,102,108,111, 97,116, 32,102,102, 97, 99, 59, 10, 10, 9,105,102, 40,102, 97, 99, 61, 61, 48, 46, - 48, 41, 32,123, 10, 9, 9,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, -116, 49, 61, 32,100,111,116, 40,118,105,101,119, 44, 32,118,110, 41, 59, 10, 9, 9,105,102, 40,116, 49, 62, 48, 46, 48, 41, 32, - 32,116, 50, 61, 32, 49, 46, 48, 43,116, 49, 59, 10, 9, 9,101,108,115,101, 32,116, 50, 61, 32, 49, 46, 48, 45,116, 49, 59, 10, - 10, 9, 9,116, 50, 61, 32,103,114, 97,100, 32, 43, 32, 40, 49, 46, 48, 45,103,114, 97,100, 41, 42,112,111,119, 40,116, 50, 44, - 32,102, 97, 99, 41, 59, 10, 10, 9, 9,105,102, 40,116, 50, 60, 48, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, - 10, 9, 9,101,108,115,101, 32,105,102, 40,116, 50, 62, 49, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9, - 9,101,108,115,101, 32,102,102, 97, 99, 32, 61, 32,116, 50, 59, 10, 9,125, 10, 10, 9,114,101,116,117,114,110, 32,102,102, 97, - 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,102,114,101,115,110,101,108, - 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108, -111, 97,116, 32,102, 97, 99, 95,105, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, -105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32,102,114,101,115,110,101,108, 95,102, 97, 99, 40,108,118, 44, 32,118,110, 44, 32, -102, 97, 99, 95,105, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,117, 98,105, 99, - 40,102,108,111, 97,116, 32,105,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,115, 41, 10,123, 10, 9,105, -102, 40,105,115, 62, 48, 46, 48, 32, 38, 38, 32,105,115, 60, 49, 46, 48, 41, 10, 9, 9,111,117,116,105,115, 61, 32,115,109,111, -111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, 44, 32,105,115, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111, -117,116,105,115, 61, 32,105,115, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,115,105,102, 97, 99, 40, -102,108,111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,114,101, -102,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105, 41, 10,123, 10, 9, 47, 42,105,102, 40,105, 32, 62, 32, - 48, 46, 48, 41, 42, 47, 10, 9, 9,111,117,116,105, 32, 61, 32,109, 97,120, 40,105, 42,118,105,115,105,102, 97, 99, 42,114,101, -102,108, 44, 32, 48, 46, 48, 41, 59, 10, 9, 47, 42,101,108,115,101, 10, 9, 9,111,117,116,105, 32, 61, 32,105, 59, 42, 47, 10, -125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 95,115,112,101, 99, 40,118,101, 99, - 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,110, 32, 61, 32,116, 97,110, -103, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95,116,111, 95,100,105,102,102,117,115,101, 40, -102,108,111, 97,116, 32,105, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, 51, 32, 99,111,108, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,105,102, 40,105, 32, 62, 32, 48, 46, 48, 41, - 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,105, 42,108, 97,109,112, 99,111,108, 42, 99,111,108, 59, 10, 9,101,108,115,101, - 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,104,101,109,105, 95,115,112,101, 99, 40,118,101, 99, 51, 32,118,110, - 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, - 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,108,118, 32, 43, 61, 32,118,105,101,119, 59, 10, 9,108,118, 32, 61, 32,110, -111,114,109, 97,108,105,122,101, 40,108,118, 41, 59, 10, 10, 9,116, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, - 10, 9,116, 32, 61, 32, 48, 46, 53, 42,116, 32, 43, 32, 48, 46, 53, 59, 10, 10, 9,116, 32, 61, 32,118,105,115,105,102, 97, 99, - 42,115,112,101, 99, 42,112,111,119, 40,116, 44, 32,104, 97,114,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100, -101, 95,112,104,111,110,103, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, - 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, - 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, - 59, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40,104, 44, 32,110, 41, 44, 32, 48, - 46, 48, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,112,111,119, 40,114,115,108,116, 44, 32,104, 97,114,100, 41, - 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,111,111,107,116,111,114,114, 95,115,112,101, 99, 40,118,101, - 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, - 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100, -111,116, 40,110, 44, 32,104, 41, 59, 10, 10, 9,105,102, 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, - 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110, -118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, - 32,105, 32, 61, 32,112,111,119, 40,110,104, 44, 32,104, 97,114,100, 41, 59, 10, 10, 9, 9,105, 32, 61, 32,105, 47, 40, 48, 46, - 49, 43,110,118, 41, 59, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,105, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, - 32,115,104, 97,100,101, 95, 98,108,105,110,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, - 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,101,102,114, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112, -101, 99, 95,112,111,119,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9, -105,102, 40,114,101,102,114, 97, 99, 32, 60, 32, 49, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, - 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 32, 61, 61, 32, 48, 46, - 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, - 10, 9, 9,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 60, 49, 48, 48, 46, 48, 41, 10, 9, 9, 9,115,112,101, 99, 95, -112,111,119,101,114, 61, 32,115,113,114,116, 40, 49, 46, 48, 47,115,112,101, 99, 95,112,111,119,101,114, 41, 59, 10, 9, 9,101, -108,115,101, 10, 9, 9, 9,115,112,101, 99, 95,112,111,119,101,114, 61, 32, 49, 48, 46, 48, 47,115,112,101, 99, 95,112,111,119, -101,114, 59, 10, 10, 9, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, - 59, 10, 9, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 9, 9,105,102, 40,110, -104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,125, - 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40, -110, 44, 32,118, 41, 44, 32, 48, 46, 48, 49, 41, 59, 10, 9, 9, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,100,111,116, 40, -110, 44, 32,108, 41, 59, 10, 9, 9, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 49, 41, 32,123, 10, 9, 9, 9, 9,115, -112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 9,125, 10, 9, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, - 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 49, 41, - 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, - 98, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,118, 41, 47,118,104, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 99, 32, - 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,108, 41, 47,118,104, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,103, 32, 61, - 32, 48, 46, 48, 59, 10, 10, 9, 9, 9, 9,105,102, 40, 97, 32, 60, 32, 98, 32, 38, 38, 32, 97, 32, 60, 32, 99, 41, 32,103, 32, - 61, 32, 97, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 98, 32, 60, 32, 97, 32, 38, 38, 32, 98, 32, 60, 32, 99, 41, - 32,103, 32, 61, 32, 98, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 99, 32, 60, 32, 97, 32, 38, 38, 32, 99, 32, 60, - 32, 98, 41, 32,103, 32, 61, 32, 99, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32,115,113,114,116, 40, 40, - 40,114,101,102,114, 97, 99, 32, 42, 32,114,101,102,114, 97, 99, 41, 43, 40,118,104, 42,118,104, 41, 45, 49, 46, 48, 41, 41, 59, - 10, 9, 9, 9, 9,102,108,111, 97,116, 32,102, 32, 61, 32, 40, 40, 40,112, 45,118,104, 41, 42, 40,112, 45,118,104, 41, 41, 47, - 40, 40,112, 43,118,104, 41, 42, 40,112, 43,118,104, 41, 41, 41, 42, 40, 49, 46, 48, 43, 40, 40, 40, 40,118,104, 42, 40,112, 43, -118,104, 41, 41, 45, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 41, 47, 40, 40, 40, -118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, - 41, 41, 41, 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,110,104, 41, 59, 10, - 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 42,103, 42,101,120,112, 95, 98,108,101,110,100, -101,114, 40, 40, 45, 40, 97,110,103, 42, 97,110,103, 41, 47, 40, 50, 46, 48, 42,115,112,101, 99, 95,112,111,119,101,114, 42,115, -112,101, 99, 95,112,111,119,101,114, 41, 41, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9,125, 10, -125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119, 97,114,100,105,115,111, 95,115,112,101, 99, 40,118,101, 99, 51, 32, -110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,109,115, 44, 32,111,117, -116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114, -109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,109, 97,120, 40,100, -111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97, -120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,108, 32, 61, - 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,108, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32, 97, -110,103,108,101, 32, 61, 32,116, 97,110, 40, 97, 99,111,115, 40,110,104, 41, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,108,112, -104, 97, 32, 61, 32,109, 97,120, 40,114,109,115, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 61, - 32,110,108, 32, 42, 32, 40, 49, 46, 48, 47, 40, 52, 46, 48, 42, 77, 95, 80, 73, 42, 97,108,112,104, 97, 42, 97,108,112,104, 97, - 41, 41, 42, 40,101,120,112, 95, 98,108,101,110,100,101,114, 40, 45, 40, 97,110,103,108,101, 42, 97,110,103,108,101, 41, 47, 40, - 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 47, 40,115,113,114,116, 40,110,118, 42,110,108, 41, 41, 41, 59, 10,125, 10, - 10,118,111,105,100, 32,115,104, 97,100,101, 95,116,111,111,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, - 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97,116, 32, -116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118, -101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, - 32,114,115,108,116, 32, 61, 32,100,111,116, 40,104, 44, 32,110, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, - 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,114,115,108, -116, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 61, 32, 40,115,105,122,101, 32, 43, - 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,115,108, -116, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110, -103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, -114,115,108,116, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, 99, 95, 97,114,101, 97, 95,105,110, -112, 40,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32, -102,108,111, 97,116, 32,111,117,116,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99,102, 97, 99, 32, - 61, 32,115,112,101, 99,102, 97, 99, 42,105,110,112, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, - 99, 95,116, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, 32,102, -108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,116, 32, 61, 32,115,104, 97,100,102, 97, 99, 42,115,112,101, 99, 42,118,105, -115,105,102, 97, 99, 42,115,112,101, 99,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, - 95,115,112,101, 99, 40,102,108,111, 97,116, 32,116, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, - 51, 32,115,112,101, 99, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, -117,116, 99,111,108, 32, 61, 32,116, 42,108, 97,109,112, 99,111,108, 42,115,112,101, 99, 99,111,108, 59, 10,125, 10, 10,118,111, -105,100, 32,115,104, 97,100,101, 95, 97,100,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, - 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, - 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 40, -118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, - 32, 43, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95, - 99,108, 97,109,112,101,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117, -116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 32, - 43, 32,109, 97,120, 40, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, - 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 95, 99,108, 97,109,112,101, -100, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99, -111,108, 32, 43, 32,109, 97,120, 40, 99,111,108, 49, 42, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, - 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100, -100,102, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, - 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111, -108, 32, 43, 32,102, 42, 99,111,108, 49, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 40,118,101, - 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, - 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118, -111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118, -101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, - 99,111,108, 32, 61, 32, 99,111,108, 42,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111, 98, 99, -111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118, -101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, - 46,114,103, 98, 42,111, 98, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -114, 97,109,112, 95,114,103, 98,116,111, 98,119, 40,118,101, 99, 51, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, - 46, 51, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 53, 56, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 49, 50, - 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 40,102,108,111, 97, -116, 32,105, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,104, 97,100,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,104, - 97,100,102, 97, 99, 32, 61, 32,105, 42,101,110,101,114,103,121, 42, 40, 49, 46, 48, 32, 45, 32,115,104, 97,100,102, 97, 99, 41, - 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,100,105,102,102, -117,115,101, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,114,103, 98, 44, 32,118,101, 99, - 52, 32,100,105,102,102, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,100,105,102,102, 41, 10,123, 10, 9,111,117,116, -100,105,102,102, 32, 61, 32,100,105,102,102, 32, 45, 32,118,101, 99, 52, 40,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, - 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95, -115,112,101, 99,117,108, 97,114, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,115,112,101, - 99,114,103, 98, 44, 32,118,101, 99, 52, 32,115,112,101, 99, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,115,112,101, - 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99, 32, 61, 32,115,112,101, 99, 32, 45, 32,118,101, 99, 52, 40,115,112,101, 99, -114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,115,116, 95, -115,104, 97,100,111,119, 98,117,102, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 83,104, 97, -100,111,119, 32,115,104, 97,100,111,119,109, 97,112, 44, 32,109, 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115,109, 97, -116, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,111,119, 98,105, 97,115, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,105,102, 40,105,110,112, 32, 60, 61, 32, 48, - 46, 48, 41, 32,123, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, - 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, 52, 40, -114, 99,111, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9, 9, 47, 47,102,108,111, 97,116, 32, 98,105, 97,115, 32, 61, 32, 40, 49, 46, - 53, 32, 45, 32,105,110,112, 42,105,110,112, 41, 42,115,104, 97,100,111,119, 98,105, 97,115, 59, 10, 9, 9, 99,111, 46,122, 32, - 45, 61, 32,115,104, 97,100,111,119, 98,105, 97,115, 42, 99,111, 46,119, 59, 10, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, -115,104, 97,100,111,119, 50, 68, 80,114,111,106, 40,115,104, 97,100,111,119,109, 97,112, 44, 32, 99,111, 41, 46,120, 59, 10, 9, -125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,101,120,112,111,115,117,114,101, 95, 99,111,114,114,101, 99,116, - 40,118,101, 99, 51, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,108,105,110,102, 97, 99, 44, 32,102,108,111, 97,116, 32,108, -111,103,102, 97, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111, -108, 32, 61, 32,108,105,110,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32,101,120,112, 40, 99,111,108, 42,108,111,103,102, 97, 99, - 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,105,115,116, 95,102, 97, 99,116,111,114, 40,118,101, - 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,109,105,115,116,115,116, 97, 44, 32,102,108,111, 97,116, 32,109,105,115,116, -100,105,115,116, 44, 32,102,108,111, 97,116, 32,109,105,115,116,116,121,112,101, 44, 32,102,108,111, 97,116, 32,109,105,115,105, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, - 44, 32,122, 99,111,114, 59, 10, 10, 9,122, 99,111,114, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, - 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,108,101,110,103,116,104, 40, 99,111, 41, 58, - 32, 45, 99,111, 91, 50, 93, 59, 10, 9, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 40,122, 99,111,114, 45,109,105, -115,116,115,116, 97, 41, 47,109,105,115,116,100,105,115,116, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40, -109,105,115,116,116,121,112,101, 32, 61, 61, 32, 48, 46, 48, 41, 32,102, 97, 99, 32, 42, 61, 32,102, 97, 99, 59, 10, 9,101,108, -115,101, 32,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 49, 46, 48, 41, 59, 10, 9,101,108,115,101, 32,102, 97, - 99, 32, 61, 32,115,113,114,116, 40,102, 97, 99, 41, 59, 10, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 49, 46, 48, 32, 45, 32, - 40, 49, 46, 48, 45,102, 97, 99, 41, 42, 40, 49, 46, 48, 45,109,105,115,105, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, - 97,100,101, 95,119,111,114,108,100, 95,109,105,120, 40,118,101, 99, 51, 32,104,111,114, 44, 32,118,101, 99, 52, 32, 99,111,108, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, 32, - 61, 32, 99,108, 97,109,112, 40, 99,111,108, 46, 97, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111, -108, 32, 61, 32,118,101, 99, 52, 40,109,105,120, 40,104,111,114, 44, 32, 99,111,108, 46,114,103, 98, 44, 32,102, 97, 99, 41, 44, - 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111,112, 97, -113,117,101, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, - 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, - 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, - 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, - 97, 42,111, 98, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, 69, 87, 32, - 83, 72, 65, 68, 69, 82, 32, 85, 84, 73, 76, 73, 84, 73, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, - 10, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40,118,101, 99, 51, 32, - 73,110, 99,111,109,105,110,103, 44, 32,118,101, 99, 51, 32, 78,111,114,109, 97,108, 44, 32,102,108,111, 97,116, 32,101,116, 97, - 41, 10,123, 10, 32, 32, 32, 32, 47, 42, 32, 99,111,109,112,117,116,101, 32,102,114,101,115,110,101,108, 32,114,101,102,108,101, - 99,116, 97,110, 99,101, 32,119,105,116,104,111,117,116, 32,101,120,112,108,105, 99,105,116,108,121, 32, 99,111,109,112,117,116, -105,110,103, 10, 32, 32, 32, 32, 32, 32, 32,116,104,101, 32,114,101,102,114, 97, 99,116,101,100, 32,100,105,114,101, 99,116,105, -111,110, 32, 42, 47, 10, 32, 32, 32, 32,102,108,111, 97,116, 32, 99, 32, 61, 32, 97, 98,115, 40,100,111,116, 40, 73,110, 99,111, -109,105,110,103, 44, 32, 78,111,114,109, 97,108, 41, 41, 59, 10, 32, 32, 32, 32,102,108,111, 97,116, 32,103, 32, 61, 32,101,116, - 97, 32, 42, 32,101,116, 97, 32, 45, 32, 49, 46, 48, 32, 43, 32, 99, 32, 42, 32, 99, 59, 10, 32, 32, 32, 32,102,108,111, 97,116, - 32,114,101,115,117,108,116, 59, 10, 10, 32, 32, 32, 32,105,102, 40,103, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 32, 32, 32, 32, - 32, 32, 32, 32,103, 32, 61, 32,115,113,114,116, 40,103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, 32, 65, - 32, 61, 40,103, 32, 45, 32, 99, 41, 47, 40,103, 32, 43, 32, 99, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, - 32, 66, 32, 61, 40, 99, 32, 42, 40,103, 32, 43, 32, 99, 41, 45, 32, 49, 46, 48, 41, 47, 40, 99, 32, 42, 40,103, 32, 45, 32, 99, - 41, 43, 32, 49, 46, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 48, 46, 53, 32, 42, 32, - 65, 32, 42, 32, 65, 32, 42, 40, 49, 46, 48, 32, 43, 32, 66, 32, 42, 32, 66, 41, 59, 10, 32, 32, 32, 32,125, 10, 32, 32, 32, 32, -101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 49, 46, 48, 59, 32, 32, 47, 42, 32, 84, - 73, 82, 32, 40,110,111, 32,114,101,102,114, 97, 99,116,101,100, 32, 99,111,109,112,111,110,101,110,116, 41, 32, 42, 47, 10, 10, - 32, 32, 32, 32,114,101,116,117,114,110, 32,114,101,115,117,108,116, 59, 10,125, 10, 10,102,108,111, 97,116, 32,104,121,112,111, -116, 40,102,108,111, 97,116, 32,120, 44, 32,102,108,111, 97,116, 32,121, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,115,113, -114,116, 40,120, 42,120, 32, 43, 32,121, 42,121, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, - 69, 87, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, - 10, 10, 35,100,101,102,105,110,101, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 32, 51, 10, 10, 47, 42, 32, 98,115,100,102,115, - 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40,118,101, 99, 52, - 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, - 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, 97,109, 98,105,101,110,116, 32, -108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 50, 41, 59, 10, 10, 9, - 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 10, 9,102,111,114, 40,105,110, -116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, 43, 43, 41, 32,123, 10, - 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, 95, 76,105,103,104,116, - 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, 32,108, -105,103,104,116, 95,100,105,102,102,117,115,101, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, - 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, 10, 10, 9, 9,102,108,111, 97,116, 32, 98,115,100,102, 32, 61, 32,109, 97, -120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, 46, 48, 41, 59, 10, - 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 42, 98,115,100,102, 59, 10, 9,125, 10, 10, 9, -114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108,111,115,115,121, 40,118,101, 99, 52, 32, 99, -111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118, -101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, 97,109, - 98,105,101,110,116, 32,108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, - 50, 41, 59, 10, 10, 9, 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 10, 9, -102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, - 43, 43, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, - 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, 9, 9, -118,101, 99, 51, 32, 72, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,104, 97,108,102, 86, -101, 99,116,111,114, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 32, - 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, - 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 32, 61, 32,103,108, 95, 76,105,103,104, -116, 83,111,117,114, 99,101, 91,105, 93, 46,115,112,101, 99,117,108, 97,114, 46,114,103, 98, 59, 10, 10, 9, 9, 47, 42, 32,119, -101, 32,109,105,120, 32,105,110, 32,115,111,109,101, 32,100,105,102,102,117,115,101, 32,115,111, 32,108,111,119, 32,114,111,117, -103,104,110,101,115,115, 32,115,116,105,108,108, 32,115,104,111,119,115, 32,117,112, 32, 42, 47, 10, 9, 9,102,108,111, 97,116, - 32, 98,115,100,102, 32, 61, 32, 48, 46, 53, 42,112,111,119, 40,109, 97,120, 40,100,111,116, 40, 78, 44, 32, 72, 41, 44, 32, 48, - 46, 48, 41, 44, 32, 49, 46, 48, 47,114,111,117,103,104,110,101,115,115, 41, 59, 10, 9, 9, 98,115,100,102, 32, 43, 61, 32, 48, - 46, 53, 42,109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, - 46, 48, 41, 59, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 42, 98,115,100,102, 59, - 10, 9,125, 10, 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, 98, 44, - 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95, 97,110,105,115,111,116,114, -111,112,105, 99, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, - 85, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 86, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, - 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115, -100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108, 97,115,115, 40,118,101, 99, 52, 32, - 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,102,108,111, 97,116, 32,105,111, -114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117, -108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, - 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115, -100,102, 95,116,114, 97,110,115,108,117, 99,101,110,116, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,118,101, 99, 51, 32, - 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, - 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,116,114, 97,110,115,112, 97,114,101,110,116, 40,118, -101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, - 42, 32,116,104,105,115, 32,105,115,110, 39,116, 32,114,105,103,104,116, 32, 42, 47, 10, 9,114,101,115,117,108,116, 46,114, 32, - 61, 32, 99,111,108,111,114, 46,114, 59, 10, 9,114,101,115,117,108,116, 46,103, 32, 61, 32, 99,111,108,111,114, 46,103, 59, 10, - 9,114,101,115,117,108,116, 46, 98, 32, 61, 32, 99,111,108,111,114, 46, 98, 59, 10, 9,114,101,115,117,108,116, 46, 97, 32, 61, - 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,118,101,108,118,101,116, 40,118, -101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,105,103,109, 97, 44, 32,118,101, 99, 51, 32, 78, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105, -102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10,125, 10, - 10, 47, 42, 32,101,109,105,115,115,105,111,110, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,101,109,105,115,115, -105,111,110, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,116,114,101,110,103,116,104, 44, 32, -118,101, 99, 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,114,101,115,117, -108,116, 32, 61, 32, 99,111,108,111,114, 42,115,116,114,101,110,103,116,104, 59, 10,125, 10, 10, 47, 42, 32, 99,108,111,115,117, -114,101,115, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,109,105,120, 95,115,104, 97,100,101,114, 40,102,108,111, - 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101, -114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 41, 10,123, 10, 9,115,104, 97,100,101,114, 32, 61, - 32,109,105,120, 40,115,104, 97,100,101,114, 49, 44, 32,115,104, 97,100,101,114, 50, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,110,111,100,101, 95, 97,100,100, 95,115,104, 97,100,101,114, 40,118,101, 99, 52, 32,115,104, 97,100,101,114, - 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, - 41, 10,123, 10, 9,115,104, 97,100,101,114, 32, 61, 32,115,104, 97,100,101,114, 49, 32, 43, 32,115,104, 97,100,101,114, 50, 59, - 10,125, 10, 10, 47, 42, 32,102,114,101,115,110,101,108, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,102,114,101, -115,110,101,108, 40,102,108,111, 97,116, 32,105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,102,108,111, 97,116, 32,101,116, 97, 32, 61, - 32,109, 97,120, 40,105,111,114, 44, 32, 48, 46, 48, 48, 48, 48, 49, 41, 59, 10, 9,114,101,115,117,108,116, 32, 61, 32,102,114, -101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40, 73, 44, 32, 78, 44, 32,101,116, 97, 41, 59, 32, 47, 47, 98, - 97, 99,107,102, 97, 99,105,110,103, 40, 41, 63, 32, 49, 46, 48, 47,101,116, 97, 58, 32,101,116, 97, 41, 59, 10,125, 10, 10, 47, - 42, 32,103,101,111,109,101,116,114,121, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,103,101,111,109,101,116,114, -121, 40,118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,116,111,119,111,114,108,100, 44, 10, - 9,111,117,116, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114, -109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 10, 9,111,117,116, 32,118,101, 99, 51, - 32,116,114,117,101, 95,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,109,105,110,103, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,112, 97,114, 97,109,101,116,114,105, 99, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, - 32, 98, 97, 99,107,102, 97, 99,105,110,103, 41, 10,123, 10, 9,112,111,115,105,116,105,111,110, 32, 61, 32, 40,116,111,119,111, -114,108,100, 42,118,101, 99, 52, 40, 73, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,110,111,114,109, 97,108, 32, 61, - 32, 78, 59, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9,116,114,117,101, 95, -110,111,114,109, 97,108, 32, 61, 32, 78, 59, 10, 9,105,110, 99,111,109,105,110,103, 32, 61, 32, 73, 59, 10, 9,112, 97,114, 97, -109,101,116,114,105, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9, 98, 97, 99,107,102, 97, 99,105,110,103, 32, - 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99,111,111,114,100, 40,118,101, - 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, - 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 10, 9,118,101, 99, 51, 32, 97,116,116,114, 95,111,114, 99,111, 44, 32,118, -101, 99, 51, 32, 97,116,116,114, 95,117,118, 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32,103,101,110,101,114, 97,116,101,100, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32, 99, 97,109,101,114, - 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,119,105,110,100,111,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, -108,101, 99,116,105,111,110, 41, 10,123, 10, 9,103,101,110,101,114, 97,116,101,100, 32, 61, 32, 97,116,116,114, 95,111,114, 99, -111, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 40,111, 98,105,110,118,109, 97,116, - 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 78, 44, 32, 48, 46, 48, 41, 41, 41, 46,120,121,122, 41, - 59, 10, 9,117,118, 32, 61, 32, 97,116,116,114, 95,117,118, 59, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 73, 59, 10, 9, 99, - 97,109,101,114, 97, 32, 61, 32, 73, 59, 10, 9,119,105,110,100,111,119, 32, 61, 32,103,108, 95, 70,114, 97,103, 67,111,111,114, -100, 46,120,121,122, 59, 10, 9,114,101,102,108,101, 99,116,105,111,110, 32, 61, 32,114,101,102,108,101, 99,116, 40, 78, 44, 32, - 73, 41, 59, 10, 10,125, 10, 10, 47, 42, 32,116,101,120,116,117,114,101,115, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100, -101, 95,116,101,120, 95,103,114, 97,100,105,101,110,116, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 52, - 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, - 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, - 32,110,111,100,101, 95,116,101,120, 95, 99,104,101, 99,107,101,114, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 52, 32, - 99,111,108,111,114, 49, 44, 32,118,101, 99, 52, 32, 99,111,108,111,114, 50, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, - 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, - 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, - 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99,108,111,117,100,115, 40,118,101, 99, 51, 32, - 99,111, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, - 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101, -120, 95,101,110,118,105,114,111,110,109,101,110,116, 40,118,101, 99, 51, 32, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, - 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 10,123, 10, 9,102,108,111, 97,116, 32,117, - 32, 61, 32, 40, 97,116, 97,110, 40, 99,111, 46,121, 44, 32, 99,111, 46,120, 41, 32, 43, 32, 77, 95, 80, 73, 41, 47, 40, 50, 46, - 48, 42, 77, 95, 80, 73, 41, 59, 10, 9,102,108,111, 97,116, 32,118, 32, 61, 32, 97,116, 97,110, 40, 99,111, 46,122, 44, 32,104, -121,112,111,116, 40, 99,111, 46,120, 44, 32, 99,111, 46,121, 41, 41, 47, 77, 95, 80, 73, 32, 43, 32, 48, 46, 53, 59, 10, 10, 9, - 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,118,101, 99, 50, 40,117, 44, 32,118, - 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32, - 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111, -114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116, -101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 99,111, 46,120,121, 41, 59, 10, 9, 97,108,112,104, 97, 32, 61, 32, 99, -111,108,111,114, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,109, 97,103,105, 99, 40,118, -101, 99, 51, 32,112, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,105,115,116,111,114, -116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, -102, 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, - 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,109,117,115,103,114, 97,118,101, - 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,101,116, - 97,105,108, 44, 32,102,108,111, 97,116, 32,100,105,109,101,110,115,105,111,110, 44, 32,102,108,111, 97,116, 32,108, 97, 99,117, -110, 97,114,105,116,121, 44, 32,102,108,111, 97,116, 32,111,102,102,115,101,116, 44, 32,102,108,111, 97,116, 32,103, 97,105,110, - 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, - 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, - 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,110,111,105,115,101, 40,118,101, 99, 51, 32, 99, -111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,101,116, 97,105,108, 44, 32,102,108, -111, 97,116, 32,100,105,115,116,111,114,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, - 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101, -120, 95,115,107,121, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 10,123, - 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100, -101, 95,116,101,120, 95,118,111,114,111,110,111,105, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97, -108,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, - 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, 32, - 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,119, 97,118,101, 40,118,101, 99, 51, 32, - 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,105,115,116,111,114,116,105,111, -110, 44, 32,102,108,111, 97,116, 32,100,101,116, 97,105,108, 44, 32,102,108,111, 97,116, 32,100,101,116, 97,105,108, 95,115, 99, - 97,108,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, - 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,102, 97, 99, 32, 61, - 32, 49, 46, 48, 59, 10,125, 10, 10, 47, 42, 32,108,105,103,104,116, 32,112, 97,116,104, 32, 42, 47, 10, 10,118,111,105,100, 32, -110,111,100,101, 95,108,105,103,104,116, 95,112, 97,116,104, 40, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95, 99, - 97,109,101,114, 97, 95,114, 97,121, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,115,104, 97,100,111,119, 95, -114, 97,121, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,100,105,102,102,117,115,101, 95,114, 97,121, 44, 10, - 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,103,108,111,115,115,121, 95,114, 97,121, 44, 10, 9,111,117,116, 32,102, -108,111, 97,116, 32,105,115, 95,115,105,110,103,117,108, 97,114, 95,114, 97,121, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, - 32,105,115, 95,114,101,102,108,101, 99,116,105,111,110, 95,114, 97,121, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105, -115, 95,116,114, 97,110,115,109,105,115,115,105,111,110, 95,114, 97,121, 41, 10,123, 10, 9,105,115, 95, 99, 97,109,101,114, 97, - 95,114, 97,121, 32, 61, 32, 49, 46, 48, 59, 10, 9,105,115, 95,115,104, 97,100,111,119, 95,114, 97,121, 32, 61, 32, 48, 46, 48, - 59, 10, 9,105,115, 95,100,105,102,102,117,115,101, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 10, 9,105,115, 95,103,108,111, -115,115,121, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 10, 9,105,115, 95,115,105,110,103,117,108, 97,114, 95,114, 97,121, 32, - 61, 32, 48, 46, 48, 59, 10, 9,105,115, 95,114,101,102,108,101, 99,116,105,111,110, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, - 10, 9,105,115, 95,116,114, 97,110,115,109,105,115,115,105,111,110, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10, - 47, 42, 32,111,117,116,112,117,116, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,111,117,116,112,117,116, 95,109, - 97,116,101,114,105, 97,108, 40,118,101, 99, 52, 32,115,117,114,102, 97, 99,101, 44, 32,118,101, 99, 52, 32,118,111,108,117,109, -101, 44, 32,102,108,111, 97,116, 32,100,105,115,112,108, 97, 99,101,109,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 52, 32, -114,101,115,117,108,116, 41, 10,123, 10, 9,114,101,115,117,108,116, 32, 61, 32,115,117,114,102, 97, 99,101, 59, 10,125, 10, 10, - 0}; - diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl.c b/source/blender/gpu/intern/gpu_shader_vertex.glsl.c deleted file mode 100644 index d7a7bac771d..00000000000 --- a/source/blender/gpu/intern/gpu_shader_vertex.glsl.c +++ /dev/null @@ -1,17 +0,0 @@ -/** \file blender/gpu/intern/gpu_shader_vertex.glsl.c - * \ingroup gpu - */ -/* DataToC output of file <gpu_shader_vertex_glsl> */ - -int datatoc_gpu_shader_vertex_glsl_size= 228; -char datatoc_gpu_shader_vertex_glsl[]= { - 10,118, 97,114, -121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,112,111,115,105,116,105,111,110, 59, 10,118, 97,114,121,105,110,103, 32,118, -101, 99, 51, 32,118, 97,114,110,111,114,109, 97,108, 59, 10, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 10,123, 10, 9,118, -101, 99, 52, 32, 99,111, 32, 61, 32,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 32, 42, 32,103,108, - 95, 86,101,114,116,101,120, 59, 10, 10, 9,118, 97,114,112,111,115,105,116,105,111,110, 32, 61, 32, 99,111, 46,120,121,122, 59, - 10, 9,118, 97,114,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,103,108, 95, 78,111,114,109, 97, -108, 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 78,111,114,109, 97,108, 41, 59, 10, 9,103,108, 95, 80,111,115,105,116,105, -111,110, 32, 61, 32,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 32, 42, 32, 99,111, 59, 10, 10, - 0}; - diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 76dacd4a10d..5500e6bf171 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -1858,9 +1858,52 @@ void test_shadowbuf(vec3 rco, sampler2DShadow shadowmap, mat4 shadowpersmat, flo //float bias = (1.5 - inp*inp)*shadowbias; co.z -= shadowbias*co.w; + + if (co.w > 0.0 && co.x > 0.0 && co.x/co.w < 1.0 && co.y > 0.0 && co.y/co.w < 1.0) + result = shadow2DProj(shadowmap, co).x; + else + result = 1.0; + } +} - result = shadow2DProj(shadowmap, co).x; +void test_shadowbuf_vsm(vec3 rco, sampler2D shadowmap, mat4 shadowpersmat, float shadowbias, float bleedbias, float inp, out float result) +{ + if(inp <= 0.0) { + result = 0.0; } + else { + vec4 co = shadowpersmat*vec4(rco, 1.0); + if (co.w > 0.0 && co.x > 0.0 && co.x/co.w < 1.0 && co.y > 0.0 && co.y/co.w < 1.0) { + vec2 moments = texture2DProj(shadowmap, co).rg; + float dist = co.z/co.w; + float p = 0.0; + + if(dist <= moments.x) + p = 1.0; + + float variance = moments.y - (moments.x*moments.x); + variance = max(variance, shadowbias/10.0); + + float d = moments.x - dist; + float p_max = variance / (variance + d*d); + + // Now reduce light-bleeding by removing the [0, x] tail and linearly rescaling (x, 1] + p_max = clamp((p_max-bleedbias)/(1.0-bleedbias), 0.0, 1.0); + + result = max(p, p_max); + } + else { + result = 1.0; + } + } +} + +void shade_light_texture(vec3 rco, sampler2D cookie, mat4 shadowpersmat, out vec4 result) +{ + + vec4 co = shadowpersmat*vec4(rco, 1.0); + + result = texture2DProj(cookie, co); } void shade_exposure_correct(vec3 col, float linfac, float logfac, out vec3 outcol) @@ -2087,7 +2130,7 @@ void node_tex_environment(vec3 co, sampler2D ima, out vec4 color) void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { color = texture2D(ima, co.xy); - alpha = color.a; + alpha = color.a; } void node_tex_magic(vec3 p, float scale, float distortion, out vec4 color, out float fac) diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl.c b/source/blender/gpu/shaders/gpu_shader_material.glsl.c new file mode 100644 index 00000000000..b8086ed9c0a --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl.c @@ -0,0 +1,1658 @@ +/* DataToC output of file <gpu_shader_material_glsl> */ + +int datatoc_gpu_shader_material_glsl_size = 52836; +char datatoc_gpu_shader_material_glsl[] = { + 13, 10,102,108, +111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 13, 10,123, 13, 10, 9,114,101, +116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32, +118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109, +105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 13, 10, 9,118,101, 99, 51, 32, 99, 59, 13, 10, + 13, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, + 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 13, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, + 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 13, 10, 9, 99,100,101,108,116, 97, 32, + 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 13, 10, 13, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 13, 10, 9,105,102, 32, + 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 13, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 13, + 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, + 13, 10, 9,125, 13, 10, 13, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,104, 32, 61, 32, + 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99, +109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108, +116, 97, 59, 13, 10, 13, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, + 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, + 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 13, 10, 9, 9,101, +108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 13, 10, 13, 10, 9, 9, +104, 32, 47, 61, 32, 54, 46, 48, 59, 13, 10, 13, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 13, 10, 9, 9, 9,104, 32, + 43, 61, 32, 49, 46, 48, 59, 13, 10, 9,125, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, + 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,104,115,118, 95,116,111, + 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, + 10,123, 13, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32, +118, 59, 13, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 13, 10, 13, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 13, 10, + 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 13, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 13, 10, 13, 10, 9,105, +102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32, +118, 41, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 13, 10, + 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, 9, 13, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 13, 10, 9, 9, +105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 13, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 13, 10, 9, 9,114, +103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 13, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, + 48, 45,115, 41, 59, 13, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 13, 10, 9, 9,116, + 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 13, 10, 9, 9, 13, 10, 9, 9,105, +102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, + 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, + 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, + 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 13, 10, 9, 9,101,108,115,101, 32, +105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, + 41, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118, +101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 13, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, + 40,118, 44, 32,112, 44, 32,113, 41, 59, 13, 10, 9,125, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, + 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,116, 32,115,114,103, 98, 95,116, +111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 13, 10,123, 13, 10, 9,105,102, 40, 99, 32, 60, + 32, 48, 46, 48, 52, 48, 52, 53, 41, 13, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, + 46, 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57, 50, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,114, +101,116,117,114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, + 41, 44, 32, 50, 46, 52, 41, 59, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,116, 32,108,105,110,101, 97,114,114,103, 98, 95,116, +111, 95,115,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 13, 10,123, 13, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, + 51, 49, 51, 48, 56, 41, 13, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, + 32, 99, 32, 42, 32, 49, 50, 46, 57, 50, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, + 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101, 99, 52, 32, + 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 13, 10,123, 13, 10, 9, + 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, + 95,102,114,111,109, 46,114, 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108, +105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46, 98, + 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, + 59, 13, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, + 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 13, 10,123, 13, 10, 9, 99,111,108, + 95,116,111, 46,114, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114, +111,109, 46,114, 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, + 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32, +108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 13, 10, + 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 13, 10,125, 13, 10, 13, 10, 35,100, +101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, + 54, 13, 10, 35,100,101,102,105,110,101, 32, 77, 95, 49, 95, 80, 73, 32, 48, 46, 51, 49, 56, 51, 48, 57, 56, 56, 54, 49, 56, 51, + 55, 57, 48, 54, 57, 13, 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, + 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,118, 99,111,108, + 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, + 52, 32,118, 99,111,108, 41, 13, 10,123, 13, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, + 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99, +111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,117,118, 95, + 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117, +118, 41, 13, 10,123, 13, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, + 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,103, +101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119, +105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, + 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, + 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32, +111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32, +118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,118, 99,111,108, 95, 97,108,112,104, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110, +116, 98, 97, 99,107, 41, 13, 10,123, 13, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59, 13, 10, 9,118,105,101,119, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 13, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118, +105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, + 13, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 13, 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116, +101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 13, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108, +105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, + 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 13, 10, 9,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116, +101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 13, 10, 9,118, 99,111,108, 95, 97,108,112,104, 97, 32, 61, + 32, 97,116,116,118, 99,111,108, 46, 97, 59, 13, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32, 61, 32, 49, 46, 48, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,109, 97,116, 52, + 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,118,101, 99, 44, 32, +102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,117,116, 32,118,101, + 99, 51, 32,111,117,116,118,101, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116, 32, 42, 32, +118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 13, 10, 9,105,102, 40,100,111,109,105,110, 32, + 61, 61, 32, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44, 32, +109,105,110,118,101, 99, 41, 59, 13, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 13, 10, 9, 9,111, +117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 13, 10,125, 13, + 10, 13, 10,118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, + 32,111,117,116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 13, 10,123, 13, 10, 9,111,117,116,100,101,112,116,104, 32, 61, + 32, 97, 98,115, 40, 99,111, 46,122, 41, 59, 13, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99, +111, 41, 59, 13, 10, 9,111,117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102, +108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, + 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 13, 10,125, 13, 10, 13, 10,118,111, +105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, + 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9, +111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,108, 50, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, + 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117, +116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, + 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, + 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 32, 40,118, 97, +108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108, +115,101, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40, +118, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, + 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111, +117,116,118, 97,108, 32, 61, 32, 99,111,115, 40,118, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116, +104, 95,116, 97,110,103,101,110,116, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, +117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, + 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, + 32, 97,115,105,110, 40,118, 97,108, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, + 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,108,111, 97,116, 32,118, + 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 32, 40,118, + 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116, +118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,118, 97, +108, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108, +111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9, +111,117,116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, + 97,116,104, 95,112,111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, + 62, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97, +108, 50, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, + 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95,108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, + 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9, +105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 13, 10, 9, + 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, + 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,118, 97,108, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, + 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, + 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, + 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97, +116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117, +116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, + 46, 53, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102, +108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, + 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 13, 10, 9, + 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,118, 97,108, 32, + 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116, +104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, + 50, 41, 13, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117, +116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,113,117,101,101,122,101, 40,102, +108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104, 44, 32,102,108,111, 97,116, 32, 99,101,110, +116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, + 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, + 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, + 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117, +116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 13, 10, 9,111, +117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117, +116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44, + 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32, +118, 50, 59, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, + 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, + 41, 47, 51, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97, +103,101, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117, +116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116, +118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, + 40,111,117,116,118,101, 99, 41, 59, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111, +117,116,118,101, 99, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40, +118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, + 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, + 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48, 41, 59, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, + 40,118, 49, 44, 32,118, 50, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114, +111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, +117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117, +116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59, 13, 10, 9,111,117,116,118, 97,108, 32, 61, + 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95, +109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111, +117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111, +114,109, 97,108,105,122,101, 40,118, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, +110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 13, 10,123, + 13, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40, +118,101, 99, 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, +110,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 13, 10,123, 13, 10, 9,111,117,116,110, +111,114, 32, 61, 32,110,111,114, 59, 13, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110, +111,114, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, + 32,102, 97, 99, 44, 32,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, + 97,112, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, + 46,120, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118, +101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 13, 10, 9,111,117,116,118, +101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, + 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,121, 59, 13, 10, 9,111,117, +116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, + 50, 40, 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,122, 59, 13, 10, 13, + 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111, +117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, 99, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 13, 10, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, + 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111, +117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, +116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, + 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46,114, 44, 32, 48, 46, 48, 41, 41, 46, 97, + 44, 32, 48, 46, 48, 41, 41, 46,114, 59, 13, 10, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 50, + 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101, +109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46,103, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46, +103, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, + 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, + 50, 40, 99,111,108, 46, 98, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46, 98, 59, 13, 10, 13, 10, 9,105, +102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, 40,111,117,116, 99, +111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 13, 10, 13, 10, 9,111, +117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,101,116, 95, +118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, +108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,115,101,116, 95,114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99, +111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105, +100, 32,115,101,116, 95,114,103, 98, 97, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117, +116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,122,101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111, +105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, +108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 97,108, 41, 13, 10, +123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111, +105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,117,116,118, 97,108, + 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, + 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, + 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, + 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, + 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,109,105,120, 95, 97,100,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, + 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, + 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, + 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, + 32,102, 97, 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, + 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, + 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, + 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99, +111,108, 50, 44, 32,102, 97, 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,102, 97, 99, 44, + 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32, +111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, + 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, + 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, + 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 50, 41, + 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, + 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,108, 97, +121, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, + 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99, +108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99, +109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, + 59, 13, 10, 13, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 13, 10, 9, 9,111,117,116, 99, +111,108, 46,114, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 13, 10, + 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, + 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, + 32,111,117,116, 99,111,108, 46,114, 41, 59, 13, 10, 13, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, + 53, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, + 42, 99,111,108, 50, 46,103, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, + 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, +103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 59, 13, 10, 13, 10, 9,105,102, 40,111,117,116, + 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, + 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, + 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, + 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, + 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, + 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, + 49, 46, 48, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, + 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, + 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,102, 97, 99, 44, + 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32, +111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, + 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, + 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, 10, 13, 10, 9,105,102, 40, 99,111,108, + 50, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99, +111,108, 46,114, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 13, 10, 9,105,102, + 40, 99,111,108, 50, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42, +111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 13, + 10, 9,105,102, 40, 99,111,108, 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, + 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, + 46, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, + 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, + 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, + 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, + 97, 98,115, 40, 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 41, 44, 32,102, 97, 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, + 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, + 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, + 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, + 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, + 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 13, + 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32, +109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32, +118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, + 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,111, +117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, 46,114, +103, 98, 42,102, 97, 99, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, + 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, + 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, + 49, 46, 48, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, 10, 13, 10, 9,105,102, 40,111,117, +116, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, + 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 13, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, + 46, 48, 41, 13, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 32, +105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 13, 10, + 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 13, 10, 9, 9, 9,111, +117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 13, 10, 9,125, 13, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, + 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32, +102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 13, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 13, 10, 9, + 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109, +112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 13, 10, 9, 9, 9,111,117,116, + 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 13, 10, 9, 9, 9,111,117,116, 99,111,108, 46, +103, 32, 61, 32,116,109,112, 59, 13, 10, 9,125, 13, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, + 48, 41, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111, +108, 50, 46, 98, 59, 13, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9, 9,111,117,116, 99, +111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117, +116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 13, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, + 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 13, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109, +112, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,116, + 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32, +118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, + 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, + 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, + 10, 13, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 13, 10, 9,105, +102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, + 13, 10, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32, +111,117,116, 99,111,108, 46,114, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, + 46,114, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 13, 10, + 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99, +111,108, 46,114, 32, 61, 32,116,109,112, 59, 13, 10, 13, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, + 42, 99,111,108, 50, 46,103, 59, 13, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, + 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, + 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, + 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40, +116,109,112, 32, 62, 32, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, +101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 13, 10, 13, 10, 9,116,109,112, 32, + 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 13, 10, 9,105,102, 40,116,109,112, 32, 60, 61, + 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108,115,101, 32, +105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, + 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, + 59, 13, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, + 46, 98, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116, +109,112, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, + 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, + 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, + 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, + 97, 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, 10, 13, 10, 9,118,101, 99, 52, 32, +104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 13, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, + 50, 44, 32,104,115,118, 50, 41, 59, 13, 10, 13, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32, +123, 13, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 13, 10, 9, + 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 13, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104, +115,118, 44, 32,116,109,112, 41, 59, 32, 13, 10, 13, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, + 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111, +108, 49, 46, 97, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,115, 97,116, 40,102,108,111, + 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117, +116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, +102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, + 46, 48, 32, 45, 32,102, 97, 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, 10, 13, 10, + 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 13, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117, +116, 99,111,108, 44, 32,104,115,118, 41, 59, 13, 10, 13, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, + 32,123, 13, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 13, 10, 13, + 10, 9, 9,104,115,118, 46,121, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, + 46,121, 59, 13, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 13, + 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, + 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, + 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, + 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, + 97, 99, 59, 13, 10, 13, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 13, 10, 9,114,103, 98, 95,116,111, + 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 13, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111, +108, 50, 44, 32,104,115,118, 50, 41, 59, 13, 10, 13, 10, 9,104,115,118, 46,122, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46, +122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 13, 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, + 44, 32,111,117,116, 99,111,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95, 99,111,108,111,114, 40, +102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, + 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97, +109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, + 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 13, + 10, 13, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 13, 10, 9,114,103, 98, 95,116, +111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 13, 10, 13, 10, 9,105,102, 40,104,115,118, 50, 46,121, + 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, + 32,104,115,118, 41, 59, 13, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 13, 10, 9, 9,104,115,118, + 46,121, 32, 61, 32,104,115,118, 50, 46,121, 59, 13, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32, +116,109,112, 41, 59, 32, 13, 10, 13, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, + 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, + 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,115,111,102,116, 40,102,108,111, 97,116, 32, +102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118, +101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, + 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, + 45, 32,102, 97, 99, 59, 13, 10, 13, 10, 9,118,101, 99, 52, 32,111,110,101, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, + 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,111,110,101, 32, 45, 32, 99,111,108, 50, 41, 42, 40, +111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,102, 97, 99,109, 42, 99,111,108, + 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 42, 99,111,108, 50, 42, 99,111,108, 49, 32, + 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,105,120, 95,108,105,110,101, + 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111, +108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,102, 97, 99, 32, 61, 32, + 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, + 32, 61, 32, 99,111,108, 49, 59, 13, 10, 13, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41, 13, 10, 9, + 9,111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111, +108, 50, 46,114, 32, 45, 32, 48, 46, 53, 41, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46,114, + 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49, + 46, 48, 41, 59, 13, 10, 13, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 13, 10, 9, 9,111,117,116, + 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, + 32, 45, 32, 48, 46, 53, 41, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111, +108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, + 13, 10, 13, 10, 9,105,102, 40, 99,111,108, 50, 46, 98, 32, 62, 32, 48, 46, 53, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 46, + 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, + 46, 53, 41, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, + 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, + 10, 13, 10,118,111,105,100, 32,118, 97,108,116,111,114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112, +108,101,114, 50, 68, 32, 99,111,108,111,114,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, 97,108,112,104, 97, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, + 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,111,108,111,114,109, 97,112, 44, 32,118,101, 99, 50, 40,102, 97, 99, 44, + 32, 48, 46, 48, 41, 41, 59, 13, 10, 9,111,117,116, 97,108,112,104, 97, 32, 61, 32,111,117,116, 99,111,108, 46, 97, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, + 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 52, 53, 32, 43, 32, 99,111, +108,111,114, 46, 98, 42, 48, 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101,115,101, 32,102, 97, 99,116,111,114,115, + 32,105,110, 32,115,121,110, 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46,104, 58, 82, 71, 66, 84, 79, 66, 87, 32, + 42, 47, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32, +118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9, +111,117,116, 99,111,108, 46,120,121,122, 32, 61, 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118,101, 99, 51, 40, 49, + 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, 59, 13, 10, + 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,104,117, +101, 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44, 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, 97, +116, 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117, +116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,118,101, 99, 52, 32,104,115,118, 59, 13, 10, 13, + 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,118, 41, 59, 13, 10, 13, 10, 9,104,115,118, 91, + 48, 93, 32, 43, 61, 32, 40,104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 13, 10, 9,105,102, 40,104,115,118, 91, 48, 93, 62, 49, + 46, 48, 41, 32,104,115,118, 91, 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 48, 93, 60, + 48, 46, 48, 41, 32,104,115,118, 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 13, 10, 9,104,115,118, 91, 49, 93, 32, 42, 61, 32,115, + 97,116, 59, 13, 10, 9,105,102, 40,104,115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49, 46, 48, + 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 48, 46, + 48, 59, 13, 10, 9,104,115,118, 91, 50, 93, 32, 42, 61, 32,118, 97,108,117,101, 59, 13, 10, 9,105,102, 40,104,115,118, 91, 50, + 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, + 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 48, 46, 48, 59, 13, 10, 13, 10, 9,104,115,118, 95,116,111, 95, +114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 13, 10, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109, +105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, 44, 32,102, 97, 99, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,115,101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 98, 41, 13, 10, +123, 13, 10, 9,114, 32, 61, 32, 99,111,108, 46,114, 59, 13, 10, 9,103, 32, 61, 32, 99,111,108, 46,103, 59, 13, 10, 9, 98, 32, + 61, 32, 99,111,108, 46, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32, 99,111,109, 98,105,110,101, 95,114,103, 98, 40, +102,108,111, 97,116, 32,114, 44, 32,102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, 32,111,117,116, 32,118, +101, 99, 52, 32, 99,111,108, 41, 13, 10,123, 13, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32,103, 44, 32, 98, + 44, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100,101, 40,118, +101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111, +117,116,114,103, 98, 41, 13, 10,123, 13, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, + 98, 44, 32, 97,108,112,104, 97, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, + 88, 84, 85, 82, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 13, 10, 13, 10,118,111,105,100, 32, +116,101,120,116,117,114,101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, + 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 46, +121,120,122, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,108,105, +110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, + 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59, 13, 10,125, 13, + 10, 13, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51, 32, +118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,118, + 97,108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 13, + 10, 9,111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116, +101,120,116,117,114,101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,110,111,114,109, 97,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32, 97, 32, 61, 32,115,113,114,116, 40, +118,101, 99, 46,120, 42,118,101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46,121, 32, 43, 32,118,101, 99, 46, +122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46, 48, 59, 13, 10, 9,102,108,111, 97,116, 32,119,105, 32, 61, 32, 48, 46, 53, 32, + 43, 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59, 13, 10, 13, 10, 9,118, 97,108,117,101, 32, 61, 32,119,105, 59, 13, 10, 9, + 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, 41, 59, 13, 10, + 9,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, + 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, + 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97, +108, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40, +118,101, 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 13, 10, + 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 13, 10, 13, 10, 9,110,111,114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, + 42, 40, 99,111,108,111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 13, 10, 9,110,111,114,109, 97,108, 46,121, 32, 61, 32, 50, + 46, 48, 42, 40, 48, 46, 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 13, 10, 9,110,111,114,109, 97,108, 46,122, 32, 61, + 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 47, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32, 97,116,116,111,114, + 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 41, 13, 10,123, 13, 10, 9,111,114, 99,111, 32, 61, 32, 97, +116,116,111,114, 99,111, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50, + 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 13, 10,123, 13, 10, 9, 47, 42, 32,100,105,115, + 97, 98,108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111,114,107,115, 32,116,111,103,101,116,104,101,114, 32,119,105, +116,104, 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 13, 10, + 9, 32, 32, 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, + 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 13, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97, +116,116,117,118, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,110,111,114, +109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97, +108, 41, 13, 10,123, 13, 10, 9, 47, 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116,111, 32,115,104,105, 45, 62,111, +114,110, 44, 32,119,104,105, 99,104, 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, 99, 97,110, 99,101,108,115, 13, + 10, 9, 32, 32, 32,111,117,116, 32, 98,108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110,101,103, 97,116,105,111,110, + 32, 42, 47, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, + 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, 40,118,101, + 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101,110,116, 41, + 13, 10,123, 13, 10, 9,111,117,116,116, 97,110,103,101,110,116, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97,110, +103,101,110,116, 46,120,121,122, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,103,108,111, 98, + 97,108, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, + 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 41, 13, 10,123, 13, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101, +119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118, +109, 97,116, 44, 32,109, 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, + 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 41, 13, 10,123, 13, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105, +110,118,109, 97,116, 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, + 41, 46,120,121,122, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, + 51, 32,118,110, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 13, 10, +123, 13, 10, 9,114,101,102, 32, 61, 32,118,105,101,119, 32, 45, 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101, +119, 41, 42,118,110, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, + 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 13, 10,123, + 13, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110, +101,103, 97,116,101,100, 32, 42, 47, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105, +122,101, 40,110,111,114,109, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, + 98,108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32, +102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, + 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 13, 10, 9,102, 97, 99, +116, 32, 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 13, 10, 13, + 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, + 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,108, 40,118,101, 99, + 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10, +123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, + 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 13, 10, 13, 10, 9,105,110, 99,111,108, 32, 61, + 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117, +116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102, +108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9, +102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9, +102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 13, 10, 13, 10, 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, + 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 51, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, + 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111, +117,116, 99,111,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,111,118,101,114, +108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108, +111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105, +110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, + 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 13, 10, 13, 10, 9, +105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 13, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, +111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, + 46,114, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, +102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,114, 41, + 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 13, 10, 13, 10, 9,105,102, 40,111,117,116, 99,111, +108, 46,103, 32, 60, 32, 48, 46, 53, 41, 13, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, + 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59, 13, 10, 9,101, +108,115,101, 13, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, + 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, + 32,111,117,116, 99,111,108, 46,103, 41, 59, 13, 10, 13, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, + 53, 41, 13, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, + 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,105, +110, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, + 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, + 98, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, + 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, + 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10,123, + 13, 10, 9,105,110, 99,111,108, 32, 61, 32, 45,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111, +117,116, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118, +101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, + 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, + 13, 10,123, 13, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, + 32,111,117,116, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,118, + 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, + 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111, +108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32, +102, 97, 99,103, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 13, 10, 13, 10, 9,105,102, 40, +116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42, +111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,114, 47,116,101,120, 99,111,108, 46, +114, 59, 13, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,103, + 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,103, + 47,116,101,120, 99,111,108, 46,103, 59, 13, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, + 32,105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99,116, 42, +111,117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116, +101,120, 95,114,103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, +120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, +116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, + 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, + 99,116, 59, 13, 10, 13, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, + 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100, 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118, +101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, + 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, + 97, 99,109, 44, 32, 99,111,108, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9,102, 97, + 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 13, 10, 13, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101, +120, 99,111,108, 46,114, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99, +111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111, +108, 46,114, 59, 13, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 13, 10, 9,105,102, + 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32, +101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 13, 10, 9, 99,111,108, 32, 61, + 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111, +108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, + 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, + 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, + 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, + 51, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 13, 10, + 13, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, + 99,116, 59, 13, 10, 13, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 13, 10, 9,105, +102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, + 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 13, 10, 9, 99,111,108, 32, + 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99, +111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, +103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 13, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111, +108, 46, 98, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, + 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,111, +117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, +102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, + 9,118,101, 99, 52, 32, 99,111,108, 59, 13, 10, 13, 10, 9,109,105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, + 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, + 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 13, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46, +114,103, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, + 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 13, 10, +123, 13, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 13, 10, 13, 10, 9,109,105,120, 95,115, 97,116, 40,102, 97, 99,116, 42,102, + 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, + 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 13, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99, +111,108, 46,114,103, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,118, 97,108, 40, +118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32, +102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, + 41, 13, 10,123, 13, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 13, 10, 13, 10, 9,109,105,120, 95,118, 97,108, 40,102, 97, 99, +116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40, +116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 13, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, + 61, 32, 99,111,108, 46,114,103, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 99, +111,108,111,114, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102, +108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 13, 10, 13, 10, 9,109,105,120, 95, 99,111, +108,111,114, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, + 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 13, 10, 9,105,110, 99, +111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101, +120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102, +108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 41, 13, 10,123, 13, 10, 9, +102, 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40,102, 97, 99,103, 41, 59, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45, +102, 97, 99,116, 59, 13, 10, 13, 10, 9,105,102, 40,102, 97, 99,103, 32, 60, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,102,108, +111, 97,116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 13, 10, 9, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 13, + 10, 9, 9,102, 97, 99,109, 32, 61, 32,116,109,112, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116, +101,120, 95,118, 97,108,117,101, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, + 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, + 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99, +103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111, +108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, + 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116, +101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, + 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, + 97, 99,109, 41, 59, 13, 10, 13, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 13, 10, 9,105, +110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99, +111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115, 99,114,101,101,110, + 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, + 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105, +110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97, +108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9, +102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 13, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, + 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, + 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, +118, 97,108,117,101, 95,115,117, 98, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101, +120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, + 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, + 99,109, 41, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 13, 10, 9,105,110, 99,111,108, 32, 61, + 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105, +100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102, +108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, + 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, + 32,102, 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, + 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,116, 59, 13, 10, 9,105, +110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 13, 10,125, 13, + 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111, 97,116, 32,111,117,116, + 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102, +108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, + 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, + 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, + 33, 61, 32, 48, 46, 48, 41, 13, 10, 9, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, + 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 47,116,101,120, 99,111,108, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,105, +110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117, +101, 95,100,105,102,102, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111, +108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 9,109, +116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, + 59, 13, 10, 13, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, + 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105, +100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32, +102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32, +102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, 10,123, 13, 10, 9,102,108,111, 97, +116, 32,102, 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32, +102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99, +116, 42,116,101,120, 99,111,108, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32,105,110, 99, +111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, 97,116, + 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 13, + 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 13, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97, +114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 13, 10, 13, 10, 9,102,108,111, 97,116, 32, + 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 13, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117, +116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32, +111,117,116, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, + 97,109,112, 95,112,111,115,105,116,105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,111,117,116,102, 97, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 97, 99, 44, + 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97, +109,112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 13, + 10,123, 13, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, + 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,100,105,118,105,100,101, 40,102, +108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 13, 10,123, 13, 10, + 9,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32, +109,116,101,120, 95,104, 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,104, 97, +114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 13, 10,123, 13, 10, 9,104, 97,114, 32, 42, 61, + 32, 49, 50, 56, 46, 48, 59, 13, 10, 13, 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117,116,104, 97,114, + 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, 41, 32,111, +117,116,104, 97,114, 32, 61, 32, 53, 49, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, 32,104, + 97,114, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, 99, +111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 13, 10,123, + 13, 10, 9, 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101, +120, 95, 97,108,112,104, 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32, 97, +108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99, +111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 41, 13, 10,123, 13, 10, 9,105,110,116,101,110,115,105,116, +121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114, +103, 98, 46,114,103, 98, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,105, +110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110,118, 97,108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, +117,116,118, 97,108,117,101, 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105, +110,118, 97,108,117,101, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,105,110,118,101, +114,116, 40,118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 13, + 10,123, 13, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,105, +110,114,103, 98, 46,114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, +116,101,120, 95,118, 97,108,117,101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, + 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115, +116,101,110, 99,105,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116,101,110,115,105,116,121, 41, 13, + 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, 13, 10, 9,111, +117,116,105,110,116,101,110,115,105,116,121, 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101,110, 99,105,108, 59, + 13, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32, +115,116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 13, 10,123, 13, 10, 9,102, +108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97, 59, 13, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, + 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,115,116,101,110, 99,105,108, 41, 59, 13, 10, 9,111,117, +116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, + 32,118,101, 99, 51, 32,111,102,115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 13, 10,123, + 13, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,115, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99, 51, 32,116,101,120, + 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, + 41, 13, 10,123, 13, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, + 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,118,101, 99, 32, + 61, 32,118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, + 53, 41, 44, 32,118,101, 99, 46,122, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,105,109, 97,103, +101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, + 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 13, 10,123, + 13, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46, +120,121, 41, 59, 13, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, +116,101,120, 95,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, + 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 13, 10,123, 13, 10, 9, 47, 47, 32, 84, +104,101, 32,105,110,118,101,114,116, 32,111,102, 32,116,104,101, 32,114,101,100, 32, 99,104, 97,110,110,101,108, 32,105,115, 32, +116,111, 32,109, 97,107,101, 13, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,109, 97,112, 32, 99,111,109,112, +108,105, 97,110,116, 32,119,105,116,104, 32,116,104,101, 32,111,117,116,115,105,100,101, 32,119,111,114,108,100, 46, 13, 10, 9, + 47, 47, 32, 73,116, 32,110,101,101,100,115, 32,116,111, 32, 98,101, 32,100,111,110,101, 32, 98,101, 99, 97,117,115,101, 32,105, +110, 32, 66,108,101,110,100,101,114, 13, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,117,115,101,100, 32,112, +111,105,110,116,115, 32,105,110,119, 97,114,100, 46, 13, 10, 9, 47, 47, 32, 83,104,111,117,108,100, 32,116,104,105,115, 32,101, +118,101,114, 32, 99,104, 97,110,103,101, 32,116,104,105,115, 32,110,101,103, 97,116,101, 32,109,117,115,116, 32, 98,101, 32,114, +101,109,111,118,101,100, 46, 13, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114, +101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 13, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 50, + 46, 48, 42, 40,118,101, 99, 51, 40, 45, 99,111,108,111,114, 46,114, 44, 32, 99,111,108,111,114, 46,103, 44, 32, 99,111,108,111, +114, 46, 98, 41, 32, 45, 32,118,101, 99, 51, 40, 45, 48, 46, 53, 44, 32, 48, 46, 53, 44, 32, 48, 46, 53, 41, 41, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,115, 95,105,110,105,116, 40, + 32,118,101, 99, 51, 32,118, 78, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44, 32,111,117,116, 32,118,101, + 99, 51, 32,118, 78, 97, 99, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117, +100,101, 32, 41, 13, 10,123, 13, 10, 9,118, 78,111,114,103, 32, 61, 32,118, 78, 59, 13, 10, 9,118, 78, 97, 99, 99, 32, 61, 32, +118, 78, 59, 13, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, + 13, 10, 47, 42, 42, 32,104,101,108,112,101,114, 32,109,101,116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116, +104,101, 32,117,112,112,101,114, 32,108,101,102,116, 32, 51,120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32, + 52,120, 52, 32,109, 97,116,114,105,120, 32, 42, 47, 13, 10,109, 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, + 32,109, 52, 41, 13, 10,123, 13, 10, 9,109, 97,116, 51, 32,109, 51, 59, 13, 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, + 48, 93, 46,120,121,122, 59, 13, 10, 9,109, 51, 91, 49, 93, 32, 61, 32,109, 52, 91, 49, 93, 46,120,121,122, 59, 13, 10, 9,109, + 51, 91, 50, 93, 32, 61, 32,109, 52, 91, 50, 93, 46,120,121,122, 59, 13, 10, 9,114,101,116,117,114,110, 32,109, 51, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,111, 98,106,115,112, 97, 99, +101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, + 44, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,109, 97,116, 52, 32,109, 86,105,101,119, 44, 32,109, 97,116, 52, 32,109, 86,105, +101,119, 73,110,118, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 73,110,118, 44, 32, + 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95, +105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, + 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, + 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, +102, 68,101,116, 32, 41, 32, 13, 10,123, 13, 10, 9,109, 97,116, 51, 32,111, 98,106, 50,118,105,101,119, 32, 61, 32,116,111, 95, +109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 41, 59, 13, 10, 9,109, 97,116, 51, + 32,118,105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, + 77, 97,116,114,105,120, 73,110,118,101,114,115,101, 41, 59, 13, 10, 9, 13, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, + 83, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, + 13, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100, +121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 13, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97, +108,105,122,101, 40, 32,115,117,114,102, 95,110,111,114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 13, 10, 13, + 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 13, 10, 9, +118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 13, 10, 9,102, + 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 13, 10, 9, 13, 10, + 9, 47, 42, 32,112,114,101,116,114, 97,110,115,102,111,114,109, 32,118, 78, 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, + 98,117,109,112, 95, 97,112,112,108,121, 41, 32,117,115,105,110,103, 32,116,104,101, 32,105,110,118,101,114,115,101, 32,116,114, + 97,110,115,112,111,115,101,100, 32, 42, 47, 13, 10, 9,118, 82, 49, 32, 61, 32,118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, + 98,106, 59, 13, 10, 9,118, 82, 50, 32, 61, 32,118, 82, 50, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 13, 10, 9,118, 78, + 32, 61, 32,118, 78, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 13, 10, 9, 13, 10, 9,102,108,111, 97,116, 32,102, 77, 97, +103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 32, 42, 32,108,101,110,103,116,104, 40,118, 78, 41, + 59, 13, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103, +110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 13, 10, 9,102, + 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,116,101,120,116,117,114, +101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, + 95,110,111,114,109, 44, 32, 13, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97, +103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 13, 10, 9, 9, 9, 9, + 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111, +117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 13, 10, 9, 9, 9, 9, 9, 9, + 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32,118, 83,105,103, +109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 13, 10, 9,118,101, 99, 51, 32,118, + 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 13, 10, 9,118,101, 99, + 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108,105,122,101,100, 32, +105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, 42, 47, 13, 10, 9, + 13, 10, 9,118, 82, 49, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, + 97, 84, 44, 32,118, 78, 32, 41, 32, 41, 59, 13, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99, +114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 13, 10, 9,102, 68,101,116, 32, 61, 32, +115,105,103,110, 40, 32,100,111,116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 13, 10, 9, 13, 10, 9, +102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 13, 10, 9, +118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117, +100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 13, 10, 9,102, 80,114,101,118, + 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, + 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, + 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, + 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111, +117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, + 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, + 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,102, 68,101,116, 32, 41, 32, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, + 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 13, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, + 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 13, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32, +115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,114,112,111, +108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, 42, 47, 13, 10, 9, 13, 10, 9,118, 82, 49, 32, + 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 13, 10, 9,118, 82, 50, 32, 61, 32, + 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 13, 10, 9,102, 68,101,116, 32, 61, 32, +100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 13, 10, 9, 13, 10, 9,102,108,111, 97,116, + 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 13, 10, 9,118, 78, 97, 99, 99, + 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32, +102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 13, 10, 9,102, 80,114,101,118, 77, 97,103,110,105, +116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 13, 10,125, 13, 10, 13, 10,118,111,105, +100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97, +109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 13, 10,123, 13, 10, 9,118,101, 99, 50, 32, 83, 84,108,108, + 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61, 32,116,101,120, 99,111, + 46,120,121, 32, 43, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84, +117,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, + 13, 10, 9, 13, 10, 9,102,108,111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 13, 10, 9,114,103, 98,116,111, + 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32, 41, 59, + 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114, 41, + 44, 32, 72,108,114, 32, 41, 59, 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, + 97, 44, 32, 83, 84,117,108, 41, 44, 32, 72,117,108, 32, 41, 59, 13, 10, 9, 13, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97, +108,101, 32, 42, 32, 40, 72,108,114, 32, 45, 32, 72,108,108, 41, 59, 13, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, + 32, 42, 32, 40, 72,117,108, 32, 45, 32, 72,108,108, 41, 59, 13, 10,125, 13, 10, 13, 10, 35,105,102,100,101,102, 32, 66, 85, 77, + 80, 95, 66, 73, 67, 85, 66, 73, 67, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 98,105, 99,117, + 98,105, 99, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32, +102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66, +116, 32, 41, 32, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32, 72,108, 59, 13, 10, 9,102,108,111, 97,116, 32, 72,114, 59, 13, + 10, 9,102,108,111, 97,116, 32, 72,100, 59, 13, 10, 9,102,108,111, 97,116, 32, 72,117, 59, 13, 10, 9, 13, 10, 9,118,101, 99, + 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 13, 10, 9,118,101, 99, 50, + 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 13, 10, 32, 13, 10, 9,118,101, + 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, + 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, + 84,101,120, 68,120, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, + 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, + 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 13, 10, 9, 13, 10, 9,114,103, 98,116,111, 98,119, + 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 41, 59, 13, 10, 9,114,103, 98, +116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72,114, 41, 59, 13, 10, + 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, + 41, 59, 13, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, + 44, 32, 72,117, 41, 59, 13, 10, 9, 13, 10, 9,118,101, 99, 50, 32,100, 72,100,120,121, 32, 61, 32,118,101, 99, 50, 40, 72,114, + 32, 45, 32, 72,108, 44, 32, 72,117, 32, 45, 32, 72,100, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,102, 66,108,101,110,100, 32, + 61, 32, 99,108, 97,109,112, 40, 49, 46, 48, 45,116,101,120,116,117,114,101, 81,117,101,114,121, 76, 79, 68, 40,105,109, 97, 44, + 32,116,101,120, 99,111, 46,120,121, 41, 46,120, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,105,102, 40,102, 66, +108,101,110,100, 33, 61, 48, 46, 48, 41, 13, 10, 9,123, 13, 10, 9, 9, 47, 47, 32,116,104,101, 32,100,101,114,105,118, 97,116, +105,118,101, 32,111,102, 32,116,104,101, 32, 98,105, 99,117, 98,105, 99, 32,115, 97,109,112,108,105,110,103, 32,111,102, 32,108, +101,118,101,108, 32, 48, 13, 10, 9, 9,105,118,101, 99, 50, 32,118, 68,105,109, 59, 13, 10, 9, 9,118, 68,105,109, 32, 61, 32, +116,101,120,116,117,114,101, 83,105,122,101, 40,105,109, 97, 44, 32, 48, 41, 59, 13, 10, 13, 10, 9, 9, 47, 47, 32,116, 97,107, +105,110,103, 32,116,104,101, 32,102,114, 97, 99,116, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,116,101,120,116,117,114, +101, 32, 99,111,111,114,100,105,110, 97,116,101, 32,105,115, 32, 97, 32,104, 97,114,100, 99,111,100,101,100, 32,119,114, 97,112, + 32,109,111,100,101, 46, 13, 10, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32, 97, 99, 99,101,112,116, 97, 98,108,101, 32, + 97,115, 32,116,101,120,116,117,114,101,115, 32,117,115,101, 32,119,114, 97,112, 32,109,111,100,101, 32,101,120, 99,108,117,115, +105,118,101,108,121, 32,105,110, 32, 51, 68, 32,118,105,101,119, 32,101,108,115,101,119,104,101,114,101, 32,105,110, 32, 98,108, +101,110,100,101,114, 46, 32, 13, 10, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,100,111,110,101, 32,115,111, 32,116,104, + 97,116, 32,119,101, 32, 99, 97,110, 32,115,116,105,108,108, 32,103,101,116, 32, 97, 32,118, 97,108,105,100, 32,116,101,120,101, +108, 32,119,105,116,104, 32,117,118,115, 32,111,117,116,115,105,100,101, 32,116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, + 13, 10, 9, 9, 47, 47, 32, 98,121, 32,116,101,120,101,108, 70,101,116, 99,104, 32, 98,101,108,111,119, 44, 32, 97,115, 32, 99, +111,111,114,100,105,110, 97,116,101,115, 32, 97,114,101, 32, 99,108, 97,109,112,101,100, 32,119,104,101,110, 32,117,115,105,110, +103, 32,116,104,105,115, 32,102,117,110, 99,116,105,111,110, 46, 13, 10, 9, 9,118,101, 99, 50, 32,102, 84,101,120, 76,111, 99, + 32, 61, 32,118, 68,105,109, 42,102,114, 97, 99,116, 40,116,101,120, 99,111, 46,120,121, 41, 32, 45, 32,118,101, 99, 50, 40, 48, + 46, 53, 44, 32, 48, 46, 53, 41, 59, 13, 10, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 32, 61, 32,105,118,101, + 99, 50, 40,102,108,111,111,114, 40,102, 84,101,120, 76,111, 99, 41, 41, 59, 13, 10, 9, 9,118,101, 99, 50, 32,116, 32, 61, 32, + 99,108, 97,109,112, 40,102, 84,101,120, 76,111, 99, 32, 45, 32,105, 84,101,120, 76,111, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, + 48, 41, 59, 9, 9, 47, 47, 32,115, 97,116, 32,106,117,115,116, 32,116,111, 32, 98,101, 32,112,101,100, 97,110,116,105, 99, 13, + 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 13, + 10, 32, 42, 32, 84,104,105,115, 32, 98,108,111, 99,107, 32,119,105,108,108, 32,114,101,112,108, 97, 99,101, 32,116,104,101, 32, +111,110,101, 32, 98,101,108,111,119, 32,119,104,101,110, 32,111,110,101, 32, 99,104, 97,110,110,101,108, 32,116,101,120,116,117, +114,101,115, 32, 97,114,101, 32,112,114,111,112,101,114,108,121, 32,115,117,112,112,111,114,116,101,100, 46, 32, 42, 13, 10, 32, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 13, 10, 9, 9,118, +101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 76, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105, +109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 45, 49, 44, 45, 49, 41, 32, 43, 32,118,101, 99, 50, + 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 13, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112, +108,101,115, 85, 82, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, + 76,111, 99, 43,105,118,101, 99, 50, 40, 49, 44, 45, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, + 47,118, 68,105,109, 32, 41, 59, 13, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 76, 76, 32, 61, 32,116,101, +120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, + 45, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 13, 10, + 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 76, 82, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101, +114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 49, 44, 49, 41, 32, 43, 32,118,101, 99, + 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 13, 10, 13, 10, 9, 9,109, 97,116, 52, 32, 72, 32, + 61, 32,109, 97,116, 52, 40,118, 83, 97,109,112,108,101,115, 85, 76, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 85, 76, 46, +120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,120, 44, 13, 10, + 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 76, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 85, 76, 46,121, 44, + 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,121, 44, 13, 10, 9, 9, + 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 85, 82, 46,120, 44, 32,118, + 83, 97,109,112,108,101,115, 76, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,120, 44, 13, 10, 9, 9, 9, 9, + 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 85, 82, 46,121, 44, 32,118, 83, 97, +109,112,108,101,115, 76, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,121, 41, 59, 13, 10, 42, 47, 9, 13, 10, + 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 61, 32,105, 84,101,120, 76,111, 99, 32, 43, 32,105, +118,101, 99, 50, 40, 45, 49, 44, 32, 45, 49, 41, 59, 13, 10, 13, 10, 9, 9,109, 97,116, 52, 32, 72, 59, 13, 10, 9, 9, 13, 10, + 9, 9,102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 52, 59, 32,105, 43, 43, 41,123, 13, 10, 9, + 9, 9,102,111,114, 40,105,110,116, 32,106, 32, 61, 32, 48, 59, 32,106, 32, 60, 32, 52, 59, 32,106, 43, 43, 41,123, 13, 10, 9, + 9, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 84,109,112, 32, 61, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 43, 32, +105,118,101, 99, 50, 40,105, 44,106, 41, 59, 13, 10, 9, 9, 9, 9, 13, 10, 9, 9, 9, 9, 47, 47, 32,119,114, 97,112, 32,116, +101,120,116,117,114,101, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32,109, 97,110,117, 97,108,108,121, 32,102,111,114, 32, +116,101,120,101,108, 70,101,116, 99,104, 32,116,111, 32,119,111,114,107, 32,111,110, 32,117,118,115, 32,111,105,116,115,105,100, +101, 32,116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, 46, 13, 10, 9, 9, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, + 32,103,117, 97,114, 97,110,116,101,101,100, 32,116,111, 32,119,111,114,107, 32,115,105,110, 99,101, 32,119,101, 32,116, 97,107, +101, 32,116,104,101, 32,102,114, 97, 99,116,105,111,110, 97,108, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,117,118, 32, + 97, 98,111,118,101, 46, 13, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,120, 32, 61, 32, 40,105, 84,101,120, 84,109,112, + 46,120, 32, 60, 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 43, 32,118, 68,105,109, 46,120, 32, 58, 32, 40, 40, +105, 84,101,120, 84,109,112, 46,120, 32, 62, 61, 32,118, 68,105,109, 46,120, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, + 45, 32,118, 68,105,109, 46,120, 32, 58, 32,105, 84,101,120, 84,109,112, 46,120, 41, 59, 13, 10, 9, 9, 9, 9,105, 84,101,120, + 84,109,112, 46,121, 32, 61, 32, 40,105, 84,101,120, 84,109,112, 46,121, 32, 60, 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, + 46,121, 32, 43, 32,118, 68,105,109, 46,121, 32, 58, 32, 40, 40,105, 84,101,120, 84,109,112, 46,121, 32, 62, 61, 32,118, 68,105, +109, 46,121, 41, 63, 32,105, 84,101,120, 84,109,112, 46,121, 32, 45, 32,118, 68,105,109, 46,121, 32, 58, 32,105, 84,101,120, 84, +109,112, 46,121, 41, 59, 13, 10, 13, 10, 9, 9, 9, 9,114,103, 98,116,111, 98,119, 40,116,101,120,101,108, 70,101,116, 99,104, + 40,105,109, 97, 44, 32,105, 84,101,120, 84,109,112, 44, 32, 48, 41, 44, 32, 72, 91,105, 93, 91,106, 93, 41, 59, 13, 10, 9, 9, + 9,125, 13, 10, 9, 9,125, 13, 10, 9, 9, 13, 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,116, 46,120, 44, 32,121, 32, + 61, 32,116, 46,121, 59, 13, 10, 9, 9,102,108,111, 97,116, 32,120, 50, 32, 61, 32,120, 32, 42, 32,120, 44, 32,120, 51, 32, 61, + 32,120, 50, 32, 42, 32,120, 44, 32,121, 50, 32, 61, 32,121, 32, 42, 32,121, 44, 32,121, 51, 32, 61, 32,121, 50, 32, 42, 32,121, + 59, 13, 10, 13, 10, 9, 9,118,101, 99, 52, 32, 88, 32, 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40,120, 51, 43,120, 41, + 43,120, 50, 44, 9, 9, 49, 46, 53, 42,120, 51, 45, 50, 46, 53, 42,120, 50, 43, 49, 44, 9, 45, 49, 46, 53, 42,120, 51, 43, 50, + 42,120, 50, 43, 48, 46, 53, 42,120, 44, 9, 9, 48, 46, 53, 42, 40,120, 51, 45,120, 50, 41, 41, 59, 13, 10, 9, 9,118,101, 99, + 52, 32, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40,121, 51, 43,121, 41, 43,121, 50, 44, 9, 9, 49, 46, 53, 42, +121, 51, 45, 50, 46, 53, 42,121, 50, 43, 49, 44, 9, 45, 49, 46, 53, 42,121, 51, 43, 50, 42,121, 50, 43, 48, 46, 53, 42,121, 44, + 9, 9, 48, 46, 53, 42, 40,121, 51, 45,121, 50, 41, 41, 59, 13, 10, 9, 9,118,101, 99, 52, 32,100, 88, 32, 61, 32,118,101, 99, + 52, 40, 45, 49, 46, 53, 42,120, 50, 43, 50, 42,120, 45, 48, 46, 53, 44, 9, 9, 52, 46, 53, 42,120, 50, 45, 53, 42,120, 44, 9, + 9, 9, 45, 52, 46, 53, 42,120, 50, 43, 52, 42,120, 43, 48, 46, 53, 44, 9, 9, 49, 46, 53, 42,120, 50, 45,120, 41, 59, 13, 10, + 9, 9,118,101, 99, 52, 32,100, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 49, 46, 53, 42,121, 50, 43, 50, 42,121, 45, 48, 46, 53, + 44, 9, 9, 52, 46, 53, 42,121, 50, 45, 53, 42,121, 44, 9, 9, 9, 45, 52, 46, 53, 42,121, 50, 43, 52, 42,121, 43, 48, 46, 53, + 44, 9, 9, 49, 46, 53, 42,121, 50, 45,121, 41, 59, 13, 10, 9, 13, 10, 9, 9, 47, 47, 32, 99,111,109,112,108,101,116,101, 32, +100,101,114,105,118, 97,116,105,118,101, 32,105,110, 32,110,111,114,109, 97,108,105,122,101,100, 32, 99,111,111,114,100,105,110, + 97,116,101,115, 32, 40,109,117,108, 32, 98,121, 32,118, 68,105,109, 41, 13, 10, 9, 9,118,101, 99, 50, 32,100, 72,100, 83, 84, + 32, 61, 32,118, 68,105,109, 32, 42, 32,118,101, 99, 50, 40,100,111,116, 40, 89, 44, 32, 72, 32, 42, 32,100, 88, 41, 44, 32,100, +111,116, 40,100, 89, 44, 32, 72, 32, 42, 32, 88, 41, 41, 59, 13, 10, 13, 10, 9, 9, 47, 47, 32,116,114, 97,110,115,102,111,114, +109, 32,100,101,114,105,118, 97,116,105,118,101, 32,116,111, 32,115, 99,114,101,101,110, 45,115,112, 97, 99,101, 13, 10, 9, 9, +118,101, 99, 50, 32,100, 72,100,120,121, 95, 98,105, 99,117, 98,105, 99, 32, 61, 32,118,101, 99, 50, 40, 32,100, 72,100, 83, 84, + 46,120, 32, 42, 32, 84,101,120, 68,120, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, 84,101,120, 68,120, 46,121, + 44, 13, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101,120, 68,121, 46,120, 32, + 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, 84,101,120, 68,121, 46,121, 32, 41, 59, 13, 10, 13, 10, 9, 9, 47, 47, 32, 98, +108,101,110,100, 32, 98,101,116,119,101,101,110, 32,116,104,101, 32,116,119,111, 13, 10, 9, 9,100, 72,100,120,121, 32, 61, 32, +100, 72,100,120,121, 42, 40, 49, 45,102, 66,108,101,110,100, 41, 32, 43, 32,100, 72,100,120,121, 95, 98,105, 99,117, 98,105, 99, + 42,102, 66,108,101,110,100, 59, 13, 10, 9,125, 13, 10, 13, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, +100, 72,100,120,121, 46,120, 59, 13, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32,100, 72,100,120,121, 46, +121, 59, 13, 10,125, 13, 10, 13, 10, 35,101,110,100,105,102, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109, +112, 95,116, 97,112, 53, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, + 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, + 32,100, 66,116, 32, 41, 32, 13, 10,123, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116, +101,120, 99,111, 46,120,121, 41, 59, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101, +120, 99,111, 46,120,121, 41, 59, 13, 10, 13, 10, 9,118,101, 99, 50, 32, 83, 84, 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, + 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, + 84,101,120, 68,120, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, + 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, + 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 13, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, + 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 13, 10, 9, 13, 10, 9,102, +108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,100, 44, 72,117, 59, 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32, +116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, 99, 41, 44, 32, 72, 99, 32, 41, 59, 13, 10, 9,114,103, 98, +116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 32, 41, 59, + 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, + 32, 72,114, 32, 41, 59, 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, + 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 13, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, + 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 13, 10, 9, 13, 10, 9,100, 66,115, 32, 61, 32,104, 83, + 99, 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 13, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, + 32, 42, 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117, +109,112, 95,100,101,114,105,118, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, +105,109, 97, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121, 44, 32,102, +108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, + 32, 41, 32, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,115, 32, 61, 32, 49, 46, 48, 59, 9, 9, 47, 47, 32,110,101,103, 97, +116,101, 32,116,104,105,115, 32,105,102, 32,102,108,105,112,112,101,100, 32,116,101,120,116,117,114,101, 32, 99,111,111,114,100, +105,110, 97,116,101, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46, +120,121, 41, 59, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120, +121, 41, 59, 13, 10, 9, 13, 10, 9, 47, 47, 32,116,104,105,115, 32,118, 97,114,105, 97,110,116, 32,117,115,105,110,103, 32, 97, + 32,100,101,114,105,118, 97,116,105,118,101, 32,109, 97,112, 32,105,115, 32,100,101,115, 99,114,105, 98,101,100, 32,104,101,114, +101, 13, 10, 9, 47, 47, 32,104,116,116,112, 58, 47, 47,109,109,105,107,107,101,108,115,101,110, 51,100, 46, 98,108,111,103,115, +112,111,116, 46, 99,111,109, 47, 50, 48, 49, 49, 47, 48, 55, 47,100,101,114,105,118, 97,116,105,118,101, 45,109, 97,112,115, 46, +104,116,109,108, 13, 10, 9,118,101, 99, 50, 32,100,105,109, 32, 61, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 44, 32,105,109, + 97, 95,121, 41, 59, 13, 10, 9,118,101, 99, 50, 32,100, 66,100,117,118, 32, 61, 32,104, 83, 99, 97,108,101, 42,100,105,109, 42, + 40, 50, 46, 48, 42,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 46,120,121, + 45, 49, 46, 48, 41, 59, 13, 10, 9, 13, 10, 9,100, 66,115, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, 68,120, 46, +120, 32, 43, 32,115, 42,100, 66,100,117,118, 46,121, 42, 84,101,120, 68,120, 46,121, 59, 13, 10, 9,100, 66,116, 32, 61, 32,100, + 66,100,117,118, 46,120, 42, 84,101,120, 68,121, 46,120, 32, 43, 32,115, 42,100, 66,100,117,118, 46,121, 42, 84,101,120, 68,121, + 46,121, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 40, 32, +102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, + 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, + 95,105,110, 44, 13, 10, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, + 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 13, 10,123, 13, 10, + 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, + 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, 66,116, 32, 42, 32,118, 82, 50, 32, 41, 59, 13, 10, 9, 13, 10, 9,118, + 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59, + 13, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, + 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, + 95, 97,112,112,108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102,108,111, + 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, + 51, 32,118, 82, 50, 44, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, + 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121, 44, 32,118,101, 99, 51, + 32,118, 78, 97, 99, 99, 95,105,110, 44, 13, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, + 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117,114, 98,101,100, 95,110,111,114, +109, 32, 41, 32, 13, 10,123, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99, +111, 46,120,121, 41, 59, 13, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, + 46,120,121, 41, 59, 13, 10, 13, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105,103,110, 40, +102, 68,101,116, 41, 32, 42, 32, 40, 32, 13, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, 32, 47, 32,108, +101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105,109, 97, 95,121, + 42, 84,101,120, 68,120, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 49, 32, 43, 32, 13, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32,100, 66,116, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68, +121, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, 59, 13, 10, + 9, 9, 9, 9, 13, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83, +117,114,102, 71,114, 97,100, 59, 13, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, + 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109, +116,101,120, 95,110,101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,110,111, +114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120, 44, 32, 45,110,111,114,109, 97,108, 46,121, + 44, 32,110,111,114,109, 97,108, 46,122, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116,101,120, 95,110,115,112, + 97, 99,101, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,118,101, 99, 51, 32,110, +111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,110,111,114,109, 97,108, 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32,116, 97,110,103,101,110,116, + 46,119, 32, 42, 32, 99,114,111,115,115, 40,110,111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 46,120,121,122, 41, 59, + 13, 10, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110, +103,101,110,116, 46,120,121,122, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111, +114,109, 97,108, 46,122, 42,110,111,114,109, 97,108, 59, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114, +109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,109,116, +101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40,102,108,111, 97,116, 32,110,111,114,102, 97, 99, 44, 32,118,101, + 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,110,101,119,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 13, 10,123, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, + 40, 49, 46, 48, 32, 45, 32,110,111,114,102, 97, 99, 41, 42,110,111,114,109, 97,108, 32, 43, 32,110,111,114,102, 97, 99, 42,110, +101,119,110,111,114,109, 97,108, 59, 13, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122, +101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 32, 77, 65, 84, + 69, 82, 73, 65, 76, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105, +115,105, 98,105,108,105,116,121, 95,115,117,110, 95,104,101,109,105, 40,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32, +111,117,116, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, + 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,108,118, 32, 61, 32,108, 97,109,112,118,101, + 99, 59, 13, 10, 9,100,105,115,116, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,111,116,104, +101,114, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,111,117,116, 32,118,101, 99, + 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, +118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,108,118, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 13, + 10, 9,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40,108,118, 41, 59, 13, 10, 9,108,118, 32, 61, 32,110,111,114,109, + 97,108,105,122,101, 40,108,118, 41, 59, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,105,110,118,108,105,110,101, 97,114, 40,102,108, +111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112, +100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100,105,115,116, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111, +105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,105,110,118,115,113,117, 97,114,101, 40,102,108,111, 97,116, 32, +108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, +118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, + 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100,105,115,116, 42,100,105,115,116, 41, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,115,108,105,100,101,114,115, 40,102,108,111, 97,116, 32,108, + 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,108,100, 49, 44, 32,102,108,111, 97,116, 32,108,100, 50, 44, 32,102, +108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 13, 10,123, + 13, 10, 9,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,107,119, 32, 61, 32,108, 97,109,112,100,105,115,116, 42,108, + 97,109,112,100,105,115,116, 59, 13, 10, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, + 40,108, 97,109,112,100,105,115,116, 32, 43, 32,108,100, 49, 42,100,105,115,116, 41, 59, 13, 10, 9,118,105,115,105,102, 97, 99, + 32, 42, 61, 32,108, 97,109,112,100,105,115,116,107,119, 47, 40,108, 97,109,112,100,105,115,116,107,119, 32, 43, 32,108,100, 50, + 42,100,105,115,116, 42,100,105,115,116, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108, +108,111,102,102, 95, 99,117,114,118,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,115, 97,109,112,108, +101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,116,101,120, +116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,100,105,115,116, 47,108, 97,109,112,100, +105,115,116, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105, +115,105, 98,105,108,105,116,121, 95,115,112,104,101,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32, +102,108,111, 97,116, 32,100,105,115,116, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,116, 61, 32,108, + 97,109,112,100,105,115,116, 32, 45, 32,100,105,115,116, 59, 13, 10, 13, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 61, 32, +118,105,115,105,102, 97, 99, 42,109, 97,120, 40,116, 44, 32, 48, 46, 48, 41, 47,108, 97,109,112,100,105,115,116, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95,115,113, +117, 97,114,101, 40,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,109, 97,116, 52, 32,108, 97,109,112,105,109, 97,116, + 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 13, 10,123, 13, 10, 9, +105,102, 40,100,111,116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 32, 62, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9, +118,101, 99, 51, 32,108,118,114,111,116, 32, 61, 32, 40,108, 97,109,112,105,109, 97,116, 42,118,101, 99, 52, 40,108,118, 44, 32, + 48, 46, 48, 41, 41, 46,120,121,122, 59, 13, 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,109, 97,120, 40, 97, 98,115, 40, +108,118,114,111,116, 46,120, 47,108,118,114,111,116, 46,122, 41, 44, 32, 97, 98,115, 40,108,118,114,111,116, 46,121, 47,108,118, +114,111,116, 46,122, 41, 41, 59, 13, 10, 13, 10, 9, 9,105,110,112,114, 32, 61, 32, 49, 46, 48, 47,115,113,114,116, 40, 49, 46, + 48, 32, 43, 32,120, 42,120, 41, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,105,110,112,114, 32, 61, 32, 48, + 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115, +112,111,116, 95, 99,105,114, 99,108,101, 40,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,118,101, 99, 51, 32,108,118, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 13, 10,123, 13, 10, 9,105,110,112,114, 32, 61, 32,100,111, +116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,108, 97,109,112, 95, +118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 40,102,108,111, 97,116, 32,115,112,111,116,115,105, 44, 32,102,108, +111, 97,116, 32,115,112,111,116, 98,108, 44, 32,102,108,111, 97,116, 32,105,110,112,114, 44, 32,102,108,111, 97,116, 32,118,105, +115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, + 10, 9,102,108,111, 97,116, 32,116, 32, 61, 32,115,112,111,116,115,105, 59, 13, 10, 13, 10, 9,105,102, 40,105,110,112,114, 32, + 60, 61, 32,116, 41, 32,123, 13, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, + 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,116, 32, 61, 32,105,110,112,114, 32, 45, 32,116, 59, 13, 10, 13, 10, 9, 9, + 47, 42, 32,115,111,102,116, 32, 97,114,101, 97, 32, 42, 47, 13, 10, 9, 9,105,102, 40,115,112,111,116, 98,108, 32, 33, 61, 32, + 48, 46, 48, 41, 13, 10, 9, 9, 9,105,110,112,114, 32, 42, 61, 32,115,109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, + 32, 49, 46, 48, 44, 32,116, 47,115,112,111,116, 98,108, 41, 59, 13, 10, 13, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, + 32, 61, 32,118,105,115,105,102, 97, 99, 42,105,110,112,114, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32, +108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,118,105,115,105, +102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 13, 10,123, 13, 10, 9, +111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 40,118,105,115,105,102, 97, 99, 32, 60, 32, 48, 46, 48, 48, 49, 41, 63, 32, + 48, 46, 48, 58, 32,118,105,115,105,102, 97, 99, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118, +105,101,119, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 41, 13, 10,123, 13, 10, + 9, 47, 42, 32,104, 97,110,100,108,101, 32,112,101,114,115,112,101, 99,116,105,118,101, 47,111,114,116,104,111,103,114, 97,112, +104,105, 99, 32, 42, 47, 13, 10, 9,118,105,101,119, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97, +116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, + 41, 58, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 45, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118, +111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 40,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, + 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32, 99, + 32, 61, 32, 99,114,111,115,115, 40,108,118, 44, 32,116, 97,110,103, 41, 59, 13, 10, 9,118,101, 99, 51, 32,118,110,111,114, 32, + 61, 32, 99,114,111,115,115, 40, 99, 44, 32,116, 97,110,103, 41, 59, 13, 10, 13, 10, 9,118,110, 32, 61, 32, 45,110,111,114,109, + 97,108,105,122,101, 40,118,110,111,114, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110, +112, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, +112, 41, 13, 10,123, 13, 10, 9,105,110,112, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,110,111, 95,100,105,102,102,117,115,101, 40,111,117,116, 32,102,108, +111, 97,116, 32,105,115, 41, 13, 10,123, 13, 10, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105, +100, 32,115,104, 97,100,101, 95,105,115, 95,104,101,109,105, 40,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,105,115, 41, 13, 10,123, 13, 10, 9,105,115, 32, 61, 32, 48, 46, 53, 42,105,110,112, 32, 43, 32, 48, 46, 53, + 59, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,116, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40,109, + 97,116, 52, 32, 97,114,101, 97, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,118,110, 41, 13, 10,123, 13, 10, + 9,118,101, 99, 51, 32,118,101, 99, 91, 52, 93, 44, 32, 99, 91, 52, 93, 59, 13, 10, 9,102,108,111, 97,116, 32,114, 97,100, 91, + 52, 93, 44, 32,102, 97, 99, 59, 13, 10, 9, 13, 10, 9,118,101, 99, 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, + 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 48, 93, 46,120,121,122, 41, 59, 13, 10, 9,118,101, 99, 91, 49, 93, 32, 61, 32,110, +111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 49, 93, 46,120,121,122, 41, 59, 13, 10, 9,118,101, + 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 50, 93, 46,120,121, +122, 41, 59, 13, 10, 9,118,101, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114, +101, 97, 91, 51, 93, 46,120,121,122, 41, 59, 13, 10, 13, 10, 9, 99, 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, + 40, 99,114,111,115,115, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, 41, 59, 13, 10, 9, 99, 91, 49, 93, 32, + 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 49, 93, 44, 32,118,101, 99, 91, 50, 93, + 41, 41, 59, 13, 10, 9, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, + 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 13, 10, 9, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97,108,105,122, +101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 13, 10, 13, 10, 9,114, 97, +100, 91, 48, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, 41, + 59, 13, 10, 9,114, 97,100, 91, 49, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 49, 93, 44, 32,118,101, + 99, 91, 50, 93, 41, 41, 59, 13, 10, 9,114, 97,100, 91, 50, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, + 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 13, 10, 9,114, 97,100, 91, 51, 93, 32, 61, 32, 97, 99,111,115, 40,100,111, +116, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 13, 10, 13, 10, 9,102, 97, 99, 61, 32, 32,114, 97, +100, 91, 48, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 48, 93, 41, 59, 13, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, + 49, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 49, 93, 41, 59, 13, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 50, 93, + 42,100,111,116, 40,118,110, 44, 32, 99, 91, 50, 93, 41, 59, 13, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 51, 93, 42,100, +111,116, 40,118,110, 44, 32, 99, 91, 51, 93, 41, 59, 13, 10, 13, 10, 9,114,101,116,117,114,110, 32,109, 97,120, 40,102, 97, 99, + 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110,112, 95, 97,114,101, + 97, 40,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,118,101, + 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,109, 97,116, 52, 32, 97,114,101, 97, 44, 32, +102,108,111, 97,116, 32, 97,114,101, 97,115,105,122,101, 44, 32,102,108,111, 97,116, 32,107, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,105,110,112, 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32, 99,111, 32, 61, 32,112,111,115,105,116,105,111,110, 59, + 13, 10, 9,118,101, 99, 51, 32,118,101, 99, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 13, 10, 13, 10, 9,105, +102, 40,100,111,116, 40,118,101, 99, 44, 32,108, 97,109,112,118,101, 99, 41, 32, 60, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9, +105,110,112, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,102,108,111, 97,116, + 32,105,110,116,101,110,115, 32, 61, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40, 97,114,101, 97, 44, + 32, 99,111, 44, 32,118,110, 41, 59, 13, 10, 13, 10, 9, 9,105,110,112, 32, 61, 32,112,111,119, 40,105,110,116,101,110,115, 42, + 97,114,101, 97,115,105,122,101, 44, 32,107, 41, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97, +100,101, 95,100,105,102,102,117,115,101, 95,111,114,101,110, 95,110, 97,121,101,114, 40,102,108,111, 97,116, 32,110,108, 44, 32, +118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,111, +117,103,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32,104, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32, +109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,110,118, 32, + 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,114, +101, 97,108,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 13, 10, 13, 10, 9,105,102, 40,114,101, 97,108,110,108, + 32, 60, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115, +101, 32,105,102, 40,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, +125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, + 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9, 9,102,108,111, 97,116, 32, 76,105,116, 95, 65, 32, 61, 32, 97, + 99,111,115, 40,114,101, 97,108,110,108, 41, 59, 13, 10, 9, 9,102,108,111, 97,116, 32, 86,105,101,119, 95, 65, 32, 61, 32, 97, + 99,111,115, 40,110,118, 41, 59, 13, 10, 13, 10, 9, 9,118,101, 99, 51, 32, 76,105,116, 95, 66, 32, 61, 32,110,111,114,109, 97, +108,105,122,101, 40,108, 32, 45, 32,114,101, 97,108,110,108, 42,110, 41, 59, 13, 10, 9, 9,118,101, 99, 51, 32, 86,105,101,119, + 95, 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 45, 32,110,118, 42,110, 41, 59, 13, 10, 13, 10, 9, 9,102, +108,111, 97,116, 32,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40, 76,105,116, 95, 66, 44, 32, 86,105,101,119, 95, 66, 41, 44, + 32, 48, 46, 48, 41, 59, 13, 10, 13, 10, 9, 9,102,108,111, 97,116, 32, 97, 44, 32, 98, 59, 13, 10, 13, 10, 9, 9,105,102, 40, + 76,105,116, 95, 65, 32, 62, 32, 86,105,101,119, 95, 65, 41, 32,123, 13, 10, 9, 9, 9, 97, 32, 61, 32, 76,105,116, 95, 65, 59, + 13, 10, 9, 9, 9, 98, 32, 61, 32, 86,105,101,119, 95, 65, 59, 13, 10, 9, 9,125, 13, 10, 9, 9,101,108,115,101, 32,123, 13, + 10, 9, 9, 9, 97, 32, 61, 32, 86,105,101,119, 95, 65, 59, 13, 10, 9, 9, 9, 98, 32, 61, 32, 76,105,116, 95, 65, 59, 13, 10, + 9, 9,125, 13, 10, 13, 10, 9, 9,102,108,111, 97,116, 32, 65, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 48, 46, 53, 42, 40, 40, +114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, 46, + 51, 51, 41, 41, 41, 59, 13, 10, 9, 9,102,108,111, 97,116, 32, 66, 32, 61, 32, 48, 46, 52, 53, 42, 40, 40,114,111,117,103,104, + 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, 46, 48, 57, 41, 41, 59, + 13, 10, 13, 10, 9, 9, 98, 32, 42, 61, 32, 48, 46, 57, 53, 59, 13, 10, 9, 9,105,115, 32, 61, 32,110,108, 42, 40, 65, 32, 43, + 32, 40, 66, 32, 42, 32,116, 32, 42, 32,115,105,110, 40, 97, 41, 32, 42, 32,116, 97,110, 40, 98, 41, 41, 41, 59, 13, 10, 9,125, + 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,116,111,111,110, 40,118, +101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122, +101, 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 13, + 10,123, 13, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 13, 10, 9,102, +108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 13, 10, 13, 10, 9,105,102, 40, 97,110, +103, 32, 60, 32,115,105,122,101, 41, 32,105,115, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40, 97,110, +103, 32, 62, 32, 40,115,105,122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, + 61, 61, 32, 48, 46, 48, 41, 32,105,115, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,101,108,115,101, 32,105,115, 32, 61, 32, 49, 46, + 48, 32, 45, 32, 40, 40, 97,110,103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 13, 10,125, 13, 10, + 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,109,105,110,110, 97,101,114,116, 40,102,108, +111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,100, 97, +114,107,110,101,115,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 13, 10,123, 13, 10, 9,105,102, 40,110,108, + 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108, +115,101, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, + 44, 32, 48, 46, 48, 41, 59, 13, 10, 13, 10, 9, 9,105,102, 40,100, 97,114,107,110,101,115,115, 32, 60, 61, 32, 49, 46, 48, 41, + 13, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40,109, 97,120, 40,110,118, 42,110,108, 44, 32, 48, 46, 49, 41, + 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 13, 10, 9, 9,101,108,115,101, 13, 10, 9, 9, 9,105, +115, 32, 61, 32,110,108, 42,112,111,119, 40, 49, 46, 48, 48, 48, 49, 32, 45, 32,110,118, 44, 32,100, 97,114,107,110,101,115,115, + 32, 45, 32, 49, 46, 48, 41, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, + 95,102, 97, 99, 40,118,101, 99, 51, 32,118,105,101,119, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,102,108,111, 97,116, 32,103, +114, 97,100, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,116, 49, 44, 32,116, + 50, 59, 13, 10, 9,102,108,111, 97,116, 32,102,102, 97, 99, 59, 13, 10, 13, 10, 9,105,102, 40,102, 97, 99, 61, 61, 48, 46, 48, + 41, 32,123, 13, 10, 9, 9,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, + 10, 9, 9,116, 49, 61, 32,100,111,116, 40,118,105,101,119, 44, 32,118,110, 41, 59, 13, 10, 9, 9,105,102, 40,116, 49, 62, 48, + 46, 48, 41, 32, 32,116, 50, 61, 32, 49, 46, 48, 43,116, 49, 59, 13, 10, 9, 9,101,108,115,101, 32,116, 50, 61, 32, 49, 46, 48, + 45,116, 49, 59, 13, 10, 13, 10, 9, 9,116, 50, 61, 32,103,114, 97,100, 32, 43, 32, 40, 49, 46, 48, 45,103,114, 97,100, 41, 42, +112,111,119, 40,116, 50, 44, 32,102, 97, 99, 41, 59, 13, 10, 13, 10, 9, 9,105,102, 40,116, 50, 60, 48, 46, 48, 41, 32,102,102, + 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 40,116, 50, 62, 49, 46, 48, 41, 32,102,102, 97, + 99, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,101,108,115,101, 32,102,102, 97, 99, 32, 61, 32,116, 50, 59, 13, 10, 9,125, 13, + 10, 13, 10, 9,114,101,116,117,114,110, 32,102,102, 97, 99, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,100,105,102,102,117,115,101, 95,102,114,101,115,110,101,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32, +108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 95,105, 44, 32,102,108,111, 97, +116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 13, 10,123, 13, 10, 9,105,115, 32, 61, 32,102, +114,101,115,110,101,108, 95,102, 97, 99, 40,108,118, 44, 32,118,110, 44, 32,102, 97, 99, 95,105, 44, 32,102, 97, 99, 41, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,117, 98,105, 99, 40,102,108,111, 97,116, 32,105,115, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,115, 41, 13, 10,123, 13, 10, 9,105,102, 40,105,115, 62, 48, 46, 48, + 32, 38, 38, 32,105,115, 60, 49, 46, 48, 41, 13, 10, 9, 9,111,117,116,105,115, 61, 32,115,109,111,111,116,104,115,116,101,112, + 40, 48, 46, 48, 44, 32, 49, 46, 48, 44, 32,105,115, 41, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116,105,115, 61, + 32,105,115, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,115,105,102, 97, 99, 40,102,108, +111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,114,101,102,108, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105, 41, 13, 10,123, 13, 10, 9, 47, 42,105,102, 40,105, 32, 62, 32, + 48, 46, 48, 41, 42, 47, 13, 10, 9, 9,111,117,116,105, 32, 61, 32,109, 97,120, 40,105, 42,118,105,115,105,102, 97, 99, 42,114, +101,102,108, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9, 47, 42,101,108,115,101, 13, 10, 9, 9,111,117,116,105, 32, 61, 32,105, 59, + 42, 47, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 95,115,112, +101, 99, 40,118,101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 13, 10,123, 13, 10, 9, +118,110, 32, 61, 32,116, 97,110,103, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95, +116,111, 95,100,105,102,102,117,115,101, 40,102,108,111, 97,116, 32,105, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, + 44, 32,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, + 10, 9,105,102, 40,105, 32, 62, 32, 48, 46, 48, 41, 13, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,105, 42,108, 97,109,112, + 99,111,108, 42, 99,111,108, 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 51, + 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,104,101,109,105, 95,115,112,101, 99, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, + 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, + 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,116, 41, 13, 10,123, 13, + 10, 9,108,118, 32, 43, 61, 32,118,105,101,119, 59, 13, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, +118, 41, 59, 13, 10, 13, 10, 9,116, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 13, 10, 9,116, 32, 61, 32, 48, + 46, 53, 42,116, 32, 43, 32, 48, 46, 53, 59, 13, 10, 13, 10, 9,116, 32, 61, 32,118,105,115,105,102, 97, 99, 42,115,112,101, 99, + 42,112,111,119, 40,116, 44, 32,104, 97,114,100, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, +112,104,111,110,103, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32, +118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, + 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, + 59, 13, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40,104, 44, 32,110, 41, 44, 32, + 48, 46, 48, 41, 59, 13, 10, 13, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,112,111,119, 40,114,115,108,116, 44, 32,104, 97, +114,100, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,111,111,107,116,111,114,114, 95,115, +112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97, +116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 13, 10,123, 13, 10, 9, +118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 13, 10, 9,102,108,111, + 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 13, 10, 13, 10, 9,105,102, 40,110,104, 32, 60, 32, 48, + 46, 48, 41, 32,123, 13, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108, +115,101, 32,123, 13, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, + 44, 32, 48, 46, 48, 41, 59, 13, 10, 9, 9,102,108,111, 97,116, 32,105, 32, 61, 32,112,111,119, 40,110,104, 44, 32,104, 97,114, +100, 41, 59, 13, 10, 13, 10, 9, 9,105, 32, 61, 32,105, 47, 40, 48, 46, 49, 43,110,118, 41, 59, 13, 10, 9, 9,115,112,101, 99, +102, 97, 99, 32, 61, 32,105, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 98,108, +105,110,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, + 32,102,108,111, 97,116, 32,114,101,102,114, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 95,112,111,119,101,114, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 13, 10,123, 13, 10, 9,105,102, 40,114,101,102,114, + 97, 99, 32, 60, 32, 49, 46, 48, 41, 32,123, 13, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, +125, 13, 10, 9,101,108,115,101, 32,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, + 13, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, + 10, 9, 9,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 60, 49, 48, 48, 46, 48, 41, 13, 10, 9, 9, 9,115,112,101, 99, + 95,112,111,119,101,114, 61, 32,115,113,114,116, 40, 49, 46, 48, 47,115,112,101, 99, 95,112,111,119,101,114, 41, 59, 13, 10, 9, + 9,101,108,115,101, 13, 10, 9, 9, 9,115,112,101, 99, 95,112,111,119,101,114, 61, 32, 49, 48, 46, 48, 47,115,112,101, 99, 95, +112,111,119,101,114, 59, 13, 10, 13, 10, 9, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, + 32, 43, 32,108, 41, 59, 13, 10, 9, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 13, + 10, 9, 9,105,102, 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, + 48, 46, 48, 59, 13, 10, 9, 9,125, 13, 10, 9, 9,101,108,115,101, 32,123, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,110,118, + 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 49, 41, 59, 13, 10, 9, 9, 9,102,108,111, + 97,116, 32,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 13, 10, 9, 9, 9,105,102, 40,110,108, 32, 60, 61, 32, + 48, 46, 48, 49, 41, 32,123, 13, 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, 9, 9, +125, 13, 10, 9, 9, 9,101,108,115,101, 32,123, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, + 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 49, 41, 59, 13, 10, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, + 97, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 98, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42, +110,118, 41, 47,118,104, 59, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 99, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110, +108, 41, 47,118,104, 59, 13, 10, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,103, 32, 61, 32, 48, 46, 48, 59, 13, 10, 13, 10, + 9, 9, 9, 9,105,102, 40, 97, 32, 60, 32, 98, 32, 38, 38, 32, 97, 32, 60, 32, 99, 41, 32,103, 32, 61, 32, 97, 59, 13, 10, 9, + 9, 9, 9,101,108,115,101, 32,105,102, 40, 98, 32, 60, 32, 97, 32, 38, 38, 32, 98, 32, 60, 32, 99, 41, 32,103, 32, 61, 32, 98, + 59, 13, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 99, 32, 60, 32, 97, 32, 38, 38, 32, 99, 32, 60, 32, 98, 41, 32,103, + 32, 61, 32, 99, 59, 13, 10, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32,115,113,114,116, 40, 40, 40,114,101, +102,114, 97, 99, 32, 42, 32,114,101,102,114, 97, 99, 41, 43, 40,118,104, 42,118,104, 41, 45, 49, 46, 48, 41, 41, 59, 13, 10, 9, + 9, 9, 9,102,108,111, 97,116, 32,102, 32, 61, 32, 40, 40, 40,112, 45,118,104, 41, 42, 40,112, 45,118,104, 41, 41, 47, 40, 40, +112, 43,118,104, 41, 42, 40,112, 43,118,104, 41, 41, 41, 42, 40, 49, 46, 48, 43, 40, 40, 40, 40,118,104, 42, 40,112, 43,118,104, + 41, 41, 45, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 41, 47, 40, 40, 40,118,104, + 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 41, + 41, 41, 59, 13, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,110,104, 41, 59, 13, 10, + 13, 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 42,103, 42,101,120,112, 95, 98,108,101,110, +100,101,114, 40, 40, 45, 40, 97,110,103, 42, 97,110,103, 41, 47, 40, 50, 46, 48, 42,115,112,101, 99, 95,112,111,119,101,114, 42, +115,112,101, 99, 95,112,111,119,101,114, 41, 41, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9, 9, 9,125, 13, 10, 9, 9,125, 13, + 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119, 97,114,100,105,115,111, 95,115,112,101, + 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32, +114,109,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 13, 10,123, 13, 10, 9,118,101, 99, + 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 13, 10, 9,102,108,111, 97,116, 32, +110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 13, 10, 9,102,108, +111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 13, + 10, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,108, 41, 44, 32, 48, 46, 48, 48, + 49, 41, 59, 13, 10, 9,102,108,111, 97,116, 32, 97,110,103,108,101, 32, 61, 32,116, 97,110, 40, 97, 99,111,115, 40,110,104, 41, + 41, 59, 13, 10, 9,102,108,111, 97,116, 32, 97,108,112,104, 97, 32, 61, 32,109, 97,120, 40,114,109,115, 44, 32, 48, 46, 48, 48, + 49, 41, 59, 13, 10, 13, 10, 9,115,112,101, 99,102, 97, 99, 61, 32,110,108, 32, 42, 32, 40, 49, 46, 48, 47, 40, 52, 46, 48, 42, + 77, 95, 80, 73, 42, 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 42, 40,101,120,112, 95, 98,108,101,110,100,101,114, 40, + 45, 40, 97,110,103,108,101, 42, 97,110,103,108,101, 41, 47, 40, 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 47, 40,115, +113,114,116, 40,110,118, 42,110,108, 41, 41, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, +111,111,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, + 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 13, 10,123, 13, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114, +109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111, +116, 40,104, 44, 32,110, 41, 59, 13, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, + 41, 59, 13, 10, 13, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, + 59, 13, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 61, 32, 40,115,105,122,101, 32, 43, 32,116,115,109,111,111, +116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,115,108,116, 32, 61, 32, 48, 46, + 48, 59, 13, 10, 9,101,108,115,101, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110,103, 32, 45, 32,115, +105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 13, 10, 13, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,114,115,108, +116, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, 99, 95, 97,114,101, 97, 95,105,110, +112, 40,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,115,112,101, 99,102, 97, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,115,112,101, 99,102, 97, + 99, 32, 61, 32,115,112,101, 99,102, 97, 99, 42,105,110,112, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,115,112,101, 99, 95,116, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112, +101, 99, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,116, 41, 13, 10,123, 13, 10, 9,116, 32, 61, 32,115,104, 97,100,102, 97, 99, 42, +115,112,101, 99, 42,118,105,115,105,102, 97, 99, 42,115,112,101, 99,102, 97, 99, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,115,104, 97,100,101, 95, 97,100,100, 95,115,112,101, 99, 40,102,108,111, 97,116, 32,116, 44, 32,118,101, 99, 51, 32,108, 97, +109,112, 99,111,108, 44, 32,118,101, 99, 51, 32,115,112,101, 99, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117, +116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116, 42,108, 97,109,112, 99,111,108, 42,115,112, +101, 99, 99,111,108, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 40,118,101, 99, 52, + 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111, +108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, + 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, + 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 32, 43, 32, 99,111,108, 49, 42, 99,111, +108, 50, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95, 99,108, 97,109,112,101,100, + 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32, +111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 32, 43, 32,109, 97,120, + 40, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 41, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 95, 99,108, 97,109,112,101,100, 40, +118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99, +111,108, 32, 43, 32,109, 97,120, 40, 99,111,108, 49, 42, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, + 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95, +109, 97,100,100,102, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 44, 32,118,101, 99, 52, 32, 99,111, +108, 49, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, + 32, 61, 32, 99,111,108, 32, 43, 32,102, 42, 99,111,108, 49, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,109,117,108, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32, +118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 42, + 99,111,108, 50, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 95,118, 97,108,117,101, + 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111, +117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 42,102, 97, 99, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, + 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, + 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 42,111, 98, 99,111,108, 46,114, +103, 98, 44, 32, 99,111,108, 46, 97, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,114, 97,109,112, 95,114,103, 98,116, +111, 98,119, 40,118,101, 99, 51, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, + 41, 13, 10,123, 13, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 32, 43, 32, 99,111, +108,111,114, 46,103, 42, 48, 46, 53, 56, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 49, 50, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 40,102,108,111, 97,116, 32,105, 44, + 32,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,111,117,116,115,104, 97,100,102, 97, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,115,104, 97,100, +102, 97, 99, 32, 61, 32,105, 42,101,110,101,114,103,121, 42, 40, 49, 46, 48, 32, 45, 32,115,104, 97,100,102, 97, 99, 41, 59, 13, + 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,100,105,102, +102,117,115,101, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,114,103, 98, 44, 32,118,101, + 99, 52, 32,100,105,102,102, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,100,105,102,102, 41, 13, 10,123, 13, 10, 9, +111,117,116,100,105,102,102, 32, 61, 32,100,105,102,102, 32, 45, 32,118,101, 99, 52, 40,114,103, 98, 42,115,104, 97,100,102, 97, + 99, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115, +104, 97,100,111,119, 95,115,112,101, 99,117,108, 97,114, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, + 99, 51, 32,115,112,101, 99,114,103, 98, 44, 32,118,101, 99, 52, 32,115,112,101, 99, 44, 32,111,117,116, 32,118,101, 99, 52, 32, +111,117,116,115,112,101, 99, 41, 13, 10,123, 13, 10, 9,111,117,116,115,112,101, 99, 32, 61, 32,115,112,101, 99, 32, 45, 32,118, +101, 99, 52, 40,115,112,101, 99,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,116,101,115,116, 95,115,104, 97,100,111,119, 98,117,102, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, + 97,109,112,108,101,114, 50, 68, 83,104, 97,100,111,119, 32,115,104, 97,100,111,119,109, 97,112, 44, 32,109, 97,116, 52, 32,115, +104, 97,100,111,119,112,101,114,115,109, 97,116, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,111,119, 98,105, 97,115, 44, 32, +102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, + 10, 9,105,102, 40,105,110,112, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, 48, + 46, 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, + 97,100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, 52, 40,114, 99,111, 44, 32, 49, 46, 48, 41, 59, 13, 10, 13, 10, 9, + 9, 47, 47,102,108,111, 97,116, 32, 98,105, 97,115, 32, 61, 32, 40, 49, 46, 53, 32, 45, 32,105,110,112, 42,105,110,112, 41, 42, +115,104, 97,100,111,119, 98,105, 97,115, 59, 13, 10, 9, 9, 99,111, 46,122, 32, 45, 61, 32,115,104, 97,100,111,119, 98,105, 97, +115, 42, 99,111, 46,119, 59, 13, 10, 9, 9, 13, 10, 9, 9,105,102, 32, 40, 99,111, 46,119, 32, 62, 32, 48, 46, 48, 32, 38, 38, + 32, 99,111, 46,120, 32, 62, 32, 48, 46, 48, 32, 38, 38, 32, 99,111, 46,120, 47, 99,111, 46,119, 32, 60, 32, 49, 46, 48, 32, 38, + 38, 32, 99,111, 46,121, 32, 62, 32, 48, 46, 48, 32, 38, 38, 32, 99,111, 46,121, 47, 99,111, 46,119, 32, 60, 32, 49, 46, 48, 41, + 13, 10, 9, 9, 9,114,101,115,117,108,116, 32, 61, 32,115,104, 97,100,111,119, 50, 68, 80,114,111,106, 40,115,104, 97,100,111, +119,109, 97,112, 44, 32, 99,111, 41, 46,120, 59, 13, 10, 9, 9,101,108,115,101, 13, 10, 9, 9, 9,114,101,115,117,108,116, 32, + 61, 32, 49, 46, 48, 59, 13, 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,116,101,115,116, 95,115,104, 97,100,111, +119, 98,117,102, 95,118,115,109, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,115,104, 97, +100,111,119,109, 97,112, 44, 32,109, 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 44, 32,102,108,111, 97, +116, 32,115,104, 97,100,111,119, 98,105, 97,115, 44, 32,102,108,111, 97,116, 32, 98,108,101,101,100, 98,105, 97,115, 44, 32,102, +108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, + 9,105,102, 40,105,110,112, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 13, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, 48, 46, + 48, 59, 13, 10, 9,125, 13, 10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, 97, +100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, 52, 40,114, 99,111, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9, 9,105,102, + 32, 40, 99,111, 46,119, 32, 62, 32, 48, 46, 48, 32, 38, 38, 32, 99,111, 46,120, 32, 62, 32, 48, 46, 48, 32, 38, 38, 32, 99,111, + 46,120, 47, 99,111, 46,119, 32, 60, 32, 49, 46, 48, 32, 38, 38, 32, 99,111, 46,121, 32, 62, 32, 48, 46, 48, 32, 38, 38, 32, 99, +111, 46,121, 47, 99,111, 46,119, 32, 60, 32, 49, 46, 48, 41, 32,123, 13, 10, 9, 9, 9,118,101, 99, 50, 32,109,111,109,101,110, +116,115, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 80,114,111,106, 40,115,104, 97,100,111,119,109, 97,112, 44, 32, 99,111, + 41, 46,114,103, 59, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,100,105,115,116, 32, 61, 32, 99,111, 46,122, 47, 99,111, 46,119, + 59, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9, 9, 9, 13, 10, 9, 9, 9,105,102, + 40,100,105,115,116, 32, 60, 61, 32,109,111,109,101,110,116,115, 46,120, 41, 13, 10, 9, 9, 9, 9,112, 32, 61, 32, 49, 46, 48, + 59, 13, 10, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,118, 97,114,105, 97,110, 99,101, 32, 61, 32,109,111,109,101,110,116,115, + 46,121, 32, 45, 32, 40,109,111,109,101,110,116,115, 46,120, 42,109,111,109,101,110,116,115, 46,120, 41, 59, 13, 10, 9, 9, 9, +118, 97,114,105, 97,110, 99,101, 32, 61, 32,109, 97,120, 40,118, 97,114,105, 97,110, 99,101, 44, 32,115,104, 97,100,111,119, 98, +105, 97,115, 47, 49, 48, 46, 48, 41, 59, 13, 10, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,100, 32, 61, 32,109,111,109,101,110, +116,115, 46,120, 32, 45, 32,100,105,115,116, 59, 13, 10, 9, 9, 9,102,108,111, 97,116, 32,112, 95,109, 97,120, 32, 61, 32,118, + 97,114,105, 97,110, 99,101, 32, 47, 32, 40,118, 97,114,105, 97,110, 99,101, 32, 43, 32,100, 42,100, 41, 59, 13, 10, 13, 10, 9, + 9, 9, 47, 47, 32, 78,111,119, 32,114,101,100,117, 99,101, 32,108,105,103,104,116, 45, 98,108,101,101,100,105,110,103, 32, 98, +121, 32,114,101,109,111,118,105,110,103, 32,116,104,101, 32, 91, 48, 44, 32,120, 93, 32,116, 97,105,108, 32, 97,110,100, 32,108, +105,110,101, 97,114,108,121, 32,114,101,115, 99, 97,108,105,110,103, 32, 40,120, 44, 32, 49, 93, 13, 10, 9, 9, 9,112, 95,109, + 97,120, 32, 61, 32, 99,108, 97,109,112, 40, 40,112, 95,109, 97,120, 45, 98,108,101,101,100, 98,105, 97,115, 41, 47, 40, 49, 46, + 48, 45, 98,108,101,101,100, 98,105, 97,115, 41, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 13, 10, 9, 9, 9,114, +101,115,117,108,116, 32, 61, 32,109, 97,120, 40,112, 44, 32,112, 95,109, 97,120, 41, 59, 13, 10, 9, 9,125, 13, 10, 9, 9,101, +108,115,101, 32,123, 13, 10, 9, 9, 9,114,101,115,117,108,116, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9, 9,125, 9, 9, 9, 13, + 10, 9,125, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,108,105,103,104,116, 95,116,101,120,116,117, +114,101, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,111,111,107,105,101, 44, 32,109, + 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117, +108,116, 41, 13, 10,123, 13, 10, 13, 10, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, 97,100,111,119,112,101,114,115,109, + 97,116, 42,118,101, 99, 52, 40,114, 99,111, 44, 32, 49, 46, 48, 41, 59, 13, 10, 13, 10, 9,114,101,115,117,108,116, 32, 61, 32, +116,101,120,116,117,114,101, 50, 68, 80,114,111,106, 40, 99,111,111,107,105,101, 44, 32, 99,111, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,115,104, 97,100,101, 95,101,120,112,111,115,117,114,101, 95, 99,111,114,114,101, 99,116, 40,118,101, 99, + 51, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,108,105,110,102, 97, 99, 44, 32,102,108,111, 97,116, 32,108,111,103,102, 97, + 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, + 61, 32,108,105,110,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32,101,120,112, 40, 99,111,108, 42,108,111,103,102, 97, 99, 41, 41, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,105,115,116, 95,102, 97, 99,116,111,114, 40,118, +101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,109,105,115,116,115,116, 97, 44, 32,102,108,111, 97,116, 32,109,105,115, +116,100,105,115,116, 44, 32,102,108,111, 97,116, 32,109,105,115,116,116,121,112,101, 44, 32,102,108,111, 97,116, 32,109,105,115, +105, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32, +102, 97, 99, 44, 32,122, 99,111,114, 59, 13, 10, 13, 10, 9,122, 99,111,114, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99, +116,105,111,110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,108,101,110,103,116,104, + 40, 99,111, 41, 58, 32, 45, 99,111, 91, 50, 93, 59, 13, 10, 9, 13, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 40, +122, 99,111,114, 45,109,105,115,116,115,116, 97, 41, 47,109,105,115,116,100,105,115,116, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, + 41, 59, 13, 10, 9,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 48, 46, 48, 41, 32,102, 97, 99, 32, 42, 61, 32, +102, 97, 99, 59, 13, 10, 9,101,108,115,101, 32,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 49, 46, 48, 41, 59, + 13, 10, 9,101,108,115,101, 32,102, 97, 99, 32, 61, 32,115,113,114,116, 40,102, 97, 99, 41, 59, 13, 10, 13, 10, 9,111,117,116, +102, 97, 99, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 45,102, 97, 99, 41, 42, 40, 49, 46, 48, 45,109,105,115,105, 41, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119,111,114,108,100, 95,109,105,120, 40,118,101, 99, + 51, 32,104,111,114, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, + 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 99,111,108, 46, 97, 44, 32, + 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 13, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,109,105,120, 40,104, +111,114, 44, 32, 99,111,108, 46,114,103, 98, 44, 32,102, 97, 99, 41, 44, 32, 99,111,108, 46, 97, 41, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111,112, 97,113,117,101, 40,118,101, 99, 52, 32, 99,111, +108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, 9,111,117,116, 99,111,108, 32, + 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, + 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118, +101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10, + 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, 97, 42,111, 98, + 99,111,108, 46, 97, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, 69, 87, 32, 83, + 72, 65, 68, 69, 82, 32, 85, 84, 73, 76, 73, 84, 73, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 13, + 10, 13, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40,118,101, 99, 51, + 32, 73,110, 99,111,109,105,110,103, 44, 32,118,101, 99, 51, 32, 78,111,114,109, 97,108, 44, 32,102,108,111, 97,116, 32,101,116, + 97, 41, 13, 10,123, 13, 10, 32, 32, 32, 32, 47, 42, 32, 99,111,109,112,117,116,101, 32,102,114,101,115,110,101,108, 32,114,101, +102,108,101, 99,116, 97,110, 99,101, 32,119,105,116,104,111,117,116, 32,101,120,112,108,105, 99,105,116,108,121, 32, 99,111,109, +112,117,116,105,110,103, 13, 10, 32, 32, 32, 32, 32, 32, 32,116,104,101, 32,114,101,102,114, 97, 99,116,101,100, 32,100,105,114, +101, 99,116,105,111,110, 32, 42, 47, 13, 10, 32, 32, 32, 32,102,108,111, 97,116, 32, 99, 32, 61, 32, 97, 98,115, 40,100,111,116, + 40, 73,110, 99,111,109,105,110,103, 44, 32, 78,111,114,109, 97,108, 41, 41, 59, 13, 10, 32, 32, 32, 32,102,108,111, 97,116, 32, +103, 32, 61, 32,101,116, 97, 32, 42, 32,101,116, 97, 32, 45, 32, 49, 46, 48, 32, 43, 32, 99, 32, 42, 32, 99, 59, 13, 10, 32, 32, + 32, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 59, 13, 10, 13, 10, 32, 32, 32, 32,105,102, 40,103, 32, 62, 32, 48, 46, + 48, 41, 32,123, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32,103, 32, 61, 32,115,113,114,116, 40,103, 41, 59, 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32,102,108,111, 97,116, 32, 65, 32, 61, 40,103, 32, 45, 32, 99, 41, 47, 40,103, 32, 43, 32, 99, 41, 59, 13, 10, 32, + 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, 32, 66, 32, 61, 40, 99, 32, 42, 40,103, 32, 43, 32, 99, 41, 45, 32, 49, 46, 48, + 41, 47, 40, 99, 32, 42, 40,103, 32, 45, 32, 99, 41, 43, 32, 49, 46, 48, 41, 59, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101, +115,117,108,116, 32, 61, 32, 48, 46, 53, 32, 42, 32, 65, 32, 42, 32, 65, 32, 42, 40, 49, 46, 48, 32, 43, 32, 66, 32, 42, 32, 66, + 41, 59, 13, 10, 32, 32, 32, 32,125, 13, 10, 32, 32, 32, 32,101,108,115,101, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115, +117,108,116, 32, 61, 32, 49, 46, 48, 59, 32, 32, 47, 42, 32, 84, 73, 82, 32, 40,110,111, 32,114,101,102,114, 97, 99,116,101,100, + 32, 99,111,109,112,111,110,101,110,116, 41, 32, 42, 47, 13, 10, 13, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,114,101,115, +117,108,116, 59, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,116, 32,104,121,112,111,116, 40,102,108,111, 97,116, 32,120, 44, 32, +102,108,111, 97,116, 32,121, 41, 13, 10,123, 13, 10, 9,114,101,116,117,114,110, 32,115,113,114,116, 40,120, 42,120, 32, 43, 32, +121, 42,121, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, 69, 87, 32, 83, 72, 65, + 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 13, 10, 13, 10, 35,100, +101,102,105,110,101, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 32, 51, 13, 10, 13, 10, 47, 42, 32, 98,115,100,102,115, 32, 42, + 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40,118,101, 99, 52, + 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, + 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9, 47, 42, 32, 97,109, 98,105,101,110, +116, 32,108,105,103,104,116, 32, 42, 47, 13, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 50, 41, 59, + 13, 10, 13, 10, 9, 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 13, 10, 9, +102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, + 43, 43, 41, 32,123, 13, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103, +108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 13, 10, + 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83, +111,117,114, 99,101, 91,105, 93, 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, 13, 10, 13, 10, 9, 9,102,108,111, 97,116, + 32, 98,115,100,102, 32, 61, 32,109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111, +110, 41, 44, 32, 48, 46, 48, 41, 59, 13, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 42, + 98,115,100,102, 59, 13, 10, 9,125, 13, 10, 13, 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111, +108,111,114, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98, +115,100,102, 95,103,108,111,115,115,121, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117, +103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, + 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9, 47, 42, 32, 97,109, 98,105,101,110,116, 32,108,105,103,104,116, 32, 42, + 47, 13, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 50, 41, 59, 13, 10, 13, 10, 9, 47, 42, 32,100, +105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 13, 10, 9,102,111,114, 40,105,110,116, 32,105, + 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, 43, 43, 41, 32,123, 13, 10, 9, 9, +118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111, +117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 13, 10, 9, 9,118,101, 99, 51, 32, 72, 32, + 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,104, 97,108,102, 86,101, 99,116,111,114, 46,120, +121,122, 59, 13, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 32, 61, 32,103,108, 95, 76, +105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, 13, 10, 9, 9,118,101, + 99, 51, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, + 99,101, 91,105, 93, 46,115,112,101, 99,117,108, 97,114, 46,114,103, 98, 59, 13, 10, 13, 10, 9, 9, 47, 42, 32,119,101, 32,109, +105,120, 32,105,110, 32,115,111,109,101, 32,100,105,102,102,117,115,101, 32,115,111, 32,108,111,119, 32,114,111,117,103,104,110, +101,115,115, 32,115,116,105,108,108, 32,115,104,111,119,115, 32,117,112, 32, 42, 47, 13, 10, 9, 9,102,108,111, 97,116, 32, 98, +115,100,102, 32, 61, 32, 48, 46, 53, 42,112,111,119, 40,109, 97,120, 40,100,111,116, 40, 78, 44, 32, 72, 41, 44, 32, 48, 46, 48, + 41, 44, 32, 49, 46, 48, 47,114,111,117,103,104,110,101,115,115, 41, 59, 13, 10, 9, 9, 98,115,100,102, 32, 43, 61, 32, 48, 46, + 53, 42,109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, 46, + 48, 41, 59, 13, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 42, 98,115,100,102, 59, + 13, 10, 9,125, 13, 10, 13, 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114, +103, 98, 44, 32, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95, 97, +110,105,115,111,116,114,111,112,105, 99, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117, +103,104,110,101,115,115, 85, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 86, 44, 32,118,101, 99, 51, 32, + 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, + 9,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, + 44, 32,114,101,115,117,108,116, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95, +103,108, 97,115,115, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115, +115, 44, 32,102,108,111, 97,116, 32,105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117, +116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105, +102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 13, 10,125, + 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,116,114, 97,110,115,108,117, 99,101,110,116, 40,118, +101, 99, 52, 32, 99,111,108,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117, +108,116, 41, 13, 10,123, 13, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, + 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111, +100,101, 95, 98,115,100,102, 95,116,114, 97,110,115,112, 97,114,101,110,116, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9, 47, 42, 32,116,104,105,115, 32,105,115, +110, 39,116, 32,114,105,103,104,116, 32, 42, 47, 13, 10, 9,114,101,115,117,108,116, 46,114, 32, 61, 32, 99,111,108,111,114, 46, +114, 59, 13, 10, 9,114,101,115,117,108,116, 46,103, 32, 61, 32, 99,111,108,111,114, 46,103, 59, 13, 10, 9,114,101,115,117,108, +116, 46, 98, 32, 61, 32, 99,111,108,111,114, 46, 98, 59, 13, 10, 9,114,101,115,117,108,116, 46, 97, 32, 61, 32, 48, 46, 48, 59, + 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,118,101,108,118,101,116, 40,118,101, 99, + 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,105,103,109, 97, 44, 32,118,101, 99, 51, 32, 78, 44, 32,111,117, +116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105, +102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 13, 10,125, + 13, 10, 13, 10, 47, 42, 32,101,109,105,115,115,105,111,110, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, +101,109,105,115,115,105,111,110, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,116,114,101,110, +103,116,104, 44, 32,118,101, 99, 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 13, 10,123, + 13, 10, 9,114,101,115,117,108,116, 32, 61, 32, 99,111,108,111,114, 42,115,116,114,101,110,103,116,104, 59, 13, 10,125, 13, 10, + 13, 10, 47, 42, 32, 99,108,111,115,117,114,101,115, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,109,105, +120, 95,115,104, 97,100,101,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 49, + 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 41, + 13, 10,123, 13, 10, 9,115,104, 97,100,101,114, 32, 61, 32,109,105,120, 40,115,104, 97,100,101,114, 49, 44, 32,115,104, 97,100, +101,114, 50, 44, 32,102, 97, 99, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95, 97,100,100, 95,115, +104, 97,100,101,114, 40,118,101, 99, 52, 32,115,104, 97,100,101,114, 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 50, + 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 41, 13, 10,123, 13, 10, 9,115,104, 97,100,101,114, 32, 61, + 32,115,104, 97,100,101,114, 49, 32, 43, 32,115,104, 97,100,101,114, 50, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 32,102,114,101, +115,110,101,108, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,102,114,101,115,110,101,108, 40,102,108,111, + 97,116, 32,105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,114,101,115,117,108,116, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,101,116, 97, 32, 61, 32,109, 97,120, 40,105, +111,114, 44, 32, 48, 46, 48, 48, 48, 48, 49, 41, 59, 13, 10, 9,114,101,115,117,108,116, 32, 61, 32,102,114,101,115,110,101,108, + 95,100,105,101,108,101, 99,116,114,105, 99, 40, 73, 44, 32, 78, 44, 32,101,116, 97, 41, 59, 32, 47, 47, 98, 97, 99,107,102, 97, + 99,105,110,103, 40, 41, 63, 32, 49, 46, 48, 47,101,116, 97, 58, 32,101,116, 97, 41, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 32, +103,101,111,109,101,116,114,121, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,103,101,111,109,101,116,114, +121, 40,118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,116,111,119,111,114,108,100, 44, 13, + 10, 9,111,117,116, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111, +114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 13, 10, 9,111,117,116, 32,118,101, + 99, 51, 32,116,114,117,101, 95,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,109,105,110, +103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112, 97,114, 97,109,101,116,114,105, 99, 44, 13, 10, 9,111,117,116, 32,102,108, +111, 97,116, 32, 98, 97, 99,107,102, 97, 99,105,110,103, 41, 13, 10,123, 13, 10, 9,112,111,115,105,116,105,111,110, 32, 61, 32, + 40,116,111,119,111,114,108,100, 42,118,101, 99, 52, 40, 73, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 13, 10, 9,110,111, +114,109, 97,108, 32, 61, 32, 78, 59, 13, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, + 13, 10, 9,116,114,117,101, 95,110,111,114,109, 97,108, 32, 61, 32, 78, 59, 13, 10, 9,105,110, 99,111,109,105,110,103, 32, 61, + 32, 73, 59, 13, 10, 9,112, 97,114, 97,109,101,116,114,105, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 13, 10, 9, + 98, 97, 99,107,102, 97, 99,105,110,103, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100, +101, 95,116,101,120, 95, 99,111,111,114,100, 40,118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, + 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 13, 10, 9,118,101, + 99, 51, 32, 97,116,116,114, 95,111,114, 99,111, 44, 32,118,101, 99, 51, 32, 97,116,116,114, 95,117,118, 44, 13, 10, 9,111,117, +116, 32,118,101, 99, 51, 32,103,101,110,101,114, 97,116,101,100, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97, +108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 44, + 13, 10, 9,111,117,116, 32,118,101, 99, 51, 32, 99, 97,109,101,114, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,119,105,110, +100,111,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102,108,101, 99,116,105,111,110, 41, 13, 10,123, 13, 10, 9,103, +101,110,101,114, 97,116,101,100, 32, 61, 32, 97,116,116,114, 95,111,114, 99,111, 59, 13, 10, 9,110,111,114,109, 97,108, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40, 40,111, 98,105,110,118,109, 97,116, 42, 40,118,105,101,119,105,110,118,109, 97,116, + 42,118,101, 99, 52, 40, 78, 44, 32, 48, 46, 48, 41, 41, 41, 46,120,121,122, 41, 59, 13, 10, 9,117,118, 32, 61, 32, 97,116,116, +114, 95,117,118, 59, 13, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 73, 59, 13, 10, 9, 99, 97,109,101,114, 97, 32, 61, 32, 73, + 59, 13, 10, 9,119,105,110,100,111,119, 32, 61, 32,103,108, 95, 70,114, 97,103, 67,111,111,114,100, 46,120,121,122, 59, 13, 10, + 9,114,101,102,108,101, 99,116,105,111,110, 32, 61, 32,114,101,102,108,101, 99,116, 40, 78, 44, 32, 73, 41, 59, 13, 10, 13, 10, +125, 13, 10, 13, 10, 47, 42, 32,116,101,120,116,117,114,101,115, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, + 95,116,101,120, 95,103,114, 97,100,105,101,110,116, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 52, 32, + 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, + 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, + 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99,104,101, 99,107,101,114, 40,118,101, 99, 51, 32, 99,111, 44, 32, +118,101, 99, 52, 32, 99,111,108,111,114, 49, 44, 32,118,101, 99, 52, 32, 99,111,108,111,114, 50, 44, 32,102,108,111, 97,116, 32, +115, 99, 97,108,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, + 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9, +102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99, +108,111,117,100,115, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,111,117,116, 32,118, +101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9, 99, +111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10, +125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,101,110,118,105,114,111,110,109,101,110,116, 40,118, +101, 99, 51, 32, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, + 99,111,108,111,114, 41, 13, 10,123, 13, 10, 9,102,108,111, 97,116, 32,117, 32, 61, 32, 40, 97,116, 97,110, 40, 99,111, 46,121, + 44, 32, 99,111, 46,120, 41, 32, 43, 32, 77, 95, 80, 73, 41, 47, 40, 50, 46, 48, 42, 77, 95, 80, 73, 41, 59, 13, 10, 9,102,108, +111, 97,116, 32,118, 32, 61, 32, 97,116, 97,110, 40, 99,111, 46,122, 44, 32,104,121,112,111,116, 40, 99,111, 46,120, 44, 32, 99, +111, 46,121, 41, 41, 47, 77, 95, 80, 73, 32, 43, 32, 48, 46, 53, 59, 13, 10, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101, +120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,118,101, 99, 50, 40,117, 44, 32,118, 41, 41, 59, 13, 10,125, 13, 10, 13, 10, +118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32, 99,111, 44, 32,115, 97,109, +112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114, +101, 50, 68, 40,105,109, 97, 44, 32, 99,111, 46,120,121, 41, 59, 13, 10, 32, 32, 32, 32, 97,108,112,104, 97, 32, 61, 32, 99,111, +108,111,114, 46, 97, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,109, 97,103,105, 99, + 40,118,101, 99, 51, 32,112, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,105,115,116, +111,114,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, + 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, +109,117,115,103,114, 97,118,101, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102, +108,111, 97,116, 32,100,101,116, 97,105,108, 44, 32,102,108,111, 97,116, 32,100,105,109,101,110,115,105,111,110, 44, 32,102,108, +111, 97,116, 32,108, 97, 99,117,110, 97,114,105,116,121, 44, 32,102,108,111, 97,116, 32,111,102,102,115,101,116, 44, 32,102,108, +111, 97,116, 32,103, 97,105,110, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, + 13, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101, +120, 95,110,111,105,115,101, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108, +111, 97,116, 32,100,101,116, 97,105,108, 44, 32,102,108,111, 97,116, 32,100,105,115,116,111,114,116,105,111,110, 44, 32,111,117, +116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, + 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, + 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,115,107,121, 40,118,101, 99, 51, 32, 99, +111, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32, +118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,118, +111,114,111,110,111,105, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,111,117,116, + 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 13, 10,123, 13, 10, + 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, + 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,119, 97,118,101, 40,118,101, 99, 51, 32, 99, +111, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,116, 32,100,105,115,116,111,114,116,105,111,110, + 44, 32,102,108,111, 97,116, 32,100,101,116, 97,105,108, 44, 32,102,108,111, 97,116, 32,100,101,116, 97,105,108, 95,115, 99, 97, +108,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, + 99, 41, 13, 10,123, 13, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 13, 10, 9,102, 97, 99, + 32, 61, 32, 49, 46, 48, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 32,108,105,103,104,116, 32,112, 97,116,104, 32, 42, 47, 13, 10, + 13, 10,118,111,105,100, 32,110,111,100,101, 95,108,105,103,104,116, 95,112, 97,116,104, 40, 13, 10, 9,111,117,116, 32,102,108, +111, 97,116, 32,105,115, 95, 99, 97,109,101,114, 97, 95,114, 97,121, 44, 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105, +115, 95,115,104, 97,100,111,119, 95,114, 97,121, 44, 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,100,105,102, +102,117,115,101, 95,114, 97,121, 44, 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,103,108,111,115,115,121, 95, +114, 97,121, 44, 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,115,105,110,103,117,108, 97,114, 95,114, 97,121, + 44, 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,114,101,102,108,101, 99,116,105,111,110, 95,114, 97,121, 44, + 13, 10, 9,111,117,116, 32,102,108,111, 97,116, 32,105,115, 95,116,114, 97,110,115,109,105,115,115,105,111,110, 95,114, 97,121, + 41, 13, 10,123, 13, 10, 9,105,115, 95, 99, 97,109,101,114, 97, 95,114, 97,121, 32, 61, 32, 49, 46, 48, 59, 13, 10, 9,105,115, + 95,115,104, 97,100,111,119, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,105,115, 95,100,105,102,102,117,115,101, 95, +114, 97,121, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,105,115, 95,103,108,111,115,115,121, 95,114, 97,121, 32, 61, 32, 48, 46, 48, + 59, 13, 10, 9,105,115, 95,115,105,110,103,117,108, 97,114, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,105,115, 95, +114,101,102,108,101, 99,116,105,111,110, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 13, 10, 9,105,115, 95,116,114, 97,110,115, +109,105,115,115,105,111,110, 95,114, 97,121, 32, 61, 32, 48, 46, 48, 59, 13, 10,125, 13, 10, 13, 10, 47, 42, 32,111,117,116,112, +117,116, 32, 42, 47, 13, 10, 13, 10,118,111,105,100, 32,110,111,100,101, 95,111,117,116,112,117,116, 95,109, 97,116,101,114,105, + 97,108, 40,118,101, 99, 52, 32,115,117,114,102, 97, 99,101, 44, 32,118,101, 99, 52, 32,118,111,108,117,109,101, 44, 32,102,108, +111, 97,116, 32,100,105,115,112,108, 97, 99,101,109,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108, +116, 41, 13, 10,123, 13, 10, 9,114,101,115,117,108,116, 32, 61, 32,115,117,114,102, 97, 99,101, 59, 13, 10,125, 13, 10, 13, 10, + 0}; + diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl new file mode 100644 index 00000000000..5f0de8ae0fd --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl @@ -0,0 +1,16 @@ +uniform vec2 ScaleU; +uniform sampler2D textureSource; + +void main() +{ + vec4 color = vec4(0.0); + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( -3.0*ScaleU.x, -3.0*ScaleU.y ) ) * 0.015625; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( -2.0*ScaleU.x, -2.0*ScaleU.y ) )*0.09375; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( -1.0*ScaleU.x, -1.0*ScaleU.y ) )*0.234375; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( 0.0 , 0.0) )*0.3125; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( 1.0*ScaleU.x, 1.0*ScaleU.y ) )*0.234375; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( 2.0*ScaleU.x, 2.0*ScaleU.y ) )*0.09375; + color += texture2D( textureSource, gl_TexCoord[0].st + vec2( 3.0*ScaleU.x, -3.0*ScaleU.y ) ) * 0.015625; + + gl_FragColor = color; +} diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl.c b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl.c new file mode 100644 index 00000000000..3419a1f6936 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl.c @@ -0,0 +1,33 @@ +/* DataToC output of file <gpu_shader_sep_gaussian_blur_frag_glsl> */ + +int datatoc_gpu_shader_sep_gaussian_blur_frag_glsl_size = 848; +char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[] = { +117,110,105,102,111,114,109, 32,118,101, 99, 50, 32, 83, 99, 97, +108,101, 85, 59, 13, 10,117,110,105,102,111,114,109, 32,115, 97,109,112,108,101,114, 50, 68, 32,116,101,120,116,117,114,101, 83, +111,117,114, 99,101, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13, 10,123, 13, 10, 9,118,101, 99, 52, 32, + 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, 61, 32,116,101, +120,116,117,114,101, 50, 68, 40, 32,116,101,120,116,117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84,101,120, 67,111, +111,114,100, 91, 48, 93, 46,115,116, 32, 43, 32,118,101, 99, 50, 40, 32, 45, 51, 46, 48, 42, 83, 99, 97,108,101, 85, 46,120, 44, + 32, 45, 51, 46, 48, 42, 83, 99, 97,108,101, 85, 46,121, 32, 41, 32, 41, 32, 42, 32, 48, 46, 48, 49, 53, 54, 50, 53, 59, 13, 10, + 9, 99,111,108,111,114, 32, 43, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 32,116,101,120,116,117,114,101, 83,111,117,114, + 99,101, 44, 32,103,108, 95, 84,101,120, 67,111,111,114,100, 91, 48, 93, 46,115,116, 32, 43, 32,118,101, 99, 50, 40, 32, 45, 50, + 46, 48, 42, 83, 99, 97,108,101, 85, 46,120, 44, 32, 45, 50, 46, 48, 42, 83, 99, 97,108,101, 85, 46,121, 32, 41, 32, 41, 42, 48, + 46, 48, 57, 51, 55, 53, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 32,116,101, +120,116,117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84,101,120, 67,111,111,114,100, 91, 48, 93, 46,115,116, 32, 43, + 32,118,101, 99, 50, 40, 32, 45, 49, 46, 48, 42, 83, 99, 97,108,101, 85, 46,120, 44, 32, 45, 49, 46, 48, 42, 83, 99, 97,108,101, + 85, 46,121, 32, 41, 32, 41, 42, 48, 46, 50, 51, 52, 51, 55, 53, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, 61, 32,116,101,120, +116,117,114,101, 50, 68, 40, 32,116,101,120,116,117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84,101,120, 67,111,111, +114,100, 91, 48, 93, 46,115,116, 32, 43, 32,118,101, 99, 50, 40, 32, 48, 46, 48, 32, 44, 32, 48, 46, 48, 41, 32, 41, 42, 48, 46, + 51, 49, 50, 53, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 32,116,101,120,116, +117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84,101,120, 67,111,111,114,100, 91, 48, 93, 46,115,116, 32, 43, 32,118, +101, 99, 50, 40, 32, 49, 46, 48, 42, 83, 99, 97,108,101, 85, 46,120, 44, 32, 32, 49, 46, 48, 42, 83, 99, 97,108,101, 85, 46,121, + 32, 41, 32, 41, 42, 48, 46, 50, 51, 52, 51, 55, 53, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, 61, 32,116,101,120,116,117,114, +101, 50, 68, 40, 32,116,101,120,116,117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84,101,120, 67,111,111,114,100, 91, + 48, 93, 46,115,116, 32, 43, 32,118,101, 99, 50, 40, 32, 50, 46, 48, 42, 83, 99, 97,108,101, 85, 46,120, 44, 32, 32, 50, 46, 48, + 42, 83, 99, 97,108,101, 85, 46,121, 32, 41, 32, 41, 42, 48, 46, 48, 57, 51, 55, 53, 59, 13, 10, 9, 99,111,108,111,114, 32, 43, + 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 32,116,101,120,116,117,114,101, 83,111,117,114, 99,101, 44, 32,103,108, 95, 84, +101,120, 67,111,111,114,100, 91, 48, 93, 46,115,116, 32, 43, 32,118,101, 99, 50, 40, 32, 51, 46, 48, 42, 83, 99, 97,108,101, 85, + 46,120, 44, 32, 45, 51, 46, 48, 42, 83, 99, 97,108,101, 85, 46,121, 32, 41, 32, 41, 32, 42, 32, 48, 46, 48, 49, 53, 54, 50, 53, + 59, 13, 10, 13, 10, 9,103,108, 95, 70,114, 97,103, 67,111,108,111,114, 32, 61, 32, 99,111,108,111,114, 59, 13, 10,125, 13, 10, + 0}; + diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl new file mode 100644 index 00000000000..9bb2e7ad469 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl @@ -0,0 +1,6 @@ + +void main() +{ + gl_Position = ftransform(); + gl_TexCoord[0] = gl_MultiTexCoord0; +} diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl.c b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl.c new file mode 100644 index 00000000000..5eea72503ce --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl.c @@ -0,0 +1,9 @@ +/* DataToC output of file <gpu_shader_sep_gaussian_blur_vert_glsl> */ + +int datatoc_gpu_shader_sep_gaussian_blur_vert_glsl_size = 92; +char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[] = { + 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13, 10,123, 13, 10, 9, 9,103,108, 95, 80,111,115,105,116, +105,111,110, 32, 61, 32,102,116,114, 97,110,115,102,111,114,109, 40, 41, 59, 13, 10, 9, 9,103,108, 95, 84,101,120, 67,111,111, +114,100, 91, 48, 93, 32, 61, 32, 32,103,108, 95, 77,117,108,116,105, 84,101,120, 67,111,111,114,100, 48, 59, 13, 10,125, 13, 10, + 0}; + diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl b/source/blender/gpu/shaders/gpu_shader_vertex.glsl index a86431bdd7a..a86431bdd7a 100644 --- a/source/blender/gpu/intern/gpu_shader_vertex.glsl +++ b/source/blender/gpu/shaders/gpu_shader_vertex.glsl diff --git a/source/blender/gpu/shaders/gpu_shader_vertex.glsl.c b/source/blender/gpu/shaders/gpu_shader_vertex.glsl.c new file mode 100644 index 00000000000..bd827efd1b7 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_vertex.glsl.c @@ -0,0 +1,14 @@ +/* DataToC output of file <gpu_shader_vertex_glsl> */ + +int datatoc_gpu_shader_vertex_glsl_size = 240; +char datatoc_gpu_shader_vertex_glsl[] = { + 13, 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, + 97,114,112,111,115,105,116,105,111,110, 59, 13, 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,110,111,114, +109, 97,108, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13, 10,123, 13, 10, 9,118,101, 99, 52, 32, 99,111, + 32, 61, 32,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 86,101,114,116,101, +120, 59, 13, 10, 13, 10, 9,118, 97,114,112,111,115,105,116,105,111,110, 32, 61, 32, 99,111, 46,120,121,122, 59, 13, 10, 9,118, + 97,114,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,103,108, 95, 78,111,114,109, 97,108, 77, 97, +116,114,105,120, 32, 42, 32,103,108, 95, 78,111,114,109, 97,108, 41, 59, 13, 10, 9,103,108, 95, 80,111,115,105,116,105,111,110, + 32, 61, 32,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 32, 42, 32, 99,111, 59, 13, 10, 13, 10, + 0}; + diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl new file mode 100644 index 00000000000..4838289ff9e --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl @@ -0,0 +1,21 @@ +/** + * This fragment shader was initially found at http://fabiensanglard.net/shadowmappingVSM/index.php + */ + +varying vec4 v_position; + +void main() +{ + float depth = v_position.z / v_position.w; + depth = depth * 0.5 + 0.5; + + float moment1 = depth; + float moment2 = depth * depth; + + // Adjusting moments using partial derivative + float dx = dFdx(depth); + float dy = dFdy(depth); + moment2 += 0.25*(dx*dx+dy*dy); + + gl_FragColor = vec4(moment1, moment2, 0.0, 0.0); +} diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl.c b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl.c new file mode 100644 index 00000000000..c4f4f76edaf --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl.c @@ -0,0 +1,22 @@ +/* DataToC output of file <gpu_shader_vsm_store_frag_glsl> */ + +int datatoc_gpu_shader_vsm_store_frag_glsl_size = 482; +char datatoc_gpu_shader_vsm_store_frag_glsl[] = { + 47, 42, + 42, 13, 10, 32, 42, 32, 84,104,105,115, 32,102,114, 97,103,109,101,110,116, 32,115,104, 97,100,101,114, 32,119, 97,115, 32,105, +110,105,116,105, 97,108,108,121, 32,102,111,117,110,100, 32, 97,116, 32,104,116,116,112, 58, 47, 47,102, 97, 98,105,101,110,115, + 97,110,103,108, 97,114,100, 46,110,101,116, 47,115,104, 97,100,111,119,109, 97,112,112,105,110,103, 86, 83, 77, 47,105,110,100, +101,120, 46,112,104,112, 13, 10, 32, 42, 47, 13, 10, 13, 10,118, 97,114,121,105,110,103, 32,118,101, 99, 52, 32,118, 95,112,111, +115,105,116,105,111,110, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13, 10,123, 13, 10, 9,102,108,111, 97, +116, 32,100,101,112,116,104, 32, 61, 32,118, 95,112,111,115,105,116,105,111,110, 46,122, 32, 47, 32,118, 95,112,111,115,105,116, +105,111,110, 46,119, 59, 13, 10, 9,100,101,112,116,104, 32, 61, 32,100,101,112,116,104, 32, 42, 32, 48, 46, 53, 32, 43, 32, 48, + 46, 53, 59, 13, 10, 13, 10, 9,102,108,111, 97,116, 32,109,111,109,101,110,116, 49, 32, 61, 32,100,101,112,116,104, 59, 13, 10, + 9,102,108,111, 97,116, 32,109,111,109,101,110,116, 50, 32, 61, 32,100,101,112,116,104, 32, 42, 32,100,101,112,116,104, 59, 13, + 10, 13, 10, 9, 47, 47, 32, 65,100,106,117,115,116,105,110,103, 32,109,111,109,101,110,116,115, 32,117,115,105,110,103, 32,112, + 97,114,116,105, 97,108, 32,100,101,114,105,118, 97,116,105,118,101, 13, 10, 9,102,108,111, 97,116, 32,100,120, 32, 61, 32,100, + 70,100,120, 40,100,101,112,116,104, 41, 59, 13, 10, 9,102,108,111, 97,116, 32,100,121, 32, 61, 32,100, 70,100,121, 40,100,101, +112,116,104, 41, 59, 13, 10, 9,109,111,109,101,110,116, 50, 32, 43, 61, 32, 48, 46, 50, 53, 42, 40,100,120, 42,100,120, 43,100, +121, 42,100,121, 41, 59, 13, 10, 13, 10, 9,103,108, 95, 70,114, 97,103, 67,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,109, +111,109,101,110,116, 49, 44, 32,109,111,109,101,110,116, 50, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 13, 10,125, 13, 10, + 0}; + diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl new file mode 100644 index 00000000000..224c3e78adc --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl @@ -0,0 +1,7 @@ +varying vec4 v_position; + +void main() +{ + gl_Position = ftransform(); + v_position = gl_Position; +} diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl.c b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl.c new file mode 100644 index 00000000000..51b9cab372f --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl.c @@ -0,0 +1,10 @@ +/* DataToC output of file <gpu_shader_vsm_store_vert_glsl> */ + +int datatoc_gpu_shader_vsm_store_vert_glsl_size = 105; +char datatoc_gpu_shader_vsm_store_vert_glsl[] = { +118, 97,114,121,105,110,103, 32,118, +101, 99, 52, 32,118, 95,112,111,115,105,116,105,111,110, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13, 10, +123, 13, 10, 9,103,108, 95, 80,111,115,105,116,105,111,110, 32, 61, 32,102,116,114, 97,110,115,102,111,114,109, 40, 41, 59, 13, + 10, 9,118, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, 95, 80,111,115,105,116,105,111,110, 59, 13, 10,125, 13, 10, + 0}; + diff --git a/source/blender/ikplugin/intern/iksolver_plugin.c b/source/blender/ikplugin/intern/iksolver_plugin.c index 8d4d01b7e97..08c5e24aca6 100644 --- a/source/blender/ikplugin/intern/iksolver_plugin.c +++ b/source/blender/ikplugin/intern/iksolver_plugin.c @@ -425,10 +425,10 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree) goalpos[2]= fac*goalpos[2] + mfac*world_pose[3][2]; /* blend rotation */ - mat3_to_quat( q1,goalrot); - mat4_to_quat( q2,world_pose); + mat3_to_quat(q1, goalrot); + mat4_to_quat(q2, world_pose); interp_qt_qtqt(q, q1, q2, mfac); - quat_to_mat3( goalrot,q); + quat_to_mat3(goalrot, q); } iktarget= iktree[target->tip]; diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp index a288f330224..2e437c627a2 100644 --- a/source/blender/ikplugin/intern/itasc_plugin.cpp +++ b/source/blender/ikplugin/intern/itasc_plugin.cpp @@ -424,16 +424,16 @@ static IK_Data* get_ikdata(bPose *pose) } static double EulerAngleFromMatrix(const KDL::Rotation& R, int axis) { - double t = KDL::sqrt(R(0,0)*R(0,0) + R(0,1)*R(0,1)); + double t = KDL::sqrt(R(0, 0)*R(0, 0) + R(0, 1)*R(0, 1)); if (t > 16.0*KDL::epsilon) { - if (axis == 0) return -KDL::atan2(R(1,2), R(2,2)); - else if (axis == 1) return KDL::atan2(-R(0,2), t); - else return -KDL::atan2(R(0,1), R(0,0)); + if (axis == 0) return -KDL::atan2(R(1, 2), R(2, 2)); + else if (axis == 1) return KDL::atan2(-R(0, 2), t); + else return -KDL::atan2(R(0, 1), R(0, 0)); } else { - if (axis == 0) return -KDL::atan2(-R(2,1), R(1,1)); - else if (axis == 1) return KDL::atan2(-R(0,2), t); + if (axis == 0) return -KDL::atan2(-R(2, 1), R(1, 1)); + else if (axis == 1) return KDL::atan2(-R(0, 2), t); else return 0.0f; } } @@ -441,8 +441,8 @@ static double EulerAngleFromMatrix(const KDL::Rotation& R, int axis) static double ComputeTwist(const KDL::Rotation& R) { // qy and qw are the y and w components of the quaternion from R - double qy = R(0,2) - R(2,0); - double qw = R(0,0) + R(1,1) + R(2,2) + 1; + double qy = R(0, 2) - R(2, 0); + double qw = R(0, 0) + R(1, 1) + R(2, 2) + 1; double tau = 2*KDL::atan2(qy, qw); @@ -471,31 +471,31 @@ static void RemoveEulerAngleFromMatrix(KDL::Rotation& R, double angle, int axis) } #if 0 -static void GetEulerXZY(const KDL::Rotation& R, double& X,double& Z,double& Y) +static void GetEulerXZY(const KDL::Rotation& R, double& X, double& Z, double& Y) { - if (fabs(R(0,1)) > 1.0 - KDL::epsilon ) { - X = -KDL::sign(R(0,1)) * KDL::atan2(R(1,2), R(1,0)); - Z = -KDL::sign(R(0,1)) * KDL::PI / 2; + if (fabs(R(0, 1)) > 1.0 - KDL::epsilon ) { + X = -KDL::sign(R(0, 1)) * KDL::atan2(R(1, 2), R(1, 0)); + Z = -KDL::sign(R(0, 1)) * KDL::PI / 2; Y = 0.0; } else { - X = KDL::atan2(R(2,1), R(1,1)); - Z = KDL::atan2(-R(0,1), KDL::sqrt( KDL::sqr(R(0,0)) + KDL::sqr(R(0,2)))); - Y = KDL::atan2(R(0,2), R(0,0)); + X = KDL::atan2(R(2, 1), R(1, 1)); + Z = KDL::atan2(-R(0, 1), KDL::sqrt( KDL::sqr(R(0, 0)) + KDL::sqr(R(0, 2)))); + Y = KDL::atan2(R(0, 2), R(0, 0)); } } -static void GetEulerXYZ(const KDL::Rotation& R, double& X,double& Y,double& Z) +static void GetEulerXYZ(const KDL::Rotation& R, double& X, double& Y, double& Z) { - if (fabs(R(0,2)) > 1.0 - KDL::epsilon ) { - X = KDL::sign(R(0,2)) * KDL::atan2(-R(1,0), R(1,1)); - Y = KDL::sign(R(0,2)) * KDL::PI / 2; + if (fabs(R(0, 2)) > 1.0 - KDL::epsilon ) { + X = KDL::sign(R(0, 2)) * KDL::atan2(-R(1, 0), R(1, 1)); + Y = KDL::sign(R(0, 2)) * KDL::PI / 2; Z = 0.0; } else { - X = KDL::atan2(-R(1,2), R(2,2)); - Y = KDL::atan2(R(0,2), KDL::sqrt( KDL::sqr(R(0,0)) + KDL::sqr(R(0,1)))); - Z = KDL::atan2(-R(0,1), R(0,0)); + X = KDL::atan2(-R(1, 2), R(2, 2)); + Y = KDL::atan2(R(0, 2), KDL::sqrt( KDL::sqr(R(0, 0)) + KDL::sqr(R(0, 1)))); + Z = KDL::atan2(-R(0, 1), R(0, 0)); } } #endif @@ -804,16 +804,16 @@ static bool joint_callback(const iTaSC::Timestamp& timestamp, iTaSC::ConstraintV if (chan->rotmode > 0) { /* euler rotations (will cause gimble lock, but this can be alleviated a bit with rotation orders) */ - eulO_to_mat3( rmat,chan->eul, chan->rotmode); + eulO_to_mat3( rmat, chan->eul, chan->rotmode); } else if (chan->rotmode == ROT_MODE_AXISANGLE) { /* axis-angle - stored in quaternion data, but not really that great for 3D-changing orientations */ - axis_angle_to_mat3( rmat,&chan->quat[1], chan->quat[0]); + axis_angle_to_mat3( rmat, &chan->quat[1], chan->quat[0]); } else { /* quats are normalised before use to eliminate scaling issues */ normalize_qt(chan->quat); - quat_to_mat3( rmat,chan->quat); + quat_to_mat3(rmat, chan->quat); } KDL::Rotation jointRot( rmat[0][0], rmat[1][0], rmat[2][0], @@ -1388,7 +1388,7 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan) e_matrix& Wq = arm->getWq(); assert(Wq.cols() == (int)weights.size()); for (int q=0; q<Wq.cols(); q++) - Wq(q,q)=weights[q]; + Wq(q, q)=weights[q]; // get the inverse rest pose frame of the base to compute relative rest pose of end effectors // this is needed to handle the enforce parameter // ikscene->pchan[0] is the root channel of the tree diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h index 076f518585b..12d71be658e 100644 --- a/source/blender/imbuf/IMB_imbuf_types.h +++ b/source/blender/imbuf/IMB_imbuf_types.h @@ -1,17 +1,4 @@ /* - * IMB_imbuf_types.h (mar-2001 nzc) - * - * Types needed for using the image buffer. - * - * Imbuf is external code, slightly adapted to live in the Blender - * context. It requires an external jpeg module, and the avi-module - * (also external code) in order to function correctly. - * - * This file contains types and some constants that go with them. Most - * are self-explanatory (e.g. IS_amiga tests whether the buffer - * contains an Amiga-format file). - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -37,16 +24,27 @@ * * ***** END GPL LICENSE BLOCK ***** */ + +#ifndef __IMB_IMBUF_TYPES_H__ +#define __IMB_IMBUF_TYPES_H__ + /** * \file IMB_imbuf_types.h * \ingroup imbuf * \brief Contains defines and structs used throughout the imbuf module. * \todo Clean up includes. + * + * Types needed for using the image buffer. + * + * Imbuf is external code, slightly adapted to live in the Blender + * context. It requires an external jpeg module, and the avi-module + * (also external code) in order to function correctly. + * + * This file contains types and some constants that go with them. Most + * are self-explanatory (e.g. IS_amiga tests whether the buffer + * contains an Amiga-format file). */ -#ifndef __IMB_IMBUF_TYPES_H__ -#define __IMB_IMBUF_TYPES_H__ - struct ImMetaData; #define IB_MIPMAP_LEVELS 20 diff --git a/source/blender/imbuf/intern/IMB_allocimbuf.h b/source/blender/imbuf/intern/IMB_allocimbuf.h index 27be9ea1cab..047228926ee 100644 --- a/source/blender/imbuf/intern/IMB_allocimbuf.h +++ b/source/blender/imbuf/intern/IMB_allocimbuf.h @@ -1,7 +1,4 @@ /* - * allocimbuf.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/imbuf/intern/IMB_anim.h b/source/blender/imbuf/intern/IMB_anim.h index 8724f3804d0..6920d49ff51 100644 --- a/source/blender/imbuf/intern/IMB_anim.h +++ b/source/blender/imbuf/intern/IMB_anim.h @@ -1,7 +1,4 @@ /* - * allocimbuf.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/imbuf/intern/IMB_filter.h b/source/blender/imbuf/intern/IMB_filter.h index 6199cc13bb9..eaedb160c94 100644 --- a/source/blender/imbuf/intern/IMB_filter.h +++ b/source/blender/imbuf/intern/IMB_filter.h @@ -1,7 +1,4 @@ /* - * filter.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -27,6 +24,7 @@ * * ***** END GPL LICENSE BLOCK ***** */ + /** * \file IMB_filter.h * \ingroup imbuf diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index d0d141a8ef8..9f3ed6797be 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -133,8 +133,8 @@ static void free_anim_movie(struct anim *UNUSED(anim)) { ; } static int an_stringdec(const char *string, char* head, char *tail, unsigned short *numlen) { - unsigned short len,nume,nums=0; - short i,found=FALSE; + unsigned short len, nume, nums=0; + short i, found=FALSE; len=strlen(string); nume = len; @@ -156,7 +156,7 @@ static int an_stringdec(const char *string, char* head, char *tail, unsigned sho } } if (found) { - strcpy(tail ,&string[nume+1]); + strcpy(tail, &string[nume+1]); strcpy(head, string); head[nums]= '\0'; *numlen=nume-nums+1; @@ -255,7 +255,7 @@ void IMB_close_anim_proxies(struct anim *anim) IMB_free_indices(anim); } -struct anim * IMB_open_anim( const char * name, int ib_flags, int streamindex) +struct anim * IMB_open_anim(const char * name, int ib_flags, int streamindex) { struct anim * anim; @@ -285,7 +285,7 @@ static int startavi (struct anim *anim) streamcount = anim->streamindex; #endif - anim->avi = MEM_callocN (sizeof(AviMovie),"animavi"); + anim->avi = MEM_callocN (sizeof(AviMovie), "animavi"); if (anim->avi == NULL) { printf("Can't open avi: %s\n", anim->name); @@ -676,7 +676,7 @@ static void ffmpeg_postprocess(struct anim * anim) uint8_t** dst = anim->pFrameRGB->data; int dstStride2[4] = { dstStride[0], 0, 0, 0 }; uint8_t* dst2[4] = { dst[0], 0, 0, 0 }; - int x,y,h,w; + int x, y, h, w; unsigned char* bottom; unsigned char* top; @@ -933,7 +933,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position, av_log(anim->pFormatCtx, AV_LOG_DEBUG, "FETCH: looking for PTS=%lld " "(pts_timebase=%g, frame_rate=%g, st_time=%lld)\n", - (long long int)pts_to_search,pts_time_base, frame_rate, st_time); + (long long int)pts_to_search, pts_time_base, frame_rate, st_time); if (anim->last_frame && anim->last_pts <= pts_to_search && anim->next_pts > pts_to_search) { @@ -1040,7 +1040,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position, anim->next_packet.stream_index = -1; } - /* memset(anim->pFrame,...) ?? */ + /* memset(anim->pFrame, ...) ?? */ if (ret >= 0) { ffmpeg_decode_video_frame_scan(anim, pts_to_search); diff --git a/source/blender/imbuf/intern/bmp.c b/source/blender/imbuf/intern/bmp.c index 06e1d75c5d0..bce3c70fd93 100644 --- a/source/blender/imbuf/intern/bmp.c +++ b/source/blender/imbuf/intern/bmp.c @@ -192,18 +192,18 @@ struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags) } /* Couple of helper functions for writing our data */ -static int putIntLSB(unsigned int ui,FILE *ofile) +static int putIntLSB(unsigned int ui, FILE *ofile) { - putc((ui>>0)&0xFF,ofile); - putc((ui>>8)&0xFF,ofile); - putc((ui>>16)&0xFF,ofile); - return putc((ui>>24)&0xFF,ofile); + putc((ui>>0)&0xFF, ofile); + putc((ui>>8)&0xFF, ofile); + putc((ui>>16)&0xFF, ofile); + return putc((ui>>24)&0xFF, ofile); } -static int putShortLSB(unsigned short us,FILE *ofile) +static int putShortLSB(unsigned short us, FILE *ofile) { - putc((us>>0)&0xFF,ofile); - return putc((us>>8)&0xFF,ofile); + putc((us>>0)&0xFF, ofile); + return putc((us>>8)&0xFF, ofile); } /* Found write info at http://users.ece.gatech.edu/~slabaugh/personal/c/bitmapUnix.c */ @@ -220,37 +220,37 @@ int imb_savebmp(struct ImBuf *ibuf, const char *name, int flags) bytesize = (ibuf->x * 3 + extrabytes) * ibuf->y; data = (uchar *) ibuf->rect; - ofile = BLI_fopen(name,"wb"); + ofile = BLI_fopen(name, "wb"); if (!ofile) return 0; - putShortLSB(19778,ofile); /* "BM" */ - putIntLSB(0,ofile); /* This can be 0 for BI_RGB bitmaps */ - putShortLSB(0,ofile); /* Res1 */ - putShortLSB(0,ofile); /* Res2 */ - putIntLSB(BMP_FILEHEADER_SIZE + sizeof(infoheader),ofile); - - putIntLSB(sizeof(infoheader),ofile); - putIntLSB(ibuf->x,ofile); - putIntLSB(ibuf->y,ofile); - putShortLSB(1,ofile); - putShortLSB(24,ofile); - putIntLSB(0,ofile); - putIntLSB(bytesize + BMP_FILEHEADER_SIZE + sizeof(infoheader),ofile); - putIntLSB(0,ofile); - putIntLSB(0,ofile); - putIntLSB(0,ofile); - putIntLSB(0,ofile); + putShortLSB(19778, ofile); /* "BM" */ + putIntLSB(0, ofile); /* This can be 0 for BI_RGB bitmaps */ + putShortLSB(0, ofile); /* Res1 */ + putShortLSB(0, ofile); /* Res2 */ + putIntLSB(BMP_FILEHEADER_SIZE + sizeof(infoheader), ofile); + + putIntLSB(sizeof(infoheader), ofile); + putIntLSB(ibuf->x, ofile); + putIntLSB(ibuf->y, ofile); + putShortLSB(1, ofile); + putShortLSB(24, ofile); + putIntLSB(0, ofile); + putIntLSB(bytesize + BMP_FILEHEADER_SIZE + sizeof(infoheader), ofile); + putIntLSB(0, ofile); + putIntLSB(0, ofile); + putIntLSB(0, ofile); + putIntLSB(0, ofile); /* Need to write out padded image data in bgr format */ for (y=0;y<ibuf->y;y++) { for (x=0;x<ibuf->x;x++) { ptr=(x + y * ibuf->x) * 4; - if (putc(data[ptr+2],ofile) == EOF) return 0; - if (putc(data[ptr+1],ofile) == EOF) return 0; - if (putc(data[ptr],ofile) == EOF) return 0; + if (putc(data[ptr+2], ofile) == EOF) return 0; + if (putc(data[ptr+1], ofile) == EOF) return 0; + if (putc(data[ptr], ofile) == EOF) return 0; } /* add padding here */ - for (t=0;t<extrabytes;t++) if (putc(0,ofile) == EOF) return 0; + for (t=0;t<extrabytes;t++) if (putc(0, ofile) == EOF) return 0; } if (ofile) { fflush(ofile); diff --git a/source/blender/imbuf/intern/cineon/cineonfile.h b/source/blender/imbuf/intern/cineon/cineonfile.h index ea321c87d48..e681153aa6e 100644 --- a/source/blender/imbuf/intern/cineon/cineonfile.h +++ b/source/blender/imbuf/intern/cineon/cineonfile.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/cineonfile.h - * \ingroup imbcineon - */ /* * Cineon image file format library definitions. * Cineon file format structures. @@ -29,6 +26,10 @@ #ifndef __CINEONFILE_H__ #define __CINEONFILE_H__ +/** \file blender/imbuf/intern/cineon/cineonfile.h + * \ingroup imbcineon + */ + #include "logImageCore.h" #ifdef __cplusplus diff --git a/source/blender/imbuf/intern/cineon/cineonlib.c b/source/blender/imbuf/intern/cineon/cineonlib.c index ae9f8e0fe97..a9001303679 100644 --- a/source/blender/imbuf/intern/cineon/cineonlib.c +++ b/source/blender/imbuf/intern/cineon/cineonlib.c @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/cineonlib.c - * \ingroup imbcineon - */ /* * Cineon image file format library routines. * @@ -22,6 +19,10 @@ * */ +/** \file blender/imbuf/intern/cineon/cineonlib.c + * \ingroup imbcineon + */ + #include "cineonlib.h" #include "cineonfile.h" diff --git a/source/blender/imbuf/intern/cineon/cineonlib.h b/source/blender/imbuf/intern/cineon/cineonlib.h index 48b5a001b9a..ef992c527b0 100644 --- a/source/blender/imbuf/intern/cineon/cineonlib.h +++ b/source/blender/imbuf/intern/cineon/cineonlib.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/cineonlib.h - * \ingroup imbcineon - */ /* * Cineon image file format library definitions. * Also handles DPX files (almost) @@ -26,6 +23,10 @@ #ifndef __CINEONLIB_H__ #define __CINEONLIB_H__ +/** \file blender/imbuf/intern/cineon/cineonlib.h + * \ingroup imbcineon + */ + #include "logImageCore.h" #ifdef __cplusplus diff --git a/source/blender/imbuf/intern/cineon/dpxfile.h b/source/blender/imbuf/intern/cineon/dpxfile.h index dc8fc0bdbd2..8846c7418d5 100644 --- a/source/blender/imbuf/intern/cineon/dpxfile.h +++ b/source/blender/imbuf/intern/cineon/dpxfile.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/dpxfile.h - * \ingroup imbcineon - */ /* * Cineon image file format library definitions. * Dpx file format structures. @@ -29,6 +26,10 @@ #ifndef __DPXFILE_H__ #define __DPXFILE_H__ +/** \file blender/imbuf/intern/cineon/dpxfile.h + * \ingroup imbcineon + */ + #include "logImageCore.h" #ifdef __cplusplus diff --git a/source/blender/imbuf/intern/cineon/dpxlib.c b/source/blender/imbuf/intern/cineon/dpxlib.c index c9b9901a495..a4b8c9d3f36 100644 --- a/source/blender/imbuf/intern/cineon/dpxlib.c +++ b/source/blender/imbuf/intern/cineon/dpxlib.c @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/dpxlib.c - * \ingroup imbcineon - */ /* * Dpx image file format library routines. * @@ -22,6 +19,10 @@ * */ +/** \file blender/imbuf/intern/cineon/dpxlib.c + * \ingroup imbcineon + */ + #include "dpxfile.h" #include "dpxlib.h" diff --git a/source/blender/imbuf/intern/cineon/dpxlib.h b/source/blender/imbuf/intern/cineon/dpxlib.h index b09c699ae5b..eb3937f2bf7 100644 --- a/source/blender/imbuf/intern/cineon/dpxlib.h +++ b/source/blender/imbuf/intern/cineon/dpxlib.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/dpxlib.h - * \ingroup imbcineon - */ /* * DPX image file format library definitions. * @@ -25,6 +22,10 @@ #ifndef __DPXLIB_H__ #define __DPXLIB_H__ +/** \file blender/imbuf/intern/cineon/dpxlib.h + * \ingroup imbcineon + */ + #ifdef __cplusplus extern "C" { #endif diff --git a/source/blender/imbuf/intern/cineon/logImageCore.c b/source/blender/imbuf/intern/cineon/logImageCore.c index e1f1500cb83..f772cc7d477 100644 --- a/source/blender/imbuf/intern/cineon/logImageCore.c +++ b/source/blender/imbuf/intern/cineon/logImageCore.c @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logImageCore.c - * \ingroup imbcineon - */ /* * Cineon image file format library routines. * @@ -22,6 +19,10 @@ * */ +/** \file blender/imbuf/intern/cineon/logImageCore.c + * \ingroup imbcineon + */ + #include "logImageCore.h" #include <time.h> /* strftime() */ diff --git a/source/blender/imbuf/intern/cineon/logImageCore.h b/source/blender/imbuf/intern/cineon/logImageCore.h index c8592621f08..7d88c10c2d6 100644 --- a/source/blender/imbuf/intern/cineon/logImageCore.h +++ b/source/blender/imbuf/intern/cineon/logImageCore.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logImageCore.h - * \ingroup imbcineon - */ /* * Cineon image file format library definitions. * Cineon and DPX common structures. @@ -30,6 +27,10 @@ #ifndef __LOGIMAGECORE_H__ #define __LOGIMAGECORE_H__ +/** \file blender/imbuf/intern/cineon/logImageCore.h + * \ingroup imbcineon + */ + #include <stdio.h> #include "logImageLib.h" diff --git a/source/blender/imbuf/intern/cineon/logImageLib.c b/source/blender/imbuf/intern/cineon/logImageLib.c index f97df005fc8..f479220d82c 100644 --- a/source/blender/imbuf/intern/cineon/logImageLib.c +++ b/source/blender/imbuf/intern/cineon/logImageLib.c @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logImageLib.c - * \ingroup imbcineon - */ /* * Cineon and DPX image file format library routines. * @@ -22,6 +19,10 @@ * */ +/** \file blender/imbuf/intern/cineon/logImageLib.c + * \ingroup imbcineon + */ + #include "cineonlib.h" #include "dpxlib.h" diff --git a/source/blender/imbuf/intern/cineon/logImageLib.h b/source/blender/imbuf/intern/cineon/logImageLib.h index 669e25d009f..1c24358e4ef 100644 --- a/source/blender/imbuf/intern/cineon/logImageLib.h +++ b/source/blender/imbuf/intern/cineon/logImageLib.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logImageLib.h - * \ingroup imbcineon - */ /* * Common library definitions for Cineon and DPX image files. * @@ -25,6 +22,10 @@ #ifndef __LOGIMAGELIB_H__ #define __LOGIMAGELIB_H__ +/** \file blender/imbuf/intern/cineon/logImageLib.h + * \ingroup imbcineon + */ + #ifdef __cplusplus extern "C" { #endif diff --git a/source/blender/imbuf/intern/cineon/logmemfile.c b/source/blender/imbuf/intern/cineon/logmemfile.c index 3db4241cc14..a9938582f2a 100644 --- a/source/blender/imbuf/intern/cineon/logmemfile.c +++ b/source/blender/imbuf/intern/cineon/logmemfile.c @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logmemfile.c - * \ingroup imbcineon - */ /* * Cineon image file format library routines. * @@ -21,6 +18,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ + +/** \file blender/imbuf/intern/cineon/logmemfile.c + * \ingroup imbcineon + */ + #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/source/blender/imbuf/intern/cineon/logmemfile.h b/source/blender/imbuf/intern/cineon/logmemfile.h index 2611463148e..df3589a70d3 100644 --- a/source/blender/imbuf/intern/cineon/logmemfile.h +++ b/source/blender/imbuf/intern/cineon/logmemfile.h @@ -1,6 +1,3 @@ -/** \file blender/imbuf/intern/cineon/logmemfile.h - * \ingroup imbcineon - */ /* * Cineon image file format library routines. * @@ -25,6 +22,10 @@ #ifndef __LOGMEMFILE_H__ #define __LOGMEMFILE_H__ +/** \file blender/imbuf/intern/cineon/logmemfile.h + * \ingroup imbcineon + */ + int logimage_fseek(void* logfile, intptr_t offsett, int origin); int logimage_fwrite(void *buffer, unsigned int size, unsigned int count, void *logfile); int logimage_fread(void *buffer, unsigned int size, unsigned int count, void *logfile); diff --git a/source/blender/imbuf/intern/dds/ColorBlock.h b/source/blender/imbuf/intern/dds/ColorBlock.h index e72b6253035..2bf362f2780 100644 --- a/source/blender/imbuf/intern/dds/ColorBlock.h +++ b/source/blender/imbuf/intern/dds/ColorBlock.h @@ -49,12 +49,12 @@ struct ColorBlock ColorBlock(const Image * img, uint x, uint y); void init(const Image * img, uint x, uint y); - void init(uint w, uint h, const uint * data, uint x, uint y); - void init(uint w, uint h, const float * data, uint x, uint y); + void init(uint w, uint h, const uint * data, uint x, uint y); + void init(uint w, uint h, const float * data, uint x, uint y); void swizzle(uint x, uint y, uint z, uint w); // 0=r, 1=g, 2=b, 3=a, 4=0xFF, 5=0 - bool isSingleColor(Color32 mask = Color32(0xFF, 0xFF, 0xFF, 0x00)) const; + bool isSingleColor(Color32 mask = Color32(0xFF, 0xFF, 0xFF, 0x00)) const; bool hasAlpha() const; diff --git a/source/blender/imbuf/intern/dds/DirectDrawSurface.h b/source/blender/imbuf/intern/dds/DirectDrawSurface.h index 23c8bbf2de3..ddae8826620 100644 --- a/source/blender/imbuf/intern/dds/DirectDrawSurface.h +++ b/source/blender/imbuf/intern/dds/DirectDrawSurface.h @@ -129,20 +129,20 @@ struct DDSHeader void setPixelFormat(uint bitcount, uint rmask, uint gmask, uint bmask, uint amask); void setDX10Format(uint format); void setNormalFlag(bool b); - void setSrgbFlag(bool b); + void setSrgbFlag(bool b); void setHasAlphaFlag(bool b); - void setUserVersion(int version); + void setUserVersion(int version); /*void swapBytes();*/ bool hasDX10Header() const; - uint signature() const; - uint toolVersion() const; - uint userVersion() const; - bool isNormalMap() const; - bool isSrgb() const; - bool hasAlpha() const; - uint d3d9Format() const; + uint signature() const; + uint toolVersion() const; + uint userVersion() const; + bool isNormalMap() const; + bool isSrgb() const; + bool hasAlpha() const; + uint d3d9Format() const; }; /// DirectDraw Surface. (DDS) diff --git a/source/blender/imbuf/intern/filter.c b/source/blender/imbuf/intern/filter.c index 0e6567d2c6b..bc5e85a3c55 100644 --- a/source/blender/imbuf/intern/filter.c +++ b/source/blender/imbuf/intern/filter.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -33,13 +31,10 @@ * \ingroup imbuf */ - #include "MEM_guardedalloc.h" #include "BLI_utildefines.h" - - #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" #include "IMB_filter.h" @@ -52,7 +47,7 @@ static void filtrow(unsigned char *point, int x) { - unsigned int c1,c2,c3,error; + unsigned int c1, c2, c3, error; if (x>1) { c1 = c2 = *point; @@ -72,7 +67,7 @@ static void filtrow(unsigned char *point, int x) static void filtrowf(float *point, int x) { - float c1,c2,c3; + float c1, c2, c3; if (x>1) { c1 = c2 = *point; @@ -92,7 +87,7 @@ static void filtrowf(float *point, int x) static void filtcolum(unsigned char *point, int y, int skip) { - unsigned int c1,c2,c3,error; + unsigned int c1, c2, c3, error; unsigned char *point2; if (y>1) { @@ -115,7 +110,7 @@ static void filtcolum(unsigned char *point, int y, int skip) static void filtcolumf(float *point, int y, int skip) { - float c1,c2,c3, *point2; + float c1, c2, c3, *point2; if (y>1) { c1 = c2 = *point; @@ -148,23 +143,23 @@ void IMB_filtery(struct ImBuf *ibuf) for (;x>0;x--) { if (point) { - if (ibuf->planes > 24) filtcolum(point,y,skip); + if (ibuf->planes > 24) filtcolum(point, y, skip); point++; - filtcolum(point,y,skip); + filtcolum(point, y, skip); point++; - filtcolum(point,y,skip); + filtcolum(point, y, skip); point++; - filtcolum(point,y,skip); + filtcolum(point, y, skip); point++; } if (pointf) { - if (ibuf->planes > 24) filtcolumf(pointf,y,skip); + if (ibuf->planes > 24) filtcolumf(pointf, y, skip); pointf++; - filtcolumf(pointf,y,skip); + filtcolumf(pointf, y, skip); pointf++; - filtcolumf(pointf,y,skip); + filtcolumf(pointf, y, skip); pointf++; - filtcolumf(pointf,y,skip); + filtcolumf(pointf, y, skip); pointf++; } } @@ -186,23 +181,23 @@ void imb_filterx(struct ImBuf *ibuf) for (;y>0;y--) { if (point) { - if (ibuf->planes > 24) filtrow(point,x); + if (ibuf->planes > 24) filtrow(point, x); point++; - filtrow(point,x); + filtrow(point, x); point++; - filtrow(point,x); + filtrow(point, x); point++; - filtrow(point,x); + filtrow(point, x); point+=skip; } if (pointf) { - if (ibuf->planes > 24) filtrowf(pointf,x); + if (ibuf->planes > 24) filtrowf(pointf, x); pointf++; - filtrowf(pointf,x); + filtrowf(pointf, x); pointf++; - filtrowf(pointf,x); + filtrowf(pointf, x); pointf++; - filtrowf(pointf,x); + filtrowf(pointf, x); pointf+=skip; } } @@ -304,7 +299,7 @@ void IMB_mask_filter_extend(char *mask, int width, int height) void IMB_mask_clear(ImBuf *ibuf, char *mask, int val) { - int x,y; + int x, y; if (ibuf->rect_float) { for (x=0; x<ibuf->x; x++) { for (y=0; y<ibuf->y; y++) { @@ -399,7 +394,7 @@ void IMB_filter_extend(struct ImBuf *ibuf, char *mask, int filter) if (!check_pixel_assigned(srcbuf, srcmask, index, depth, is_float)) { float tmp[4]; float wsum=0; - float acc[4]={0,0,0,0}; + float acc[4]={0, 0, 0, 0}; k = 0; if (check_pixel_assigned(srcbuf, srcmask, filter_make_index(x-1, y, width, height), depth, is_float) || diff --git a/source/blender/imbuf/intern/imageprocess.c b/source/blender/imbuf/intern/imageprocess.c index ba165d51e96..dea941c9716 100644 --- a/source/blender/imbuf/intern/imageprocess.c +++ b/source/blender/imbuf/intern/imageprocess.c @@ -23,17 +23,19 @@ * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/imbuf/intern/imageprocess.c + * \ingroup imbuf + * * This file was moved here from the src/ directory. It is meant to * deal with endianness. It resided in a general blending lib. The * other functions were only used during rendering. This single * function remained. It should probably move to imbuf/intern/util.c, - * but we'll keep it here for the time being. (nzc)*/ - -/** \file blender/imbuf/intern/imageprocess.c - * \ingroup imbuf + * but we'll keep it here for the time being. (nzc) + * */ - /* imageprocess.c MIXED MODEL * * april 95 @@ -50,7 +52,7 @@ /* This define should be relocated to a global header some where Kent Mein * I stole it from util.h in the plugins api */ -#define MAX2(x,y) ( (x)>(y) ? (x) : (y) ) +#define MAX2(x, y) ( (x)>(y) ? (x) : (y) ) /* Only this one is used liberally here, and in imbuf */ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf) @@ -113,10 +115,10 @@ static void pixel_from_buffer(struct ImBuf *ibuf, unsigned char **outI, float ** static float P(float k) { float p1, p2, p3, p4; - p1 = MAX2(k+2.0f,0); - p2 = MAX2(k+1.0f,0); - p3 = MAX2(k,0); - p4 = MAX2(k-1.0f,0); + p1 = MAX2(k+2.0f, 0); + p2 = MAX2(k+1.0f, 0); + p3 = MAX2(k, 0); + p4 = MAX2(k-1.0f, 0); return (float)(1.0f/6.0f)*( p1*p1*p1 - 4.0f * p2*p2*p2 + 6.0f * p3*p3*p3 - 4.0f * p4*p4*p4); } @@ -125,15 +127,15 @@ static float P(float k) /* older, slower function, works the same as above */ static float P(float k) { - return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f,0) , 3.0f ) - 4.0f * pow( MAX2(k+1.0f,0) , 3.0f ) + 6.0f * pow( MAX2(k,0) , 3.0f ) - 4.0f * pow( MAX2(k-1.0f,0) , 3.0f)); + return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f, 0), 3.0f ) - 4.0f * pow( MAX2(k+1.0f, 0), 3.0f ) + 6.0f * pow( MAX2(k, 0), 3.0f ) - 4.0f * pow( MAX2(k-1.0f, 0), 3.0f)); } #endif void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v) { - int i,j,n,m,x1,y1; + int i, j, n, m, x1, y1; unsigned char *dataI; - float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF; + float a, b, w, wx, wy[4], outR, outG, outB, outA, *dataF; /* sample area entirely outside image? */ if (ceil(u)<0 || floor(u)>in->x-1 || ceil(v)<0 || floor(v)>in->y-1) diff --git a/source/blender/imbuf/intern/imbuf.h b/source/blender/imbuf/intern/imbuf.h index 2125583375f..47b4b7b6a58 100644 --- a/source/blender/imbuf/intern/imbuf.h +++ b/source/blender/imbuf/intern/imbuf.h @@ -1,9 +1,4 @@ /* - * imbuf.h (mar-2001 nzc) - * - * This header might have to become external... - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -25,7 +20,7 @@ * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): mar-2001 nzc. * * ***** END GPL LICENSE BLOCK ***** */ @@ -34,7 +29,6 @@ * \ingroup imbuf */ - #ifndef __IMBUF_H__ #define __IMBUF_H__ diff --git a/source/blender/imbuf/intern/imbuf_cocoa.m b/source/blender/imbuf/intern/imbuf_cocoa.m index db7f93423cb..ebfee7a1a30 100644 --- a/source/blender/imbuf/intern/imbuf_cocoa.m +++ b/source/blender/imbuf/intern/imbuf_cocoa.m @@ -1,6 +1,4 @@ /* - * imbuf_coca.m - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -22,9 +20,10 @@ * ***** END GPL LICENSE BLOCK ***** */ -/** - * Provides image file loading and saving for Blender, via Cocoa. +/** \file blender/imbuf/intern/imbuf_coca.m + * \ingroup imbuf * + * Provides image file loading and saving for Blender, via Cocoa. */ #include <stdint.h> diff --git a/source/blender/imbuf/intern/indexer.c b/source/blender/imbuf/intern/indexer.c index b566d975f5b..3095f5639fe 100644 --- a/source/blender/imbuf/intern/indexer.c +++ b/source/blender/imbuf/intern/indexer.c @@ -62,14 +62,14 @@ static int tc_types[] = { IMB_TC_RECORD_RUN, #define INDEX_FILE_VERSION 1 /* ---------------------------------------------------------------------- - - time code index functions - ---------------------------------------------------------------------- */ + * - time code index functions + * ---------------------------------------------------------------------- */ anim_index_builder * IMB_index_builder_create(const char * name) { anim_index_builder * rv - = MEM_callocN( sizeof(struct anim_index_builder), + = MEM_callocN(sizeof(struct anim_index_builder), "index builder"); fprintf(stderr, "Starting work on index: %s\n", name); @@ -176,7 +176,7 @@ struct anim_index * IMB_indexer_open(const char * name) return NULL; } - idx = MEM_callocN( sizeof(struct anim_index), "anim_index"); + idx = MEM_callocN(sizeof(struct anim_index), "anim_index"); BLI_strncpy(idx->name, name, sizeof(idx->name)); @@ -191,7 +191,7 @@ struct anim_index * IMB_indexer_open(const char * name) fseek(fp, 12, SEEK_SET); - idx->entries = MEM_callocN( sizeof(struct anim_index_entry) + idx->entries = MEM_callocN(sizeof(struct anim_index_entry) * idx->num_entries, "anim_index_entries"); for (i = 0; i < idx->num_entries; i++) { @@ -354,8 +354,8 @@ int IMB_timecode_to_array_index(IMB_Timecode_Type tc) /* ---------------------------------------------------------------------- - - rebuild helper functions - ---------------------------------------------------------------------- */ + * - rebuild helper functions + * ---------------------------------------------------------------------- */ static void get_index_dir(struct anim * anim, char * index_dir) { @@ -427,8 +427,8 @@ static void get_tc_filename(struct anim * anim, IMB_Timecode_Type tc, } /* ---------------------------------------------------------------------- - - common rebuilder structures - ---------------------------------------------------------------------- */ + * - common rebuilder structures + * ---------------------------------------------------------------------- */ typedef struct IndexBuildContext { int anim_type; @@ -436,8 +436,8 @@ typedef struct IndexBuildContext { /* ---------------------------------------------------------------------- - - ffmpeg rebuilder - ---------------------------------------------------------------------- */ + * - ffmpeg rebuilder + * ---------------------------------------------------------------------- */ #ifdef WITH_FFMPEG @@ -952,8 +952,8 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context, #endif /* ---------------------------------------------------------------------- - - internal AVI (fallback) rebuilder - ---------------------------------------------------------------------- */ + * - internal AVI (fallback) rebuilder + * ---------------------------------------------------------------------- */ typedef struct FallbackIndexBuilderContext { int anim_type; @@ -1116,8 +1116,8 @@ static void index_rebuild_fallback(FallbackIndexBuilderContext *context, } /* ---------------------------------------------------------------------- - - public API - ---------------------------------------------------------------------- */ + * - public API + * ---------------------------------------------------------------------- */ IndexBuildContext *IMB_anim_index_rebuild_context(struct anim *anim, IMB_Timecode_Type tcs_in_use, IMB_Proxy_Size proxy_sizes_in_use, int quality) diff --git a/source/blender/imbuf/intern/indexer_dv.c b/source/blender/imbuf/intern/indexer_dv.c index f0c38f6db06..8dc03ae708d 100644 --- a/source/blender/imbuf/intern/indexer_dv.c +++ b/source/blender/imbuf/intern/indexer_dv.c @@ -171,7 +171,7 @@ static void parse_header_block(indexer_dv_context * This, unsigned char* target) static void parse_subcode_blocks( indexer_dv_context * This, unsigned char* target) { - int i,j; + int i, j; for (j = 0; j < 2; j++) { for (i = 3; i < 80; i += 5) { @@ -185,7 +185,7 @@ static void parse_subcode_blocks( static void parse_vaux_blocks( indexer_dv_context * This, unsigned char* target) { - int i,j; + int i, j; for (j = 0; j < 3; j++) { for (i = 3; i < 80; i += 5) { diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c index e775d0f7bbd..430361dbb53 100644 --- a/source/blender/imbuf/intern/iris.c +++ b/source/blender/imbuf/intern/iris.c @@ -74,7 +74,7 @@ typedef struct { #define GINTLUM (156) #define BINTLUM (21) -#define ILUM(r,g,b) ((int)(RINTLUM*(r)+GINTLUM*(g)+BINTLUM*(b))>>8) +#define ILUM(r, g, b) ((int)(RINTLUM * (r) + GINTLUM * (g) + BINTLUM * (b)) >> 8) #define OFFSET_R 0 /* this is byte order dependent */ #define OFFSET_G 1 @@ -149,7 +149,7 @@ static void putshort(FILE *outf, unsigned short val) buf[0] = (val>>8); buf[1] = (val>>0); - fwrite(buf,2,1,outf); + fwrite(buf, 2, 1, outf); } static int putlong(FILE *outf, unsigned int val) @@ -160,7 +160,7 @@ static int putlong(FILE *outf, unsigned int val) buf[1] = (val>>16); buf[2] = (val>>8); buf[3] = (val>>0); - return fwrite(buf,4,1,outf); + return fwrite(buf, 4, 1, outf); } static void readheader(FILE *inf, IMAGE *image) @@ -178,18 +178,18 @@ static int writeheader(FILE *outf, IMAGE *image) { IMAGE t= {0}; - fwrite(&t,sizeof(IMAGE),1,outf); - fseek(outf,0,SEEK_SET); - putshort(outf,image->imagic); - putshort(outf,image->type); - putshort(outf,image->dim); - putshort(outf,image->xsize); - putshort(outf,image->ysize); - putshort(outf,image->zsize); - putlong(outf,image->min); - putlong(outf,image->max); - putlong(outf,0); - return fwrite("no name",8,1,outf); + fwrite(&t, sizeof(IMAGE), 1, outf); + fseek(outf, 0, SEEK_SET); + putshort(outf, image->imagic); + putshort(outf, image->type); + putshort(outf, image->dim); + putshort(outf, image->xsize); + putshort(outf, image->ysize); + putshort(outf, image->zsize); + putlong(outf, image->min); + putlong(outf, image->max); + putlong(outf, 0); + return fwrite("no name", 8, 1, outf); } static int writetab(FILE *outf, unsigned int *tab, int len) @@ -197,7 +197,7 @@ static int writetab(FILE *outf, unsigned int *tab, int len) int r = 0; while (len) { - r = putlong(outf,*tab++); + r = putlong(outf, *tab++); len -= 4; } return r; @@ -271,14 +271,14 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags) readheader(inf, &image); if (image.imagic != IMAGIC) { - fprintf(stderr,"longimagedata: bad magic number in image file\n"); + fprintf(stderr, "longimagedata: bad magic number in image file\n"); return(NULL); } rle = ISRLE(image.type); bpp = BPP(image.type); if (bpp != 1 && bpp != 2) { - fprintf(stderr,"longimagedata: image must have 1 or 2 byte per pix chan\n"); + fprintf(stderr, "longimagedata: image must have 1 or 2 byte per pix chan\n"); return(NULL); } @@ -299,8 +299,8 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags) lengthtab = (unsigned int *)MEM_mallocN(tablen, "iris endtab"); file_offset = 512; - readtab(inf,starttab,tablen); - readtab(inf,lengthtab,tablen); + readtab(inf, starttab, tablen); + readtab(inf, lengthtab, tablen); /* check data order */ cur = 0; @@ -710,27 +710,27 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons image->zsize = zsize; image->min = 0; image->max = 255; - goodwrite *= writeheader(outf,image); - fseek(outf,512+2*tablen,SEEK_SET); + goodwrite *= writeheader(outf, image); + fseek(outf, 512+2*tablen, SEEK_SET); pos = 512+2*tablen; for (y = 0; y < ysize; y++) { for (z = 0; z < zsize; z++) { if (zsize == 1) { - lumrow((uchar *)lptr,(uchar *)lumbuf,xsize); - len = compressrow((uchar *)lumbuf,rlebuf,CHANOFFSET(z),xsize); + lumrow((uchar *)lptr, (uchar *)lumbuf, xsize); + len = compressrow((uchar *)lumbuf, rlebuf, CHANOFFSET(z), xsize); } else { if (z<4) { - len = compressrow((uchar *)lptr, rlebuf,CHANOFFSET(z),xsize); + len = compressrow((uchar *)lptr, rlebuf, CHANOFFSET(z), xsize); } else if (z<8 && zptr) { - len = compressrow((uchar *)zptr, rlebuf,CHANOFFSET(z-4),xsize); + len = compressrow((uchar *)zptr, rlebuf, CHANOFFSET(z-4), xsize); } } if (len>rlebuflen) { - fprintf(stderr,"output_iris: rlebuf is too small - bad poop\n"); + fprintf(stderr, "output_iris: rlebuf is too small - bad poop\n"); exit(1); } goodwrite *= fwrite(rlebuf, len, 1, outf); @@ -742,9 +742,9 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons if (zptr) zptr += xsize; } - fseek(outf,512,SEEK_SET); - goodwrite *= writetab(outf,starttab,tablen); - goodwrite *= writetab(outf,lengthtab,tablen); + fseek(outf, 512, SEEK_SET); + goodwrite *= writetab(outf, starttab, tablen); + goodwrite *= writetab(outf, lengthtab, tablen); MEM_freeN(image); MEM_freeN(starttab); MEM_freeN(lengthtab); @@ -754,7 +754,7 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons if (goodwrite) return 1; else { - fprintf(stderr,"output_iris: not enough space for image!!\n"); + fprintf(stderr, "output_iris: not enough space for image!!\n"); return 0; } } @@ -765,7 +765,7 @@ static void lumrow(unsigned char *rgbptr, unsigned char *lumptr, int n) { lumptr += CHANOFFSET(0); while (n--) { - *lumptr = ILUM(rgbptr[OFFSET_R],rgbptr[OFFSET_G],rgbptr[OFFSET_B]); + *lumptr = ILUM(rgbptr[OFFSET_R], rgbptr[OFFSET_G], rgbptr[OFFSET_B]); lumptr += 4; rgbptr += 4; } diff --git a/source/blender/imbuf/intern/jp2.c b/source/blender/imbuf/intern/jp2.c index 6abfbdb4aa1..c71763b245d 100644 --- a/source/blender/imbuf/intern/jp2.c +++ b/source/blender/imbuf/intern/jp2.c @@ -158,7 +158,7 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags) if ((image->numcomps * image->x1 * image->y1) == 0) { - fprintf(stderr,"\nError: invalid raw image parameters\n"); + fprintf(stderr, "\nError: invalid raw image parameters\n"); return NULL; } @@ -339,7 +339,7 @@ static void cinema_parameters(opj_cparameters_t *parameters) parameters->tp_flag = 'C'; parameters->tp_on = 1; - /*Tile and Image shall be at (0,0)*/ + /*Tile and Image shall be at (0, 0)*/ parameters->cp_tx0 = 0; parameters->cp_ty0 = 0; parameters->image_offset_x0 = 0; @@ -363,7 +363,7 @@ static void cinema_parameters(opj_cparameters_t *parameters) } -static void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol) +static void cinema_setup_encoder(opj_cparameters_t *parameters, opj_image_t *image, img_fol_t *img_fol) { int i; float temp_rate; @@ -375,9 +375,9 @@ static void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *imag parameters->numresolution = 6; } if (!((image->comps[0].w == 2048) || (image->comps[0].h == 1080))) { - fprintf(stdout,"Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 " + fprintf(stdout, "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 " "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n", - image->comps[0].w,image->comps[0].h); + image->comps[0].w, image->comps[0].h); parameters->cp_rsiz = STD_RSIZ; } break; @@ -390,12 +390,12 @@ static void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *imag parameters->numresolution = 7; } if (!((image->comps[0].w == 4096) || (image->comps[0].h == 2160))) { - fprintf(stdout,"Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4" + fprintf(stdout, "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4" "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n", - image->comps[0].w,image->comps[0].h); + image->comps[0].w, image->comps[0].h); parameters->cp_rsiz = STD_RSIZ; } - parameters->numpocs = initialise_4K_poc(parameters->POC,parameters->numresolution); + parameters->numpocs = initialise_4K_poc(parameters->POC, parameters->numresolution); break; case OFF: /* do nothing */ @@ -465,13 +465,13 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters) int i, numcomps, w, h, prec; - int x,y, y_row; + int x, y, y_row; OPJ_COLOR_SPACE color_space; opj_image_cmptparm_t cmptparm[4]; /* maximum of 4 components */ opj_image_t * image = NULL; img_fol_t img_fol; /* only needed for cinema presets */ - memset(&img_fol,0,sizeof(img_fol_t)); + memset(&img_fol, 0, sizeof(img_fol_t)); if (ibuf->ftype & JP2_CINE) { @@ -552,7 +552,7 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters) float rgb[3]; switch (prec) { - case 8: /* Convert blenders float color channels to 8,12 or 16bit ints */ + case 8: /* Convert blenders float color channels to 8, 12 or 16bit ints */ for (y=h-1; y>=0; y--) { y_row = y*w; for (x=0; x<w; x++, rect_float+=4) { @@ -665,7 +665,7 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters) parameters->tcp_mct = image->numcomps == 3 ? 1 : 0; if (parameters->cp_cinema) { - cinema_setup_encoder(parameters,image,&img_fol); + cinema_setup_encoder(parameters, image, &img_fol); } if (img_fol.rates) @@ -748,7 +748,7 @@ int imb_savejp2(struct ImBuf *ibuf, const char *name, int flags) } fwrite(cio->buffer, 1, codestream_length, f); fclose(f); - fprintf(stderr,"Generated outfile %s\n",name); + fprintf(stderr, "Generated outfile %s\n", name); /* close and free the byte stream */ opj_cio_close(cio); diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c index 87e56bffb41..f3a382eaa56 100644 --- a/source/blender/imbuf/intern/jpeg.c +++ b/source/blender/imbuf/intern/jpeg.c @@ -230,7 +230,7 @@ static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t * If must suspend, take the specified action (typically "return FALSE"). */ #define INPUT_BYTE(cinfo,V,action) \ - MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + MAKESTMT(MAKE_BYTE_AVAIL(cinfo,action); \ bytes_in_buffer--; \ V = GETJOCTET(*next_input_byte++); ) @@ -238,7 +238,7 @@ static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t * V should be declared unsigned int or perhaps INT32. */ #define INPUT_2BYTES(cinfo,V,action) \ - MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + MAKESTMT(MAKE_BYTE_AVAIL(cinfo,action); \ bytes_in_buffer--; \ V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ MAKE_BYTE_AVAIL(cinfo,action); \ diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c index 8b18be87b3c..485f593a8fb 100644 --- a/source/blender/imbuf/intern/moviecache.c +++ b/source/blender/imbuf/intern/moviecache.c @@ -44,7 +44,7 @@ #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" -static MEM_CacheLimiterC *limitor= NULL; +static MEM_CacheLimiterC *limitor = NULL; typedef struct MovieCache { GHash *hash; @@ -113,7 +113,7 @@ static void check_unused_keys(MovieCache *cache) { GHashIterator *iter; - iter= BLI_ghashIterator_new(cache->hash); + iter = BLI_ghashIterator_new(cache->hash); while (!BLI_ghashIterator_isDone(iter)) { MovieCacheKey *key = BLI_ghashIterator_getKey(iter); MovieCacheItem *item = BLI_ghashIterator_getValue(iter); @@ -253,7 +253,7 @@ void IMB_moviecache_put(MovieCache *cache, void *userkey, ImBuf *ibuf) if (cache->points) { MEM_freeN(cache->points); - cache->points= NULL; + cache->points = NULL; } } @@ -321,7 +321,7 @@ void IMB_moviecache_get_cache_segments(MovieCache *cache, int proxy, int render_ GHashIterator *iter; iter = BLI_ghashIterator_new(cache->hash); - a= 0; + a = 0; while (!BLI_ghashIterator_isDone(iter)) { MovieCacheKey *key = BLI_ghashIterator_getKey(iter); MovieCacheItem *item = BLI_ghashIterator_getValue(iter); diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index 44b7472b910..50bc55da412 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -1024,7 +1024,7 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) addzbuffloatImBuf(ibuf); firstz= ibuf->zbuf_float - (dw.min.x - dw.min.y*width); firstz+= (height-1)*width; - frameBuffer.insert ("Z", Slice (Imf::FLOAT, (char *)firstz , sizeof(float), -width*sizeof(float))); + frameBuffer.insert("Z", Slice (Imf::FLOAT, (char *)firstz, sizeof(float), -width * sizeof(float))); } file->setFrameBuffer (frameBuffer); diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c index 513fcb9b6dc..0a19bf1280b 100644 --- a/source/blender/imbuf/intern/png.c +++ b/source/blender/imbuf/intern/png.c @@ -51,9 +51,9 @@ typedef struct PNGReadStruct { unsigned int seek; } PNGReadStruct; -static void ReadData( png_structp png_ptr, png_bytep data, png_size_t length); -static void WriteData( png_structp png_ptr, png_bytep data, png_size_t length); -static void Flush( png_structp png_ptr); +static void ReadData(png_structp png_ptr, png_bytep data, png_size_t length); +static void WriteData(png_structp png_ptr, png_bytep data, png_size_t length); +static void Flush(png_structp png_ptr); int imb_is_a_png(unsigned char *mem) { @@ -68,7 +68,7 @@ static void Flush(png_structp png_ptr) (void)png_ptr; } -static void WriteData( png_structp png_ptr, png_bytep data, png_size_t length) +static void WriteData(png_structp png_ptr, png_bytep data, png_size_t length) { ImBuf *ibuf = (ImBuf *) png_get_io_ptr(png_ptr); @@ -81,7 +81,7 @@ static void WriteData( png_structp png_ptr, png_bytep data, png_size_t length) ibuf->encodedsize += length; } -static void ReadData( png_structp png_ptr, png_bytep data, png_size_t length) +static void ReadData(png_structp png_ptr, png_bytep data, png_size_t length) { PNGReadStruct *rs= (PNGReadStruct *) png_get_io_ptr(png_ptr); diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c index 61f90f7a97a..e9d549be8b9 100644 --- a/source/blender/imbuf/intern/readimage.c +++ b/source/blender/imbuf/intern/readimage.c @@ -152,7 +152,7 @@ ImBuf *IMB_testiffname(const char *filepath, int flags) imb_cache_filename(filepath_tx, filepath, flags); - file = BLI_open(filepath_tx,O_BINARY|O_RDONLY,0); + file = BLI_open(filepath_tx, O_BINARY|O_RDONLY, 0); if (file < 0) return NULL; ibuf=IMB_loadifffile(file, flags|IB_test|IB_multilayer, filepath_tx); diff --git a/source/blender/imbuf/intern/rectop.c b/source/blender/imbuf/intern/rectop.c index 6ea84fd6717..9f025803c2e 100644 --- a/source/blender/imbuf/intern/rectop.c +++ b/source/blender/imbuf/intern/rectop.c @@ -359,13 +359,13 @@ void IMB_rectblend(struct ImBuf *dbuf, struct ImBuf *sbuf, int destx, /* copy */ for (;height > 0; height--) { if (do_char) { - memcpy(drect,srect, width * sizeof(int)); + memcpy(drect, srect, width * sizeof(int)); drect += destskip; srect += srcskip; } if (do_float) { - memcpy(drectf,srectf, width * sizeof(float) * 4); + memcpy(drectf, srectf, width * sizeof(float) * 4); drectf += destskip*4; srectf += srcskip*4; } @@ -496,8 +496,8 @@ void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, CLAMP(y1, 0, height); CLAMP(y2, 0, height); - if (x1>x2) SWAP(int,x1,x2); - if (y1>y2) SWAP(int,y1,y2); + if (x1>x2) SWAP(int, x1, x2); + if (y1>y2) SWAP(int, y1, y2); if (x1==x2 || y1==y2) return; a = col[3]; diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c index a7b994beef9..7f5430dad8a 100644 --- a/source/blender/imbuf/intern/scaling.c +++ b/source/blender/imbuf/intern/scaling.c @@ -53,10 +53,10 @@ struct ImBuf *IMB_half_x(struct ImBuf *ibuf1) { struct ImBuf *ibuf2; - uchar *p1,*_p1,*dest; - short a,r,g,b; - int x,y; - float af,rf,gf,bf, *p1f, *_p1f, *destf; + uchar *p1, *_p1, *dest; + short a, r, g, b; + int x, y; + float af, rf, gf, bf, *p1f, *_p1f, *destf; int do_rect, do_float; if (ibuf1==NULL) return (NULL); @@ -119,7 +119,7 @@ struct ImBuf *IMB_half_x(struct ImBuf *ibuf1) struct ImBuf *IMB_double_fast_x(struct ImBuf *ibuf1) { struct ImBuf *ibuf2; - int *p1,*dest, i, col, do_rect, do_float; + int *p1, *dest, i, col, do_rect, do_float; float *p1f, *destf; if (ibuf1==NULL) return (NULL); @@ -128,7 +128,7 @@ struct ImBuf *IMB_double_fast_x(struct ImBuf *ibuf1) do_rect= (ibuf1->rect != NULL); do_float= (ibuf1->rect_float != NULL); - ibuf2 = IMB_allocImBuf(2 * ibuf1->x , ibuf1->y , ibuf1->planes, ibuf1->flags); + ibuf2 = IMB_allocImBuf(2 * ibuf1->x, ibuf1->y, ibuf1->planes, ibuf1->flags); if (ibuf2==NULL) return (NULL); p1 = (int *) ibuf1->rect; @@ -172,11 +172,11 @@ struct ImBuf *IMB_double_x(struct ImBuf *ibuf1) struct ImBuf *IMB_half_y(struct ImBuf *ibuf1) { struct ImBuf *ibuf2; - uchar *p1,*p2,*_p1,*dest; - short a,r,g,b; - int x,y; + uchar *p1, *p2, *_p1, *dest; + short a, r, g, b; + int x, y; int do_rect, do_float; - float af,rf,gf,bf,*p1f,*p2f,*_p1f,*destf; + float af, rf, gf, bf, *p1f, *p2f, *_p1f, *destf; p1= p2= NULL; p1f= p2f= NULL; @@ -187,7 +187,7 @@ struct ImBuf *IMB_half_y(struct ImBuf *ibuf1) do_rect= (ibuf1->rect != NULL); do_float= (ibuf1->rect_float != NULL); - ibuf2 = IMB_allocImBuf(ibuf1->x , (ibuf1->y) / 2 , ibuf1->planes, ibuf1->flags); + ibuf2 = IMB_allocImBuf(ibuf1->x, (ibuf1->y) / 2, ibuf1->planes, ibuf1->flags); if (ibuf2==NULL) return (NULL); _p1 = (uchar *) ibuf1->rect; @@ -246,7 +246,7 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1) struct ImBuf *ibuf2; int *p1, *dest1, *dest2; float *p1f, *dest1f, *dest2f; - int x,y; + int x, y; int do_rect, do_float; if (ibuf1==NULL) return (NULL); @@ -255,7 +255,7 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1) do_rect= (ibuf1->rect != NULL); do_float= (ibuf1->rect_float != NULL); - ibuf2 = IMB_allocImBuf(ibuf1->x , 2 * ibuf1->y , ibuf1->planes, ibuf1->flags); + ibuf2 = IMB_allocImBuf(ibuf1->x, 2 * ibuf1->y, ibuf1->planes, ibuf1->flags); if (ibuf2==NULL) return (NULL); p1 = (int *) ibuf1->rect; @@ -297,7 +297,7 @@ void imb_onehalf_no_alloc(struct ImBuf *ibuf2, struct ImBuf *ibuf1) { uchar *p1, *p2 = NULL, *dest; float *p1f, *destf, *p2f = NULL; - int x,y; + int x, y; const short do_rect= (ibuf1->rect != NULL); const short do_float= (ibuf1->rect_float != NULL) && (ibuf2->rect_float != NULL); @@ -1093,18 +1093,18 @@ static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy) static struct ImBuf *scaleupx(struct ImBuf *ibuf, int newx) { - uchar *rect,*_newrect=NULL,*newrect; - float *rectf,*_newrectf=NULL,*newrectf; - float sample,add; - float val_a,nval_a,diff_a; - float val_b,nval_b,diff_b; - float val_g,nval_g,diff_g; - float val_r,nval_r,diff_r; - float val_af,nval_af,diff_af; - float val_bf,nval_bf,diff_bf; - float val_gf,nval_gf,diff_gf; - float val_rf,nval_rf,diff_rf; - int x,y, do_rect = 0, do_float = 0; + uchar *rect, *_newrect=NULL, *newrect; + float *rectf, *_newrectf=NULL, *newrectf; + float sample, add; + float val_a, nval_a, diff_a; + float val_b, nval_b, diff_b; + float val_g, nval_g, diff_g; + float val_r, nval_r, diff_r; + float val_af, nval_af, diff_af; + float val_bf, nval_bf, diff_bf; + float val_gf, nval_gf, diff_gf; + float val_rf, nval_rf, diff_rf; + int x, y, do_rect = 0, do_float = 0; val_a = nval_a = diff_a = val_b = nval_b = diff_b = 0; val_g = nval_g = diff_g = val_r = nval_r = diff_r = 0; @@ -1260,18 +1260,18 @@ static struct ImBuf *scaleupx(struct ImBuf *ibuf, int newx) static struct ImBuf *scaleupy(struct ImBuf *ibuf, int newy) { - uchar *rect,*_newrect=NULL,*newrect; - float *rectf,*_newrectf=NULL,*newrectf; - float sample,add; - float val_a,nval_a,diff_a; - float val_b,nval_b,diff_b; - float val_g,nval_g,diff_g; - float val_r,nval_r,diff_r; - float val_af,nval_af,diff_af; - float val_bf,nval_bf,diff_bf; - float val_gf,nval_gf,diff_gf; - float val_rf,nval_rf,diff_rf; - int x,y, do_rect = 0, do_float = 0, skipx; + uchar *rect, *_newrect=NULL, *newrect; + float *rectf, *_newrectf=NULL, *newrectf; + float sample, add; + float val_a, nval_a, diff_a; + float val_b, nval_b, diff_b; + float val_g, nval_g, diff_g; + float val_r, nval_r, diff_r; + float val_af, nval_af, diff_af; + float val_bf, nval_bf, diff_bf; + float val_gf, nval_gf, diff_gf; + float val_rf, nval_rf, diff_rf; + int x, y, do_rect = 0, do_float = 0, skipx; val_a = nval_a = diff_a = val_b = nval_b = diff_b = 0; val_g = nval_g = diff_g = val_r = nval_r = diff_r = 0; @@ -1484,10 +1484,10 @@ struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, unsigned int newx, unsigned in return ibuf; } - if (newx < ibuf->x) if (newx) scaledownx(ibuf,newx); - if (newy < ibuf->y) if (newy) scaledowny(ibuf,newy); - if (newx > ibuf->x) if (newx) scaleupx(ibuf,newx); - if (newy > ibuf->y) if (newy) scaleupy(ibuf,newy); + if (newx < ibuf->x) if (newx) scaledownx(ibuf, newx); + if (newy < ibuf->y) if (newy) scaledowny(ibuf, newy); + if (newx > ibuf->x) if (newx) scaleupx(ibuf, newx); + if (newy > ibuf->y) if (newy) scaleupy(ibuf, newy); return(ibuf); } @@ -1498,10 +1498,10 @@ struct imbufRGBA { struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy) { - unsigned int *rect,*_newrect,*newrect; + unsigned int *rect, *_newrect, *newrect; struct imbufRGBA *rectf, *_newrectf, *newrectf; - int x,y, do_float=0, do_rect=0; - int ofsx,ofsy,stepx,stepy; + int x, y, do_float=0, do_rect=0; + int ofsx, ofsy, stepx, stepy; rect = NULL; _newrect = NULL; newrect = NULL; rectf = NULL; _newrectf = NULL; newrectf = NULL; diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c index 0ed9b99d0ee..1a05dd93229 100644 --- a/source/blender/imbuf/intern/targa.c +++ b/source/blender/imbuf/intern/targa.c @@ -73,7 +73,7 @@ static int tga_out1(unsigned int data, FILE *file) uchar *p; p = (uchar *) & data; - if (putc(p[0],file) == EOF) return(EOF); + if (putc(p[0], file) == EOF) return(EOF); return (~EOF); } @@ -82,8 +82,8 @@ static int tga_out2(unsigned int data, FILE * file) uchar *p; p = (uchar *) & data; - if (putc(p[0],file) == EOF) return(EOF); - if (putc(p[1],file) == EOF) return(EOF); + if (putc(p[0], file) == EOF) return(EOF); + if (putc(p[1], file) == EOF) return(EOF); return (~EOF); } @@ -93,9 +93,9 @@ static int tga_out3(unsigned int data, FILE * file) uchar *p; p = (uchar *) & data; - if (putc(p[2],file) == EOF) return(EOF); - if (putc(p[1],file) == EOF) return(EOF); - if (putc(p[0],file) == EOF) return(EOF); + if (putc(p[2], file) == EOF) return(EOF); + if (putc(p[1], file) == EOF) return(EOF); + if (putc(p[0], file) == EOF) return(EOF); return (~EOF); } @@ -106,16 +106,16 @@ static int tga_out4(unsigned int data, FILE * file) p = (uchar *) & data; /* order = bgra */ - if (putc(p[2],file) == EOF) return(EOF); - if (putc(p[1],file) == EOF) return(EOF); - if (putc(p[0],file) == EOF) return(EOF); - if (putc(p[3],file) == EOF) return(EOF); + if (putc(p[2], file) == EOF) return(EOF); + if (putc(p[1], file) == EOF) return(EOF); + if (putc(p[0], file) == EOF) return(EOF); + if (putc(p[3], file) == EOF) return(EOF); return (~EOF); } static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FILE*)) { - register int last,this; + register int last, this; register int copy, bytes; register unsigned int *rect, *rectstart, *temp; int y; @@ -150,9 +150,9 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI last = copy; if (copy>=128) last = 128; copy -= last; - if (fputc(last-1,file) == EOF) return(0); + if (fputc(last-1, file) == EOF) return(0); do { - if (out(*rect++,file) == EOF) return(0); + if (out(*rect++, file) == EOF) return(0); } while (--last != 0); } rectstart = rect; @@ -173,17 +173,17 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI while (copy) { if (copy>128) { - if (fputc(255,file) == EOF) return(0); + if (fputc(255, file) == EOF) return(0); copy -= 128; } else { if (copy == 1) { - if (fputc(0,file) == EOF) return(0); + if (fputc(0, file) == EOF) return(0); } - else if (fputc(127 + copy,file) == EOF) return(0); + else if (fputc(127 + copy, file) == EOF) return(0); copy = 0; } - if (out(last,file) == EOF) return(0); + if (out(last, file) == EOF) return(0); } copy=TRUE; } @@ -276,10 +276,10 @@ int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags) if (ibuf->planes==32) { buf[17] |= 0x08; } - fildes = BLI_fopen(name,"wb"); + fildes = BLI_fopen(name, "wb"); if (!fildes) return 0; - if (fwrite(buf, 1, 18,fildes) != 18) { + if (fwrite(buf, 1, 18, fildes) != 18) { fclose(fildes); return (0); } @@ -485,10 +485,10 @@ partial_load: complete_partial_load(ibuf, rect); } -static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, size_t mem_size, int psize) +static void ldtarga(struct ImBuf * ibuf, unsigned char * mem, size_t mem_size, int psize) { unsigned char *mem_end = mem+mem_size; - int col,size; + int col, size; unsigned int *rect; uchar * cp = (uchar *) &col; @@ -553,10 +553,10 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags) unsigned int *rect, *cmap= NULL /*, mincol= 0*/, maxcol= 0; uchar * cp = (uchar *) &col; - if (checktarga(&tga,mem) == 0) return(NULL); + if (checktarga(&tga, mem) == 0) return(NULL); - if (flags & IB_test) ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,tga.pixsize, 0); - else ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,(tga.pixsize + 0x7) & ~0x7, IB_rect); + if (flags & IB_test) ibuf = IMB_allocImBuf(tga.xsize, tga.ysize, tga.pixsize, 0); + else ibuf = IMB_allocImBuf(tga.xsize, tga.ysize, (tga.pixsize + 0x7) & ~0x7, IB_rect); if (ibuf == NULL) return(NULL); ibuf->ftype = TGA; @@ -621,18 +621,18 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags) case 1: case 2: case 3: - if (tga.pixsize <= 8) ldtarga(ibuf,mem,mem_size,0); - else if (tga.pixsize <= 16) ldtarga(ibuf,mem,mem_size,1); - else if (tga.pixsize <= 24) ldtarga(ibuf,mem,mem_size,2); - else if (tga.pixsize <= 32) ldtarga(ibuf,mem,mem_size,3); + if (tga.pixsize <= 8) ldtarga(ibuf, mem, mem_size, 0); + else if (tga.pixsize <= 16) ldtarga(ibuf, mem, mem_size, 1); + else if (tga.pixsize <= 24) ldtarga(ibuf, mem, mem_size, 2); + else if (tga.pixsize <= 32) ldtarga(ibuf, mem, mem_size, 3); break; case 9: case 10: case 11: - if (tga.pixsize <= 8) decodetarga(ibuf,mem,mem_size,0); - else if (tga.pixsize <= 16) decodetarga(ibuf,mem,mem_size,1); - else if (tga.pixsize <= 24) decodetarga(ibuf,mem,mem_size,2); - else if (tga.pixsize <= 32) decodetarga(ibuf,mem,mem_size,3); + if (tga.pixsize <= 8) decodetarga(ibuf, mem, mem_size, 0); + else if (tga.pixsize <= 16) decodetarga(ibuf, mem, mem_size, 1); + else if (tga.pixsize <= 24) decodetarga(ibuf, mem, mem_size, 2); + else if (tga.pixsize <= 32) decodetarga(ibuf, mem, mem_size, 3); break; } diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index 9aeed8002e1..8507cb71543 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -69,13 +69,13 @@ #define URI_MAX FILE_MAX*3 + 8 -static int get_thumb_dir( char* dir , ThumbSize size) +static int get_thumb_dir(char *dir, ThumbSize size) { #ifdef WIN32 wchar_t dir_16 [MAX_PATH]; /* yes, applications shouldn't store data there, but so does GIMP :)*/ SHGetSpecialFolderPathW(0, dir_16, CSIDL_PROFILE, 0); - conv_utf_16_to_8(dir_16,dir,FILE_MAX); + conv_utf_16_to_8(dir_16, dir, FILE_MAX); #else @@ -132,7 +132,7 @@ static const char hex[17] = "0123456789abcdef"; /* Note: This escape function works on file: URIs, but if you want to * escape something else, please read RFC-2396 */ -static void escape_uri_string (const char *string, char* escaped_string, int len,UnsafeCharacterSet mask) +static void escape_uri_string (const char *string, char* escaped_string, int len, UnsafeCharacterSet mask) { #define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask)) @@ -218,7 +218,7 @@ static void thumbname_from_uri(const char* uri, char* thumb, const int thumb_len char hexdigest[33]; unsigned char digest[16]; - md5_buffer( uri, strlen(uri), digest); + md5_buffer(uri, strlen(uri), digest); hexdigest[0] = '\0'; to_hex_char(hexdigest, digest, 16); hexdigest[32] = '\0'; @@ -302,7 +302,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im return NULL; } if (size == THB_FAIL) { - img = IMB_allocImBuf(1,1,32, IB_rect | IB_metadata); + img = IMB_allocImBuf(1, 1, 32, IB_rect | IB_metadata); if (!img) return NULL; } else { @@ -398,7 +398,7 @@ ImBuf* IMB_thumb_read(const char* path, ThumbSize size) char uri[FILE_MAX*3+8]; ImBuf *img = NULL; - if (!uri_from_filename(path,uri)) { + if (!uri_from_filename(path, uri)) { return NULL; } if (thumbpath_from_uri(uri, thumb, sizeof(thumb), size)) { @@ -414,7 +414,7 @@ void IMB_thumb_delete(const char* path, ThumbSize size) char thumb[FILE_MAX]; char uri[FILE_MAX*3+8]; - if (!uri_from_filename(path ,uri)) { + if (!uri_from_filename(path, uri)) { return; } if (thumbpath_from_uri(uri, thumb, sizeof(thumb), size)) { @@ -439,7 +439,7 @@ ImBuf* IMB_thumb_manage(const char* path, ThumbSize size, ThumbSource source) if (stat(path, &st)) { return NULL; } - if (!uri_from_filename(path,uri)) { + if (!uri_from_filename(path, uri)) { return NULL; } if (thumbpath_from_uri(uri, thumb, sizeof(thumb), THB_FAIL)) { diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c index 08b2e608c8e..a9396a5824d 100644 --- a/source/blender/imbuf/intern/tiff.c +++ b/source/blender/imbuf/intern/tiff.c @@ -1,7 +1,4 @@ /* - * tiff.c - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -242,7 +239,7 @@ static int imb_tiff_CloseProc(thandle_t handle) /* get the pointer to the in-memory file */ mfile = IMB_TIFF_GET_MEMFILE(handle); if (!mfile || !mfile->mem) { - fprintf(stderr,"imb_tiff_CloseProc: !mfile || !mfile->mem!\n"); + fprintf(stderr, "imb_tiff_CloseProc: !mfile || !mfile->mem!\n"); return (0); } @@ -268,7 +265,7 @@ static toff_t imb_tiff_SizeProc(thandle_t handle) /* get the pointer to the in-memory file */ mfile = IMB_TIFF_GET_MEMFILE(handle); if (!mfile || !mfile->mem) { - fprintf(stderr,"imb_tiff_SizeProc: !mfile || !mfile->mem!\n"); + fprintf(stderr, "imb_tiff_SizeProc: !mfile || !mfile->mem!\n"); return (0); } @@ -320,8 +317,8 @@ static void scanline_contig_16bit(float *rectf, unsigned short *sbuf, int scanli int i; for (i=0; i < scanline_w; i++) { rectf[i*4 + 0] = sbuf[i*spp + 0] / 65535.0; - rectf[i*4 + 1] = sbuf[i*spp + 1] / 65535.0; - rectf[i*4 + 2] = sbuf[i*spp + 2] / 65535.0; + rectf[i*4 + 1] = (spp>=3)? sbuf[i*spp + 1] / 65535.0: sbuf[i*spp + 0] / 65535.0; + rectf[i*4 + 2] = (spp>=3)? sbuf[i*spp + 2] / 65535.0: sbuf[i*spp + 0] / 65535.0; rectf[i*4 + 3] = (spp==4)?(sbuf[i*spp + 3] / 65535.0):1.0; } } @@ -331,8 +328,8 @@ static void scanline_contig_32bit(float *rectf, float *fbuf, int scanline_w, int int i; for (i=0; i < scanline_w; i++) { rectf[i*4 + 0] = fbuf[i*spp + 0]; - rectf[i*4 + 1] = fbuf[i*spp + 1]; - rectf[i*4 + 2] = fbuf[i*spp + 2]; + rectf[i*4 + 1] = (spp>=3)? fbuf[i*spp + 1]: fbuf[i*spp + 0]; + rectf[i*4 + 2] = (spp>=3)? fbuf[i*spp + 2]: fbuf[i*spp + 0]; rectf[i*4 + 3] = (spp==4)?fbuf[i*spp + 3]:1.0f; } } @@ -440,6 +437,8 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul) if (bitspersample == 32) { if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */ fill_vn_fl(fbuf, ibuf->x, 1.0f); + else if (chan >= spp) /* for grayscale, duplicate first channel into G and B */ + success |= TIFFReadScanline(image, fbuf, row, 0); else success |= TIFFReadScanline(image, fbuf, row, chan); scanline_separate_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, chan); @@ -448,6 +447,8 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul) else if (bitspersample == 16) { if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */ fill_vn_ushort(sbuf, ibuf->x, 65535); + else if (chan >= spp) /* for grayscale, duplicate first channel into G and B */ + success |= TIFFReadScanline(image, fbuf, row, 0); else success |= TIFFReadScanline(image, sbuf, row, chan); scanline_separate_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, chan); @@ -777,22 +778,17 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags) if (pixels16) { /* convert from float source */ - float rgb[3]; + float rgb[4]; if (ibuf->profile == IB_PROFILE_LINEAR_RGB) linearrgb_to_srgb_v3_v3(rgb, &fromf[from_i]); else copy_v3_v3(rgb, &fromf[from_i]); - to16[to_i+0] = FTOUSHORT(rgb[0]); - to16[to_i+1] = FTOUSHORT(rgb[1]); - to16[to_i+2] = FTOUSHORT(rgb[2]); - to_i += 3; from_i+=3; - - if (samplesperpixel == 4) { - to16[to_i+3] = FTOUSHORT(fromf[from_i+3]); - /*to_i++; from_i++;*/ /*unused, set on each loop */ - } + rgb[3] = fromf[from_i+3]; + + for (i = 0; i < samplesperpixel; i++, to_i++) + to16[to_i] = FTOUSHORT(rgb[i]); } else { for (i = 0; i < samplesperpixel; i++, to_i++, from_i++) diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c index 9e819e56da5..99872192e32 100644 --- a/source/blender/imbuf/intern/util.c +++ b/source/blender/imbuf/intern/util.c @@ -40,6 +40,7 @@ #endif #include "BLI_blenlib.h" +#include "BLI_fileops.h" #include "DNA_userdef_types.h" #include "BKE_global.h" @@ -154,12 +155,12 @@ static int IMB_ispic_name(const char *name) if (UTIL_DEBUG) printf("IMB_ispic_name: loading %s\n", name); - if (stat(name,&st) == -1) + if (stat(name, &st) == -1) return FALSE; if (((st.st_mode) & S_IFMT) != S_IFREG) return FALSE; - if ((fp = BLI_open(name,O_BINARY|O_RDONLY, 0)) < 0) + if ((fp = BLI_open(name, O_BINARY|O_RDONLY, 0)) < 0) return FALSE; if (read(fp, buf, 32) != 32) { @@ -342,14 +343,14 @@ int imb_get_anim_type(const char * name) /* stat test below fails on large files > 4GB */ if (isffmpeg(name)) return (ANIM_FFMPEG); # endif - if (stat(name,&st) == -1) return(0); + if (BLI_stat(name, &st) == -1) return(0); if (((st.st_mode) & S_IFMT) != S_IFREG) return(0); if (isavi(name)) return (ANIM_AVI); if (ismovie(name)) return (ANIM_MOVIE); #else - if (stat(name,&st) == -1) return(0); + if (BLI_stat(name, &st) == -1) return(0); if (((st.st_mode) & S_IFMT) != S_IFREG) return(0); if (ismovie(name)) return (ANIM_MOVIE); @@ -359,6 +360,8 @@ int imb_get_anim_type(const char * name) # ifdef WITH_FFMPEG if (isffmpeg(name)) return (ANIM_FFMPEG); # endif + + if (isavi(name)) return (ANIM_AVI); #endif #ifdef WITH_REDCODE diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index 5b730029022..2404459889c 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -133,9 +133,8 @@ typedef struct Library { * some cases its useful to access the absolute one, * This is set on file read. * Use BKE_library_filepath_set() rather than - * setting 'name' directly and it will be kepk in + * setting 'name' directly and it will be kept in * sync - campbell */ - int tot, pad; /* tot, idblock and filedata are only fo read and write */ struct Library *parent; /* set for indirectly linked libs, used in the outliner and while reading */ } Library; @@ -151,7 +150,7 @@ typedef struct PreviewImage { unsigned int h[2]; short changed[2]; short changed_timestamp[2]; - unsigned int * rect[2]; + unsigned int *rect[2]; } PreviewImage; /** @@ -256,4 +255,3 @@ typedef struct PreviewImage { #endif #endif - diff --git a/source/blender/makesdna/DNA_boid_types.h b/source/blender/makesdna/DNA_boid_types.h index 09221c4ada9..698667ff33c 100644 --- a/source/blender/makesdna/DNA_boid_types.h +++ b/source/blender/makesdna/DNA_boid_types.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 0d06b55f1d3..c531225775a 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -65,6 +65,7 @@ typedef struct Brush { short blend; /* blend mode */ short ob_mode; /* & with ob->mode to see if the brush is compatible, use for display only. */ + float weight; /* brush weight */ int size; /* brush diameter */ int flag; /* general purpose flag */ float jitter; /* jitter the position of the brush */ @@ -83,7 +84,7 @@ typedef struct Brush { char sculpt_tool; /* active sculpt tool */ char vertexpaint_tool; /* active vertex/weight paint blend mode (poorly named) */ char imagepaint_tool; /* active image paint tool */ - char pad3[5]; + char pad; float autosmooth_factor; diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h index 112247f3d66..73cebfb3d9f 100644 --- a/source/blender/makesdna/DNA_camera_types.h +++ b/source/blender/makesdna/DNA_camera_types.h @@ -48,7 +48,7 @@ typedef struct Camera { ID id; struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */ - char type; /* CAM_PERSP or CAM_ORTHO */ + char type; /* CAM_PERSP, CAM_ORTHO or CAM_PANO */ char dtx; /* draw type extra */ short flag; float passepartalpha; @@ -75,6 +75,7 @@ typedef struct Camera { /* type */ #define CAM_PERSP 0 #define CAM_ORTHO 1 +#define CAM_PANO 2 /* dtx */ #define CAM_DTX_CENTER 1 @@ -94,7 +95,7 @@ typedef struct Camera { #define CAM_SHOWNAME 16 #define CAM_ANGLETOGGLE 32 #define CAM_DS_EXPAND 64 -#define CAM_PANORAMA 128 +#define CAM_PANORAMA 128 /* deprecated */ #define CAM_SHOWSENSOR 256 /* yafray: dof sampling switch */ diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h index c9d80476fde..acdd25a101e 100644 --- a/source/blender/makesdna/DNA_curve_types.h +++ b/source/blender/makesdna/DNA_curve_types.h @@ -234,6 +234,8 @@ typedef struct Curve { struct CharInfo *strinfo; struct CharInfo curinfo; + + float bevfac1, bevfac2; } Curve; /* **************** CURVE ********************* */ diff --git a/source/blender/makesdna/DNA_group_types.h b/source/blender/makesdna/DNA_group_types.h index 8aa6de4fbe2..a084bee1c2d 100644 --- a/source/blender/makesdna/DNA_group_types.h +++ b/source/blender/makesdna/DNA_group_types.h @@ -1,7 +1,4 @@ /* - * blenlib/DNA_group_types.h (mar-2001 nzc) - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -23,7 +20,7 @@ * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): mar-2001 nzc * * ***** END GPL LICENSE BLOCK ***** */ @@ -61,6 +58,4 @@ typedef struct Group { float dupli_ofs[3]; } Group; - #endif - diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h index de2c9919df0..dfc70e5bd66 100644 --- a/source/blender/makesdna/DNA_image_types.h +++ b/source/blender/makesdna/DNA_image_types.h @@ -92,8 +92,8 @@ typedef struct Image { unsigned int bindcode; /* only for current image... */ unsigned int *repbind; /* for repeat of parts of images */ - struct PackedFile * packedfile; - struct PreviewImage * preview; + struct PackedFile *packedfile; + struct PreviewImage *preview; /* game engine tile animation */ float lastupdate; @@ -141,4 +141,3 @@ typedef struct Image { #define IMA_GEN_FLOAT 1 #endif - diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h index 8cf3814ada1..4884db14c57 100644 --- a/source/blender/makesdna/DNA_lamp_types.h +++ b/source/blender/makesdna/DNA_lamp_types.h @@ -66,7 +66,7 @@ typedef struct Lamp { short pad2; float clipsta, clipend, shadspotsize; - float bias, soft, compressthresh, pad5[3]; + float bias, soft, compressthresh, bleedbias, pad5[2]; short bufsize, samp, buffers, filtertype; char bufflag, buftype; @@ -76,7 +76,7 @@ typedef struct Lamp { float area_size, area_sizey, area_sizez; float adapt_thresh; short ray_samp_method; - short pad1; + short shadowmap_type; /* texact is for buttons */ short texact, shadhalostep; @@ -96,8 +96,9 @@ typedef struct Lamp { float atm_distance_factor; float skyblendfac; float sky_exposure; + float shadow_frustum_size; /* BGE Only */ short sky_colorspace; - char pad4[6]; + char pad4[2]; struct Ipo *ipo DNA_DEPRECATED; /* old animation system, deprecated for 2.5 */ struct MTex *mtex[18]; /* MAX_MTEX */ @@ -205,6 +206,9 @@ typedef struct Lamp { #define LAMAP_COL 1 #define LAMAP_SHAD 2 +/* shadowmap_type */ +#define LA_SHADMAP_SIMPLE 0 +#define LA_SHADMAP_VARIANCE 1 #endif /* __DNA_LAMP_TYPES_H__ */ diff --git a/source/blender/makesdna/DNA_listBase.h b/source/blender/makesdna/DNA_listBase.h index d0e7a2f4433..35549aee3d2 100644 --- a/source/blender/makesdna/DNA_listBase.h +++ b/source/blender/makesdna/DNA_listBase.h @@ -43,7 +43,7 @@ extern "C" { /* generic - all structs which are used in linked-lists used this */ typedef struct Link { - struct Link *next,*prev; + struct Link *next, *prev; } Link; diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h index 1e1421475ac..94bfe722abe 100644 --- a/source/blender/makesdna/DNA_meshdata_types.h +++ b/source/blender/makesdna/DNA_meshdata_types.h @@ -95,7 +95,7 @@ typedef struct MLoop { typedef struct MTexPoly { struct Image *tpage; char flag, transp; - short mode,tile,unwrap; + short mode, tile, unwrap; } MTexPoly; /* can copy from/to MTexPoly/MTFace */ diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 1abce525be2..6874e8de4f1 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -77,7 +77,7 @@ typedef struct bNodeSocket { short type, flag; short limit; /* max. number of links */ - short struct_type; /* optional identifier for RNA struct subtype */ + short pad1; float locx, locy; @@ -87,7 +87,7 @@ typedef struct bNodeSocket { short stack_index; /* local stack index */ /* XXX deprecated, kept for forward compatibility */ short stack_type DNA_DEPRECATED; - int pad3; + int pad2; void *cache; /* cached data from execution */ /* internal data to retrieve relations and groups */ @@ -112,10 +112,6 @@ typedef struct bNodeSocket { #define SOCK_INT 6 #define NUM_SOCKET_TYPES 7 /* must be last! */ -/* sock->struct_type */ -#define SOCK_STRUCT_NONE 0 /* default, type is defined by sock->type only */ -#define SOCK_STRUCT_OUTPUT_FILE 1 /* file output node socket */ - /* socket side (input/output) */ #define SOCK_IN 1 #define SOCK_OUT 2 @@ -371,12 +367,13 @@ typedef struct NodeImageMultiFileSocket { short use_render_format DNA_DEPRECATED; short use_node_format; /* use overall node image format */ int pad2; + char path[1024]; /* 1024 = FILE_MAX */ ImageFormatData format; } NodeImageMultiFileSocket; typedef struct NodeChroma { - float t1,t2,t3; - float fsize,fstrength,falpha; + float t1, t2, t3; + float fsize, fstrength, falpha; float key[4]; short algorithm, channel; } NodeChroma; diff --git a/source/blender/makesdna/DNA_object_fluidsim.h b/source/blender/makesdna/DNA_object_fluidsim.h index a55b7b17a22..dc4e4f54fd7 100644 --- a/source/blender/makesdna/DNA_object_fluidsim.h +++ b/source/blender/makesdna/DNA_object_fluidsim.h @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -50,16 +48,16 @@ typedef struct FluidVertexVelocity { typedef struct FluidsimSettings { struct FluidsimModifierData *fmd; /* for fast RNA access */ - /* domain,fluid or obstacle */ + /* domain, fluid or obstacle */ short type; - /* display advanced options in fluid sim tab (on=1,off=0)*/ + /* display advanced options in fluid sim tab (on=1, off=0)*/ short show_advancedoptions; /* domain object settings */ /* resolutions */ short resolutionxyz; short previewresxyz; - /* size of the domain in real units (meters along largest resolution x,y,z extent) */ + /* size of the domain in real units (meters along largest resolution x, y, z extent) */ float realsize; /* show original meshes, preview or final sim */ short guiDisplayMode; @@ -85,7 +83,7 @@ typedef struct FluidsimSettings { /* fluid object type settings */ /* gravity strength */ - float iniVelx,iniVely,iniVelz; + float iniVelx, iniVely, iniVelz; /* store pointer to original mesh (for replacing the current one) */ struct Mesh *orgMesh; @@ -106,8 +104,8 @@ typedef struct FluidsimSettings { /* additional flags depending on the type, lower short contains flags * to check validity, higher short additional flags */ short typeFlags; - /* switch off velocity genration, volume init type for fluid/obstacles (volume=1,shell=2,both=3) */ - char domainNovecgen,volumeInitType; + /* switch off velocity genration, volume init type for fluid/obstacles (volume=1, shell=2, both=3) */ + char domainNovecgen, volumeInitType; /* boundary "stickiness" for part slip values */ float partSlipValue; diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index 6fefd2d672f..cc212dd6d06 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -327,7 +325,7 @@ typedef struct SoftBody { maxloops, choke, solver_ID, - plastic,springpreload + plastic, springpreload ; struct SBScratch *scratch; /* scratch pad/cache on live time not saved in file */ diff --git a/source/blender/makesdna/DNA_property_types.h b/source/blender/makesdna/DNA_property_types.h index 55fa50e3f63..c1b810cd42b 100644 --- a/source/blender/makesdna/DNA_property_types.h +++ b/source/blender/makesdna/DNA_property_types.h @@ -1,7 +1,4 @@ /* - * - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index ceff33d97ee..c78d08e944d 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -860,13 +860,18 @@ typedef struct UnifiedPaintSettings { /* unified strength of brush */ float alpha; + /* unified brush weight, [0, 1] */ + float weight; + /* user preferences for sculpt and paint */ int flag; + int pad; } UnifiedPaintSettings; typedef enum { UNIFIED_PAINT_SIZE = (1<<0), UNIFIED_PAINT_ALPHA = (1<<1), + UNIFIED_PAINT_WEIGHT = (1<<5), /* only used if unified size is enabled, mirros the brush flags * BRUSH_LOCK_SIZE and BRUSH_SIZE_PRESSURE */ @@ -887,7 +892,8 @@ typedef struct ToolSettings { Sculpt *sculpt; UvSculpt *uvsculpt; /* uv smooth */ - /* Vertex groups */ + /* Vertex group weight - used only for editmode, not weight + paint */ float vgroup_weight; /* Subdivide Settings */ diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h index 0a516c90aa1..cd73b692011 100644 --- a/source/blender/makesdna/DNA_sequence_types.h +++ b/source/blender/makesdna/DNA_sequence_types.h @@ -208,7 +208,7 @@ typedef struct Editing { /* ************* Effect Variable Structs ********* */ typedef struct WipeVars { - float edgeWidth,angle; + float edgeWidth, angle; short forward, wipetype; } WipeVars; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 1938c63d474..0bc91907d6e 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -520,9 +520,15 @@ typedef struct SpaceClip { * defined when drawing and used for mouse position calculation */ /* movie postprocessing */ - int postproc_flag; + int postproc_flag, pad2; - int runtime_flag; /* different runtime flags */ + void *draw_context; + + /* dopesheet */ + short dope_sort; /* sort order in dopesheet view */ + short dope_flag; /* dopsheet view flags */ + + int pad3; } SpaceClip; /* view3d Now in DNA_view3d_types.h */ @@ -904,6 +910,7 @@ enum { #define SC_SHOW_GRAPH_TRACKS (1<<15) /*#define SC_SHOW_PYRAMID_LEVELS (1<<16) */ /* UNUSED */ #define SC_LOCK_TIMECURSOR (1<<17) +#define SC_SHOW_SECONDS (1<<18) /* SpaceClip->mode */ #define SC_MODE_TRACKING 0 @@ -913,9 +920,15 @@ enum { /* SpaceClip->view */ #define SC_VIEW_CLIP 0 #define SC_VIEW_GRAPH 1 +#define SC_VIEW_DOPESHEET 2 + +/* SpaceClip->dope_sort */ +#define SC_DOPE_SORT_NAME 0 +#define SC_DOPE_SORT_LONGEST 1 +#define SC_DOPE_SORT_TOTAL 2 -/* SpaceClip->runtime_flag */ -#define SC_GRAPH_BOTTOM (1<<0) +/* SpaceClip->dope_flag */ +#define SC_DOPE_SORT_INVERSE 1 /* space types, moved from DNA_screen_types.h */ /* Do NOT change order, append on end. types are hardcoded needed */ diff --git a/source/blender/makesdna/DNA_tracking_types.h b/source/blender/makesdna/DNA_tracking_types.h index 2f099ed59f5..6bf059c7ecb 100644 --- a/source/blender/makesdna/DNA_tracking_types.h +++ b/source/blender/makesdna/DNA_tracking_types.h @@ -193,6 +193,27 @@ typedef struct MovieTrackingStats { char message[256]; } MovieTrackingStats; +typedef struct MovieTrackingDopesheetChannel { + struct MovieTrackingDopesheetChannel *next, *prev; + + MovieTrackingTrack *track; /* motion track for which channel is created */ + int pad; + + int tot_segment; /* total number of segments */ + int *segments; /* tracked segments */ + int max_segment, total_frames; /* longest segment length and total number of tracked frames */ +} MovieTrackingDopesheetChannel; + +typedef struct MovieTrackingDopesheet { + int ok, pad; /* flag if dopesheet information is still relevant */ + + ListBase channels; + int tot_channel; + + short sort_method; /* method to be used to sort tracks */ + short sort_inverse; /* order of tracks is inverted */ +} MovieTrackingDopesheet; + typedef struct MovieTracking { MovieTrackingSettings settings; /* different tracking-related settings */ MovieTrackingCamera camera; /* camera intrinsics */ @@ -205,6 +226,8 @@ typedef struct MovieTracking { int objectnr, tot_object; /* index of active object and total number of objects */ MovieTrackingStats *stats; /* statistics displaying in clip editor */ + + MovieTrackingDopesheet dopesheet; /* dopesheet data */ } MovieTracking; /* MovieTrackingCamera->units */ @@ -230,6 +253,7 @@ enum { #define TRACK_CUSTOMCOLOR (1<<7) #define TRACK_USE_2D_STAB (1<<8) #define TRACK_PREVIEW_GRAYSCALE (1<<9) +#define TRACK_DOPE_SEL (1<<10) /* MovieTrackingTrack->tracker */ #define TRACKER_KLT 0 diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 636a3ea97e7..9f8409e4e79 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -205,7 +205,7 @@ typedef struct ThemeSpace { char grid[4]; char wire[4], select[4]; - char lamp[4], speaker[4], empty[4],camera[4], pad[8]; + char lamp[4], speaker[4], empty[4], camera[4], pad[8]; char active[4], group[4], group_active[4], transform[4]; char vertex[4], vertex_select[4]; char edge[4], edge_select[4]; @@ -377,13 +377,13 @@ typedef struct UserDef { short tb_leftmouse, tb_rightmouse; struct SolidLight light[3]; short tw_hotspot, tw_flag, tw_handlesize, tw_size; - short textimeout,texcollectrate; + short textimeout, texcollectrate; short wmdrawmethod; /* removed wmpad */ short dragthreshold; int memcachelimit; int prefetchframes; short frameserverport; - short pad_rot_angle; /*control the rotation step of the view when PAD2,PAD4,PAD6&PAD8 is use*/ + short pad_rot_angle; /*control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use*/ short obcenter_dia; short rvisize; /* rotating view icon size */ short rvibright; /* rotating view icon brightness */ diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c index 41c04ca0899..d0429041d9b 100644 --- a/source/blender/makesdna/intern/dna_genfile.c +++ b/source/blender/makesdna/intern/dna_genfile.c @@ -1,8 +1,4 @@ -/* dna_genfile.c - * - * Functions for struct-dna, the genetic file dot c! - * - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -32,6 +28,8 @@ /** \file blender/makesdna/intern/dna_genfile.c * \ingroup DNA + * + * Functions for struct-dna, the genetic file dot c! */ @@ -338,7 +336,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap) else sdna->nr_names= *data; data++; - sdna->names= MEM_callocN( sizeof(void *)*sdna->nr_names, "sdnanames"); + sdna->names= MEM_callocN(sizeof(void *)*sdna->nr_names, "sdnanames"); } else { printf("NAME error in SDNA file\n"); @@ -378,7 +376,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap) else sdna->nr_types= *data; data++; - sdna->types= MEM_callocN( sizeof(void *)*sdna->nr_types, "sdnatypes"); + sdna->types= MEM_callocN(sizeof(void *)*sdna->nr_types, "sdnatypes"); } else { printf("TYPE error in SDNA file\n"); @@ -442,7 +440,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap) else sdna->nr_structs= *data; data++; - sdna->structs= MEM_callocN( sizeof(void *)*sdna->nr_structs, "sdnastrcs"); + sdna->structs= MEM_callocN(sizeof(void *)*sdna->nr_structs, "sdnastrcs"); } else { printf("STRC error in SDNA file\n"); @@ -933,7 +931,7 @@ static void reconstruct_struct(SDNA *newsdna, SDNA *oldsdna, spo= oldsdna->structs[oldSDNAnr]; elen= oldsdna->typelens[ spo[0] ]; - memcpy( cur, data, elen); + memcpy(cur, data, elen); return; } @@ -1140,7 +1138,7 @@ void *DNA_struct_reconstruct(SDNA *newsdna, SDNA *oldsdna, char *compflags, int return NULL; } - cur= MEM_callocN( blocks*curlen, "reconstruct"); + cur= MEM_callocN(blocks*curlen, "reconstruct"); cpc= cur; cpo= data; for (a=0; a<blocks; a++) { diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index a9c8c1bfe9c..ec5b0cb8762 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -362,8 +362,8 @@ static int add_name(const char *str) * */ buf[i] = 0; if (debugSDNA > 3) printf("Name before chomping: %s\n", buf); - if ((strncmp(buf,"(*headdraw", 10) == 0) || - (strncmp(buf,"(*windraw", 9) == 0) ) + if ((strncmp(buf, "(*headdraw", 10) == 0) || + (strncmp(buf, "(*windraw", 9) == 0) ) { buf[i] = ')'; buf[i+1] = '('; @@ -768,7 +768,7 @@ static int calculate_structlens(int firststruct) } if (alphalen % 8) { - printf("Align pointer error in struct (alphalen8): %s %s\n", types[structtype],cp); + printf("Align pointer error in struct (alphalen8): %s %s\n", types[structtype], cp); dna_error = 1; } @@ -794,7 +794,7 @@ static int calculate_structlens(int firststruct) /* struct alignment */ if (type >= firststruct) { if (sizeof(void *)==8 && (len % 8) ) { - printf("Align struct error: %s %s\n", types[structtype],cp); + printf("Align struct error: %s %s\n", types[structtype], cp); dna_error = 1; } } @@ -876,6 +876,8 @@ static int calculate_structlens(int firststruct) printf(" %s\n", types[structtype]); } } + + dna_error = 1; } return(dna_error); @@ -892,7 +894,7 @@ void dna_write(FILE *file, void *pntr, int size) data = (char *) pntr; for (i = 0 ; i < size ; i++) { - fprintf(file, "%d,", data[i]); + fprintf(file, "%d, ", data[i]); linelength++; if (linelength >= MAX_DNA_LINE_LENGTH) { fprintf(file, "\n"); @@ -991,7 +993,7 @@ static int make_structDNA(char *baseDirectory, FILE *file) /* FOR DEBUG */ if (debugSDNA > 1) { - int a,b; + int a, b; /* short *elem; */ short num_types; @@ -1009,7 +1011,7 @@ static int make_structDNA(char *baseDirectory, FILE *file) for (a=0; a<nr_structs; a++) { sp= structs[a]; - printf(" struct %s elems: %d size: %d\n", types[sp[0]], sp[1],typelens[sp[0]]); + printf(" struct %s elems: %d size: %d\n", types[sp[0]], sp[1], typelens[sp[0]]); num_types = sp[1]; sp+= 2; /* ? num_types was elem? */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index c99cbe8cdbf..acd375d15a9 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -372,6 +372,7 @@ extern StructRNA RNA_MotionPathVert; extern StructRNA RNA_MouseSensor; extern StructRNA RNA_MovieSequence; extern StructRNA RNA_MovieClipSequence; +extern StructRNA RNA_MovieTrackingTrack; extern StructRNA RNA_MovieTrackingObject; extern StructRNA RNA_MulticamSequence; extern StructRNA RNA_MultiresModifier; diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index cb567ac5873..ff9929aea9a 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -70,6 +70,8 @@ extern EnumPropertyItem fmodifier_type_items[]; extern EnumPropertyItem nla_mode_extend_items[]; extern EnumPropertyItem nla_mode_blend_items[]; +extern EnumPropertyItem motionpath_bake_location_items[]; + extern EnumPropertyItem event_value_items[]; extern EnumPropertyItem event_type_items[]; extern EnumPropertyItem operator_return_items[]; diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index c3beffbe223..47b25720373 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -147,49 +147,49 @@ typedef enum PropertyFlag { /* editable means the property is editable in the user * interface, properties are editable by default except * for pointers and collections. */ - PROP_EDITABLE = 1<<0, + PROP_EDITABLE = (1<<0), /* this property is editable even if it is lib linked, * meaning it will get lost on reload, but it's useful * for editing. */ - PROP_LIB_EXCEPTION = 1<<16, + PROP_LIB_EXCEPTION = (1<<16), /* animatable means the property can be driven by some * other input, be it animation curves, expressions, .. * properties are animatable by default except for pointers * and collections */ - PROP_ANIMATABLE = 1<<1, + PROP_ANIMATABLE = (1<<1), /* icon */ - PROP_ICONS_CONSECUTIVE = 1<<12, + PROP_ICONS_CONSECUTIVE = (1<<12), /* hidden in the user interface */ - PROP_HIDDEN = 1<<19, + PROP_HIDDEN = (1<<19), /* do not write in presets */ - PROP_SKIP_SAVE = 1<<28, + PROP_SKIP_SAVE = (1<<28), /* function paramater flags */ - PROP_REQUIRED = 1<<2, - PROP_OUTPUT = 1<<3, - PROP_RNAPTR = 1<<11, + PROP_REQUIRED = (1<<2), + PROP_OUTPUT = (1<<3), + PROP_RNAPTR = (1<<11), /* registering */ - PROP_REGISTER = 1<<4, + PROP_REGISTER = (1<<4), PROP_REGISTER_OPTIONAL = (1<<4)|(1<<5), /* pointers */ - PROP_ID_REFCOUNT = 1<<6, + PROP_ID_REFCOUNT = (1<<6), /* disallow assigning a variable to its self, eg an object tracking its self * only apply this to types that are derived from an ID ()*/ - PROP_ID_SELF_CHECK = 1<<20, + PROP_ID_SELF_CHECK = (1<<20), /* use for... * - pointers: in the UI and python so unsetting or setting to None won't work * - strings: so our internal generated get/length/set functions know to do NULL checks before access [#30865] */ - PROP_NEVER_NULL = 1<<18, + PROP_NEVER_NULL = (1<<18), /* currently only used for UI, this is similar to PROP_NEVER_NULL * except that the value may be NULL at times, used for ObData, where an Empty's will be NULL * but setting NULL on a mesh object is not possible. So, if its not NULL, setting NULL cant be done! */ - PROP_NEVER_UNLINK = 1<<25, + PROP_NEVER_UNLINK = (1<<25), /* flag contains multiple enums. * note: not to be confused with prop->enumbitflags @@ -197,32 +197,32 @@ typedef enum PropertyFlag { * * note: these can't be animated so use with care. */ - PROP_ENUM_FLAG = 1<<21, + PROP_ENUM_FLAG = (1<<21), /* need context for update function */ - PROP_CONTEXT_UPDATE = 1<<22, + PROP_CONTEXT_UPDATE = (1<<22), PROP_CONTEXT_PROPERTY_UPDATE = (1<<22)|(1<<27), /* Use for arrays or for any data that should not have a referene kept * most common case is functions that return arrays where the array */ - PROP_THICK_WRAP = 1<<23, + PROP_THICK_WRAP = (1<<23), /* Reject values outside limits, use for python api only so far * this is for use when silently clamping string length will give * bad behavior later. Could also enforce this for INT's and other types. * note: currently no support for function arguments or non utf8 paths (filepaths) */ - PROP_NEVER_CLAMP = 1<<26, + PROP_NEVER_CLAMP = (1<<26), /* internal flags */ - PROP_BUILTIN = 1<<7, - PROP_EXPORT = 1<<8, - PROP_RUNTIME = 1<<9, - PROP_IDPROPERTY = 1<<10, - PROP_RAW_ACCESS = 1<<13, - PROP_RAW_ARRAY = 1<<14, - PROP_FREE_POINTERS = 1<<15, - PROP_DYNAMIC = 1<<17, /* for dynamic arrays, and retvals of type string */ - PROP_ENUM_NO_CONTEXT = 1<<24 /* for enum that shouldn't be contextual */ + PROP_BUILTIN = (1<<7), + PROP_EXPORT = (1<<8), + PROP_RUNTIME = (1<<9), + PROP_IDPROPERTY = (1<<10), + PROP_RAW_ACCESS = (1<<13), + PROP_RAW_ARRAY = (1<<14), + PROP_FREE_POINTERS = (1<<15), + PROP_DYNAMIC = (1<<17), /* for dynamic arrays, and retvals of type string */ + PROP_ENUM_NO_CONTEXT = (1<<24) /* for enum that shouldn't be contextual */ } PropertyFlag; typedef struct CollectionPropertyIterator { diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index de569134123..0e47a680553 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -281,7 +281,7 @@ static void rna_sortlist(ListBase *listbase, int(*cmp)(const void*, const void*) static void rna_print_c_string(FILE *f, const char *str) { - static const char *escape[] = {"\''", "\"\"", "\??", "\\\\","\aa", "\bb", "\ff", "\nn", "\rr", "\tt", "\vv", NULL}; + static const char *escape[] = {"\''", "\"\"", "\??", "\\\\", "\aa", "\bb", "\ff", "\nn", "\rr", "\tt", "\vv", NULL}; int i, j; if (!str) { @@ -3127,7 +3127,7 @@ int main(int argc, char **argv) totblock = MEM_get_memory_blocks_in_use(); if (totblock != 0) { - fprintf(stderr, "Error Totblock: %d\n",totblock); + fprintf(stderr, "Error Totblock: %d\n", totblock); MEM_set_error_callback(mem_error_cb); MEM_printmemlist(); } diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 18edcf1344f..73e046f0d63 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -615,7 +615,8 @@ PropertyRNA *RNA_struct_find_nested(PointerRNA *ptr, StructRNA *srna) { PropertyRNA *prop = NULL; - RNA_STRUCT_BEGIN (ptr, iprop) { + RNA_STRUCT_BEGIN (ptr, iprop) + { /* This assumes that there can only be one user of this nested struct */ if (RNA_property_pointer_type(ptr, iprop) == srna) { prop = iprop; @@ -637,7 +638,8 @@ int RNA_struct_contains_property(PointerRNA *ptr, PropertyRNA *prop_test) iterprop = RNA_struct_iterator_property(ptr->type); - RNA_PROP_BEGIN (ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (ptr, itemptr, iterprop) + { /* PropertyRNA *prop= itemptr.data; */ if (prop_test == (PropertyRNA *)itemptr.data) { found = TRUE; @@ -684,7 +686,8 @@ FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier) func = NULL; - RNA_PROP_BEGIN (&tptr, funcptr, iterprop) { + RNA_PROP_BEGIN (&tptr, funcptr, iterprop) + { if (strcmp(identifier, RNA_function_identifier(funcptr.data)) == 0) { func = funcptr.data; break; @@ -3128,7 +3131,8 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro } /* no item property pointer, can still be id property, or * property of a type derived from the collection pointer type */ - RNA_PROP_BEGIN (ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) + { if (itemptr.data) { if (itemprop) { /* we got the property already */ @@ -4499,7 +4503,8 @@ char *RNA_pointer_as_string(bContext *C, PointerRNA *ptr) BLI_dynstr_append(dynstr, "{"); - RNA_STRUCT_BEGIN (ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) + { propname = RNA_property_identifier(prop); if (strcmp(propname, "rna_type") == 0) @@ -4542,7 +4547,8 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA PropertyRNA *prop_default; char *buf_default; - RNA_PROP_BEGIN (ptr, propptr, iterprop) { + RNA_PROP_BEGIN (ptr, propptr, iterprop) + { prop = propptr.data; flag = RNA_property_flag(prop); diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index 76af6309ecf..299e1671394 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -191,7 +191,7 @@ static void rna_Action_active_pose_marker_index_range(PointerRNA *ptr, int *min, -static void rna_Action_frame_range_get(PointerRNA *ptr,float *values) +static void rna_Action_frame_range_get(PointerRNA *ptr, float *values) { /* don't include modifiers because they too easily can have very large * ranges: MINAFRAMEF to MAXFRAMEF. */ calc_action_range(ptr->id.data, values, values+1, FALSE); @@ -623,9 +623,9 @@ static void rna_def_action(BlenderRNA *brna) rna_def_action_pose_markers(brna, prop); /* properties */ - prop = RNA_def_float_vector(srna, "frame_range" , 2 , NULL , 0, 0, "Frame Range" , - "The final frame range of all F-Curves within this action" , 0 , 0); - RNA_def_property_float_funcs(prop, "rna_Action_frame_range_get" , NULL, NULL); + prop = RNA_def_float_vector(srna, "frame_range", 2, NULL, 0, 0, "Frame Range", + "The final frame range of all F-Curves within this action", 0, 0); + RNA_def_property_float_funcs(prop, "rna_Action_frame_range_get", NULL, NULL); RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* special "type" limiter - should not really be edited in general, diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index e8eed526a7c..3b89899702d 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -141,7 +141,7 @@ static void rna_ConstraintActuator_type_set(struct PointerRNA *ptr, int value) switch (ca->type) { case ACT_CONST_TYPE_ORI: /* negative axis not supported in the orientation mode */ - if (ELEM3(ca->mode, ACT_CONST_DIRNX,ACT_CONST_DIRNY, ACT_CONST_DIRNZ)) + if (ELEM3(ca->mode, ACT_CONST_DIRNX, ACT_CONST_DIRNY, ACT_CONST_DIRNZ)) ca->mode = ACT_CONST_NONE; break; diff --git a/source/blender/makesrna/intern/rna_animviz.c b/source/blender/makesrna/intern/rna_animviz.c index f7065307d87..167eb23c023 100644 --- a/source/blender/makesrna/intern/rna_animviz.c +++ b/source/blender/makesrna/intern/rna_animviz.c @@ -39,6 +39,14 @@ #include "WM_types.h" +/* Which part of bone(s) get baked */ +// TODO: icons? +EnumPropertyItem motionpath_bake_location_items[] = { + {MOTIONPATH_BAKE_HEADS, "HEADS", 0, "Heads", "Calculate bone paths from heads"}, + {0, "TAILS", 0, "Tails", "Calculate bone paths from tails"}, + //{MOTIONPATH_BAKE_CENTERS, "CENTROID", 0, "Centers", "Calculate bone paths from center of mass"}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME static PointerRNA rna_AnimViz_onion_skinning_get(PointerRNA *ptr) @@ -241,10 +249,6 @@ static void rna_def_animviz_paths(BlenderRNA *brna) "Display Paths of poses within a fixed number of frames around the current frame"}, {MOTIONPATH_TYPE_RANGE, "RANGE", 0, "In Range", "Display Paths of poses within specified range"}, {0, NULL, 0, NULL, NULL}}; - static const EnumPropertyItem prop_location_items[] = { - {MOTIONPATH_BAKE_HEADS, "HEADS", 0, "Heads", "Calculate bone paths from heads"}, - {0, "TAILS", 0, "Tails", "Calculate bone paths from tails"}, - {0, NULL, 0, NULL, NULL}}; srna = RNA_def_struct(brna, "AnimVizMotionPaths", NULL); RNA_def_struct_sdna(srna, "bAnimVizSettings"); @@ -260,7 +264,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna) prop = RNA_def_property(srna, "bake_location", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "path_bakeflag"); - RNA_def_property_enum_items(prop, prop_location_items); + RNA_def_property_enum_items(prop, motionpath_bake_location_items); RNA_def_property_ui_text(prop, "Bake Location", "When calculating Bone Paths, use Head or Tips"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */ diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index ce9edc17999..2f27c7a1e84 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -407,7 +407,7 @@ static void rna_def_boidrule(BlenderRNA *brna) /* data */ srna = RNA_def_struct(brna, "BoidRule", NULL); - RNA_def_struct_ui_text(srna , "Boid Rule", ""); + RNA_def_struct_ui_text(srna, "Boid Rule", ""); RNA_def_struct_refine_func(srna, "rna_BoidRule_refine"); RNA_def_struct_path_func(srna, "rna_BoidRule_path"); diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 5093c1a6eee..ee4b34508d1 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -52,7 +52,7 @@ EnumPropertyItem brush_sculpt_tool_items[] = { {SCULPT_TOOL_BLOB, "BLOB", ICON_BRUSH_BLOB, "Blob", ""}, {SCULPT_TOOL_CLAY, "CLAY", ICON_BRUSH_CLAY, "Clay", ""}, {SCULPT_TOOL_CLAY_STRIPS, "CLAY_STRIPS", ICON_BRUSH_CLAY_STRIPS, "Clay Strips", ""}, - {SCULPT_TOOL_CREASE, "CREASE",ICON_BRUSH_CREASE, "Crease", ""}, + {SCULPT_TOOL_CREASE, "CREASE", ICON_BRUSH_CREASE, "Crease", ""}, {SCULPT_TOOL_DRAW, "DRAW", ICON_BRUSH_SCULPT_DRAW, "Draw", ""}, {SCULPT_TOOL_FILL, "FILL", ICON_BRUSH_FILL, "Fill", ""}, {SCULPT_TOOL_FLATTEN, "FLATTEN", ICON_BRUSH_FLATTEN, "Flatten", ""}, @@ -288,7 +288,7 @@ static void rna_Brush_set_size(PointerRNA *ptr, int value) Brush* brush = ptr->data; /* scale unprojected radius so it stays consistent with brush size */ - brush_scale_unprojected_radius(&brush->unprojected_radius, + BKE_brush_scale_unprojected_radius(&brush->unprojected_radius, value, brush->size); brush->size = value; } @@ -298,7 +298,7 @@ static void rna_Brush_set_unprojected_radius(PointerRNA *ptr, float value) Brush* brush = ptr->data; /* scale brush size so it stays consistent with unprojected_radius */ - brush_scale_size(&brush->size, value, brush->unprojected_radius); + BKE_brush_scale_size(&brush->size, value, brush->unprojected_radius); brush->unprojected_radius = value; } @@ -572,7 +572,7 @@ static void rna_def_brush(BlenderRNA *brna) prop = RNA_def_property(srna, "rate", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rate"); - RNA_def_property_range(prop, 0.0001f , 10000.0f); + RNA_def_property_range(prop, 0.0001f, 10000.0f); RNA_def_property_ui_range(prop, 0.01f, 1.0f, 1, 3); RNA_def_property_ui_text(prop, "Rate", "Interval between paints for Airbrush"); RNA_def_property_update(prop, 0, "rna_Brush_update"); @@ -583,6 +583,13 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Color", ""); RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 3); + RNA_def_property_ui_text(prop, "Weight", "Vertex weight when brush is applied"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "alpha"); RNA_def_property_float_default(prop, 0.5f); @@ -867,7 +874,7 @@ static void rna_def_brush(BlenderRNA *brna) prop = RNA_def_property(srna, "clone_offset", PROP_FLOAT, PROP_XYZ); RNA_def_property_float_sdna(prop, NULL, "clone.offset"); RNA_def_property_ui_text(prop, "Clone Offset", ""); - RNA_def_property_ui_range(prop, -1.0f , 1.0f, 10.0f, 3); + RNA_def_property_ui_range(prop, -1.0f, 1.0f, 10.0f, 3); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_Brush_update"); /* brush capabilities (mode-dependent) */ diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c index 180479d6f63..70a33734c3f 100644 --- a/source/blender/makesrna/intern/rna_camera.c +++ b/source/blender/makesrna/intern/rna_camera.c @@ -46,14 +46,14 @@ static float rna_Camera_angle_get(PointerRNA *ptr) { Camera *cam = ptr->id.data; - float sensor = camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); + float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); return focallength_to_fov(cam->lens, sensor); } static void rna_Camera_angle_set(PointerRNA *ptr, float value) { Camera *cam = ptr->id.data; - float sensor = camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); + float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); cam->lens = fov_to_focallength(value, sensor); } @@ -97,6 +97,7 @@ void RNA_def_camera(BlenderRNA *brna) static EnumPropertyItem prop_type_items[] = { {CAM_PERSP, "PERSP", 0, "Perspective", ""}, {CAM_ORTHO, "ORTHO", 0, "Orthographic", ""}, + {CAM_PANO, "PANO", 0, "Panoramic", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_draw_type_extra_items[] = { {CAM_DTX_CENTER, "CENTER", 0, "Center", ""}, @@ -271,12 +272,6 @@ void RNA_def_camera(BlenderRNA *brna) RNA_def_property_enum_items(prop, prop_lens_unit_items); RNA_def_property_ui_text(prop, "Lens Unit", "Unit to edit lens in for the user interface"); - prop = RNA_def_property(srna, "use_panorama", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_PANORAMA); - RNA_def_property_ui_text(prop, "Panorama", - "Render the scene with a cylindrical camera for pseudo-fisheye lens effects"); - RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); - /* pointers */ rna_def_animdata_common(srna); diff --git a/source/blender/makesrna/intern/rna_camera_api.c b/source/blender/makesrna/intern/rna_camera_api.c index 14391e74239..2d19047ef89 100644 --- a/source/blender/makesrna/intern/rna_camera_api.c +++ b/source/blender/makesrna/intern/rna_camera_api.c @@ -46,7 +46,7 @@ void rna_camera_view_frame(struct Camera *camera, struct Scene *scene, { float vec[4][3]; - camera_view_frame(scene, camera, vec); + BKE_camera_view_frame(scene, camera, vec); copy_v3_v3(vec1_r, vec[0]); copy_v3_v3(vec2_r, vec[1]); diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 6d67f0c00dd..e321e83dd61 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -68,7 +68,7 @@ EnumPropertyItem constraint_type_items[] = { {CONSTRAINT_TYPE_LOCKTRACK, "LOCKED_TRACK", ICON_CONSTRAINT_DATA, "Locked Track", "Tracking along a single axis"}, {CONSTRAINT_TYPE_SPLINEIK, "SPLINE_IK", ICON_CONSTRAINT_DATA, "Spline IK", ""}, - {CONSTRAINT_TYPE_STRETCHTO, "STRETCH_TO",ICON_CONSTRAINT_DATA, "Stretch To", ""}, + {CONSTRAINT_TYPE_STRETCHTO, "STRETCH_TO", ICON_CONSTRAINT_DATA, "Stretch To", ""}, {CONSTRAINT_TYPE_TRACKTO, "TRACK_TO", ICON_CONSTRAINT_DATA, "Track To", "Legacy tracking constraint prone to twisting artifacts"}, {0, "", 0, N_("Relationship"), ""}, @@ -1020,7 +1020,7 @@ static void rna_def_constraint_minmax(BlenderRNA *brna) srna = RNA_def_struct(brna, "FloorConstraint", "Constraint"); RNA_def_struct_ui_text(srna, "Floor Constraint", "Use the target object for location limitation"); - RNA_def_struct_sdna_from(srna, "bMinMaxConstraint","data"); + RNA_def_struct_sdna_from(srna, "bMinMaxConstraint", "data"); prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "tar"); diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 86a2d6c9a46..a62ee6d78d1 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -558,7 +558,7 @@ static void rna_Curve_spline_bezpoints_add(ID *id, Nurb *nu, ReportList *reports static Nurb *rna_Curve_spline_new(Curve *cu, int type) { - Nurb *nu = (Nurb *) MEM_callocN( sizeof( Nurb ), "spline.new" ); + Nurb *nu = (Nurb *) MEM_callocN(sizeof( Nurb ), "spline.new" ); if (type == CU_BEZIER) { BezTriple *bezt = (BezTriple *)MEM_callocN(sizeof(BezTriple), "spline.new.bezt"); @@ -1470,6 +1470,18 @@ static void rna_def_curve(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Materials", ""); RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */ RNA_def_property_collection_funcs(prop, 0, NULL, NULL, NULL, NULL, NULL, NULL, "rna_IDMaterials_assign_int"); + + prop = RNA_def_property(srna, "bevel_factor_start", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "bevfac1"); + RNA_def_property_range(prop, 0, 1.0); + RNA_def_property_ui_text(prop, "Start Bevel Factor", "Factor that defines from where beveling of spline happens (0=from the very beginning, 1=from the very end)"); + RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + + prop = RNA_def_property(srna, "bevel_factor_end", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "bevfac2"); + RNA_def_property_range(prop, 0, 1.0); + RNA_def_property_ui_text(prop, "End Bevel Factor", "Factor that defines to where beveling of spline happens (0=to the very beginning, 1=to the very end)"); + RNA_def_property_update(prop, 0, "rna_Curve_update_data"); } static void rna_def_curve_nurb(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index a4aac6f345c..003b4ae4fbc 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -141,7 +141,7 @@ static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA psys->pointcache = BKE_ptcache_add(&psys->ptcaches); psys->flag |= PSYS_ENABLED; BLI_strncpy(psys->name, "FluidParticles", sizeof(psys->name)); - BLI_addtail(&ob->particlesystem,psys); + BLI_addtail(&ob->particlesystem, psys); /* add modifier */ psmd = (ParticleSystemModifierData*)modifier_new(eModifierType_ParticleSystem); diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index e5939296f5a..f7e7435598b 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -212,13 +212,13 @@ static int rna_Image_has_data_get(PointerRNA *ptr) return 0; } -static void rna_Image_size_get(PointerRNA *ptr,int *values) +static void rna_Image_size_get(PointerRNA *ptr, int *values) { Image *im = (Image*)ptr->data; ImBuf *ibuf; void *lock; - ibuf = BKE_image_acquire_ibuf(im, NULL , &lock); + ibuf = BKE_image_acquire_ibuf(im, NULL, &lock); if (ibuf) { values[0] = ibuf->x; values[1] = ibuf->y; @@ -237,7 +237,7 @@ static void rna_Image_resolution_get(PointerRNA *ptr, float *values) ImBuf *ibuf; void *lock; - ibuf = BKE_image_acquire_ibuf(im, NULL , &lock); + ibuf = BKE_image_acquire_ibuf(im, NULL, &lock); if (ibuf) { values[0] = ibuf->ppm[0]; values[1] = ibuf->ppm[1]; @@ -256,7 +256,7 @@ static void rna_Image_resolution_set(PointerRNA *ptr, const float *values) ImBuf *ibuf; void *lock; - ibuf = BKE_image_acquire_ibuf(im, NULL , &lock); + ibuf = BKE_image_acquire_ibuf(im, NULL, &lock); if (ibuf) { ibuf->ppm[0] = values[0]; ibuf->ppm[1] = values[1]; @@ -616,13 +616,13 @@ static void rna_def_image(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Depth", "Image bit depth"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - prop = RNA_def_int_vector(srna, "size" , 2 , NULL , 0, 0, "Size" , - "Width and height in pixels, zero when image data cant be loaded" , 0 , 0); - RNA_def_property_int_funcs(prop, "rna_Image_size_get" , NULL, NULL); + prop = RNA_def_int_vector(srna, "size", 2, NULL, 0, 0, "Size", + "Width and height in pixels, zero when image data cant be loaded", 0, 0); + RNA_def_property_int_funcs(prop, "rna_Image_size_get", NULL, NULL); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - prop = RNA_def_float_vector(srna, "resolution" , 2 , NULL , 0, 0, "Resolution" , "X/Y pixels per meter" , 0 , 0); - RNA_def_property_float_funcs(prop, "rna_Image_resolution_get" , "rna_Image_resolution_set", NULL); + prop = RNA_def_float_vector(srna, "resolution", 2, NULL, 0, 0, "Resolution", "X/Y pixels per meter", 0, 0); + RNA_def_property_float_funcs(prop, "rna_Image_resolution_get", "rna_Image_resolution_set", NULL); prop = RNA_def_property(srna, "pixels", PROP_FLOAT, PROP_NONE); RNA_def_property_flag(prop, PROP_DYNAMIC); diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c index 8594bda96d1..ff717635250 100644 --- a/source/blender/makesrna/intern/rna_image_api.c +++ b/source/blender/makesrna/intern/rna_image_api.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index 671bee80523..fef362c8f10 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -86,6 +86,29 @@ static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value) set_current_lamp_texture(la, value.data); } +static int rna_use_shadow_get(PointerRNA *ptr) +{ + Lamp *la = (Lamp*)ptr->data; + + if(la->type == LA_SPOT) + return la->mode & LA_SHAD_BUF; + else + return la->mode & LA_SHAD_RAY; +} + +static void rna_use_shadow_set(PointerRNA *ptr, int value) +{ + Lamp *la = (Lamp*)ptr->data; + if (value) { + if(la->type == LA_SPOT) + la->mode |= LA_SHAD_BUF; + else + la->mode |= LA_SHAD_RAY; + } + else + la->mode &= ~(LA_SHAD_BUF|LA_SHAD_RAY); +} + static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr) { Lamp *la = (Lamp*)ptr->data; @@ -464,12 +487,135 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area) {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""}, {0, NULL, 0, NULL, NULL}}; - prop = RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE); + static EnumPropertyItem prop_shadbuftype_items[] = { + {LA_SHADBUF_REGULAR, "REGULAR", 0, "Classical", "Classic shadow buffer"}, + {LA_SHADBUF_HALFWAY, "HALFWAY", 0, "Classic-Halfway", + "Regular buffer, averaging the closest and 2nd closest Z value to reducing " + "bias artifacts"}, + {LA_SHADBUF_IRREGULAR, "IRREGULAR", 0, "Irregular", + "Irregular buffer produces sharp shadow always, but it doesn't show up for raytracing"}, + {LA_SHADBUF_DEEP, "DEEP", 0, "Deep", + "Deep shadow buffer supports transparency and better filtering, at the cost of " + "more memory usage and processing time"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem prop_shadbuffiltertype_items[] = { + {LA_SHADBUF_BOX, "BOX", 0, "Box", "Apply the Box filter to shadow buffer samples"}, + {LA_SHADBUF_TENT, "TENT", 0, "Tent", "Apply the Tent Filter to shadow buffer samples"}, + {LA_SHADBUF_GAUSS, "GAUSS", 0, "Gauss", "Apply the Gauss filter to shadow buffer samples"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem prop_numbuffer_items[] = { + {1, "BUFFERS_1", 0, "1", "Only one buffer rendered"}, + {4, "BUFFERS_4", 0, "4", "Renders 4 buffers for better AA, this quadruples memory usage"}, + {9, "BUFFERS_9", 0, "9", "Renders 9 buffers for better AA, this uses nine times more memory"}, + {0, NULL, 0, NULL, NULL}}; + + /* GE only */ + static EnumPropertyItem prop_ge_shadowbuffer_type_items[] = { + {LA_SHADMAP_SIMPLE, "SIMPLE", 0, "Simple", "Simple shadow maps"}, + {LA_SHADMAP_VARIANCE, "VARIANCE", 0, "Variance", "Variance shadow maps"}, + {0, NULL, 0, NULL, NULL}}; + + prop= RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_use_shadow_get", "rna_use_shadow_set"); + RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); + + prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode"); RNA_def_property_enum_items(prop, (spot)? prop_spot_shadow_items: prop_shadow_items); - RNA_def_property_ui_text(prop, "Shadow Method", "Method to compute lamp shadow with"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_size", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "bufsize"); + RNA_def_property_range(prop, 512, 10240); + RNA_def_property_ui_text(prop, "Shadow Buffer Size", + "Resolution of the shadow buffer, higher values give crisper shadows " + "but use more memory"); + RNA_def_property_int_funcs(prop, NULL, "rna_Lamp_buffer_size_set", NULL); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_filter_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "filtertype"); + RNA_def_property_enum_items(prop, prop_shadbuffiltertype_items); + RNA_def_property_ui_text(prop, "Shadow Filter Type", "Type of shadow filter (Buffer Shadows)"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_sample_buffers", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "buffers"); + RNA_def_property_enum_items(prop, prop_numbuffer_items); + RNA_def_property_ui_text(prop, "Shadow Sample Buffers", + "Number of shadow buffers to render for better AA, this increases memory usage"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_clip_start", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "clipsta"); + RNA_def_property_range(prop, 0.0f, 9999.0f); + RNA_def_property_ui_text(prop, "Shadow Buffer Clip Start", + "Shadow map clip start, below which objects will not generate shadows"); RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); + prop= RNA_def_property(srna, "shadow_buffer_clip_end", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "clipend"); + RNA_def_property_range(prop, 0.0f, 9999.0f); + RNA_def_property_ui_text(prop, "Shadow Buffer Clip End", + "Shadow map clip end, beyond which objects will not generate shadows"); + RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); + + prop = RNA_def_property(srna, "shadow_buffer_bias", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "bias"); + RNA_def_property_range(prop, 0.001f, 5.0f); + RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Shadow buffer sampling bias"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_bleed_bias", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "bleedbias"); + RNA_def_property_range(prop, 0.f, 1.f); + RNA_def_property_ui_text(prop, "Shadow Buffer Bleed Bias", "Bias for reducing light-bleed on variance shadow maps"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_soft", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "soft"); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Shadow Buffer Soft", "Size of shadow buffer sampling area"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_samples", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "samp"); + RNA_def_property_range(prop, 1, 16); + RNA_def_property_ui_text(prop, "Samples", "Number of shadow buffer samples"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "shadow_buffer_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "buftype"); + RNA_def_property_enum_items(prop, prop_shadbuftype_items); + RNA_def_property_ui_text(prop, "Shadow Buffer Type", "Type of shadow buffer"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + prop = RNA_def_property(srna, "ge_shadow_buffer_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "shadowmap_type"); + RNA_def_property_enum_items(prop, prop_ge_shadowbuffer_type_items); + RNA_def_property_ui_text(prop, "Shadow Map Type", "The shadow mapping algorithm used"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + + + prop = RNA_def_property(srna, "use_auto_clip_start", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START); + RNA_def_property_ui_text(prop, "Autoclip Start", + "Automatic calculation of clipping-start, based on visible vertices"); + RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); + + prop = RNA_def_property(srna, "use_auto_clip_end", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END); + RNA_def_property_ui_text(prop, "Autoclip End", "Automatic calculation of clipping-end, based on visible vertices"); + RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); + + prop = RNA_def_property(srna, "compression_threshold", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "compressthresh"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Compress", "Deep shadow map compression threshold"); + RNA_def_property_update(prop, 0, "rna_Lamp_update"); + prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shdwr"); RNA_def_property_array(prop, 3); @@ -599,20 +745,8 @@ static void rna_def_spot_lamp(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem prop_shadbuftype_items[] = { - {LA_SHADBUF_REGULAR , "REGULAR", 0, "Classical", "Classic shadow buffer"}, - {LA_SHADBUF_HALFWAY, "HALFWAY", 0, "Classic-Halfway", - "Regular buffer, averaging the closest and 2nd closest Z value to reducing " - "bias artifacts"}, - {LA_SHADBUF_IRREGULAR, "IRREGULAR", 0, "Irregular", - "Irregular buffer produces sharp shadow always, but it doesn't show up for raytracing"}, - {LA_SHADBUF_DEEP, "DEEP", 0, "Deep", - "Deep shadow buffer supports transparency and better filtering, at the cost of " - "more memory usage and processing time"}, - {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem prop_shadbuffiltertype_items[] = { - {LA_SHADBUF_BOX , "BOX", 0, "Box", "Apply the Box filter to shadow buffer samples"}, + {LA_SHADBUF_BOX, "BOX", 0, "Box", "Apply the Box filter to shadow buffer samples"}, {LA_SHADBUF_TENT, "TENT", 0, "Tent", "Apply the Tent Filter to shadow buffer samples"}, {LA_SHADBUF_GAUSS, "GAUSS", 0, "Gauss", "Apply the Gauss filter to shadow buffer samples"}, {0, NULL, 0, NULL, NULL}}; @@ -653,31 +787,9 @@ static void rna_def_spot_lamp(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Halo Step", "Volumetric halo sampling frequency"); RNA_def_property_update(prop, 0, "rna_Lamp_update"); - prop = RNA_def_property(srna, "shadow_buffer_size", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "bufsize"); - RNA_def_property_range(prop, 512, 10240); - RNA_def_property_ui_text(prop, "Shadow Buffer Size", - "Resolution of the shadow buffer, higher values give crisper shadows " - "but use more memory"); - RNA_def_property_int_funcs(prop, NULL, "rna_Lamp_buffer_size_set", NULL); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "shadow_filter_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "filtertype"); - RNA_def_property_enum_items(prop, prop_shadbuffiltertype_items); - RNA_def_property_ui_text(prop, "Shadow Filter Type", "Type of shadow filter (Buffer Shadows)"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "shadow_sample_buffers", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "buffers"); - RNA_def_property_enum_items(prop, prop_numbuffer_items); - RNA_def_property_ui_text(prop, "Shadow Sample Buffers", - "Number of shadow buffers to render for better AA, this increases memory usage"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - prop = RNA_def_property(srna, "spot_blend", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "spotblend"); - RNA_def_property_range(prop, 0.0f ,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Spot Blend", "The softness of the spotlight edge"); RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); @@ -694,61 +806,6 @@ static void rna_def_spot_lamp(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Show Cone", "Draw transparent cone in 3D view to visualize which objects are contained in it"); RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - - prop = RNA_def_property(srna, "shadow_buffer_clip_start", PROP_FLOAT, PROP_DISTANCE); - RNA_def_property_float_sdna(prop, NULL, "clipsta"); - RNA_def_property_range(prop, 0.0f, 9999.0f); - RNA_def_property_ui_text(prop, "Shadow Buffer Clip Start", - "Shadow map clip start, below which objects will not generate shadows"); - RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - - prop = RNA_def_property(srna, "shadow_buffer_clip_end", PROP_FLOAT, PROP_DISTANCE); - RNA_def_property_float_sdna(prop, NULL, "clipend"); - RNA_def_property_range(prop, 0.0f, 9999.0f); - RNA_def_property_ui_text(prop, "Shadow Buffer Clip End", - "Shadow map clip end, beyond which objects will not generate shadows"); - RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - - prop = RNA_def_property(srna, "shadow_buffer_bias", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "bias"); - RNA_def_property_range(prop, 0.001f, 5.0f); - RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Shadow buffer sampling bias"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "shadow_buffer_soft", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "soft"); - RNA_def_property_range(prop, 0.0f, 100.0f); - RNA_def_property_ui_text(prop, "Shadow Buffer Soft", "Size of shadow buffer sampling area"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "shadow_buffer_samples", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "samp"); - RNA_def_property_range(prop, 1, 16); - RNA_def_property_ui_text(prop, "Samples", "Number of shadow buffer samples"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "shadow_buffer_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "buftype"); - RNA_def_property_enum_items(prop, prop_shadbuftype_items); - RNA_def_property_ui_text(prop, "Shadow Buffer Type", "Type of shadow buffer"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); - - prop = RNA_def_property(srna, "use_auto_clip_start", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START); - RNA_def_property_ui_text(prop, "Autoclip Start", - "Automatic calculation of clipping-start, based on visible vertices"); - RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - - prop = RNA_def_property(srna, "use_auto_clip_end", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END); - RNA_def_property_ui_text(prop, "Autoclip End", "Automatic calculation of clipping-end, based on visible vertices"); - RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - - prop = RNA_def_property(srna, "compression_threshold", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "compressthresh"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Compress", "Deep shadow map compression threshold"); - RNA_def_property_update(prop, 0, "rna_Lamp_update"); } static void rna_def_sun_lamp(BlenderRNA *brna) @@ -771,6 +828,13 @@ static void rna_def_sun_lamp(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Sky Settings", "Sky related settings for sun lamps"); rna_def_lamp_sky_settings(brna); + + /* BGE Only */ + prop= RNA_def_property(srna, "shadow_frustum_size", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "shadow_frustum_size"); + RNA_def_property_ui_range(prop, 0.001, 100.0, 2, 1); + RNA_def_property_ui_text(prop, "Frustum Size", "Size of the frustum used for creating the shadow map"); + RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); } static void rna_def_hemi_lamp(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c index 09310560631..cfdf57efbea 100644 --- a/source/blender/makesrna/intern/rna_main.c +++ b/source/blender/makesrna/intern/rna_main.c @@ -307,7 +307,7 @@ void RNA_def_main(BlenderRNA *brna) RNA_def_main_window_managers}, {"images", "Image", "rna_Main_image_begin", "Images", "Image datablocks", RNA_def_main_images}, {"lattices", "Lattice", "rna_Main_latt_begin", "Lattices", "Lattice datablocks", RNA_def_main_lattices}, - {"curves", "Curve", "rna_Main_curve_begin", "Curves", "Curve datablocks", RNA_def_main_curves} , + {"curves", "Curve", "rna_Main_curve_begin", "Curves", "Curve datablocks", RNA_def_main_curves}, {"metaballs", "MetaBall", "rna_Main_mball_begin", "Metaballs", "Metaball datablocks", RNA_def_main_metaballs}, {"fonts", "VectorFont", "rna_Main_font_begin", "Vector Fonts", "Vector font datablocks", RNA_def_main_fonts}, {"textures", "Texture", "rna_Main_tex_begin", "Textures", "Texture datablocks", RNA_def_main_textures}, diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index 6f0de4321f4..8faf5823927 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -93,7 +93,7 @@ Camera *rna_Main_cameras_new(Main *UNUSED(bmain), const char *name) { - ID *id = add_camera(name); + ID *id = BKE_camera_add(name); id_us_min(id); return (Camera *)id; } @@ -386,7 +386,7 @@ void rna_Main_textures_remove(Main *bmain, ReportList *reports, struct Tex *tex) Brush *rna_Main_brushes_new(Main *UNUSED(bmain), const char *name) { - Brush *brush = add_brush(name); + Brush *brush = BKE_brush_add(name); id_us_min(&brush->id); return brush; } diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 7802241a25b..8aabc515dcb 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -766,7 +766,7 @@ static void rna_def_material_gamesettings(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_face_orientation_items[] = { - {GEMAT_NORMAL,"NORMAL",0,"Normal","No tranformation"}, + {GEMAT_NORMAL, "NORMAL", 0, "Normal", "No tranformation"}, {GEMAT_HALO, "HALO", 0, "Halo", "Screen aligned billboard"}, {GEMAT_BILLBOARD, "BILLBOARD", 0, "Billboard", "Billboard with Z-axis constraint"}, {GEMAT_SHADOW, "SHADOW", 0, "Shadow", "Faces are used for shadow"}, @@ -1244,7 +1244,7 @@ static void rna_def_material_volume(BlenderRNA *brna) prop = RNA_def_property(srna, "scattering", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "scattering"); RNA_def_property_range(prop, 0.0f, FLT_MAX); - RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1 ,3); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3); RNA_def_property_ui_text(prop, "Scattering", "Amount of light that gets scattered out by the volume - " "the more out-scattering, the shallower the light will penetrate"); @@ -1267,7 +1267,7 @@ static void rna_def_material_volume(BlenderRNA *brna) prop = RNA_def_property(srna, "reflection", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "reflection"); RNA_def_property_range(prop, 0.0f, FLT_MAX); - RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1 ,3); + RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3); RNA_def_property_ui_text(prop, "Reflection", "Multiplier to make out-scattered light brighter or darker (non-physically correct)"); RNA_def_property_update(prop, 0, "rna_Material_update"); diff --git a/source/blender/makesrna/intern/rna_material_api.c b/source/blender/makesrna/intern/rna_material_api.c index e6118f6c527..538a4c99df4 100644 --- a/source/blender/makesrna/intern/rna_material_api.c +++ b/source/blender/makesrna/intern/rna_material_api.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,7 +28,6 @@ * \ingroup RNA */ - #include <stdlib.h> #include <stdio.h> diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index ca1b3a86087..8c000e522ba 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -1444,7 +1444,7 @@ static void rna_def_modifier_array(BlenderRNA *brna) /* Offset parameters */ prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_CONST); - RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");; + RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); prop = RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION); @@ -3162,7 +3162,7 @@ void RNA_def_modifier(BlenderRNA *brna) /* data */ srna = RNA_def_struct(brna, "Modifier", NULL); - RNA_def_struct_ui_text(srna , "Modifier", "Modifier affecting the geometry data of an object"); + RNA_def_struct_ui_text(srna, "Modifier", "Modifier affecting the geometry data of an object"); RNA_def_struct_refine_func(srna, "rna_Modifier_refine"); RNA_def_struct_path_func(srna, "rna_Modifier_path"); RNA_def_struct_sdna(srna, "ModifierData"); diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c index ca06793cd49..96da24b3392 100644 --- a/source/blender/makesrna/intern/rna_movieclip.c +++ b/source/blender/makesrna/intern/rna_movieclip.c @@ -248,9 +248,9 @@ static void rna_def_movieclip(BlenderRNA *brna) "Use a preview proxy and/or timecode index for this clip"); RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); - prop = RNA_def_int_vector(srna, "size" , 2 , NULL , 0, 0, "Size", - "Width and height in pixels, zero when image data cant be loaded" , 0 , 0); - RNA_def_property_int_funcs(prop, "rna_MovieClip_size_get" , NULL, NULL); + prop = RNA_def_int_vector(srna, "size", 2, NULL, 0, 0, "Size", + "Width and height in pixels, zero when image data cant be loaded", 0, 0); + RNA_def_property_int_funcs(prop, "rna_MovieClip_size_get", NULL, NULL); RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop = RNA_def_property(srna, "display_aspect", PROP_FLOAT, PROP_XYZ); diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index a101bcaec12..cffcca177b3 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -245,28 +245,22 @@ static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr) return &RNA_NodeSocket##stypename##idname; \ } - switch (sock->struct_type) { - case SOCK_STRUCT_NONE: - switch (sock->type) { - case SOCK_FLOAT: - NODE_DEFINE_SUBTYPES_FLOAT - break; - case SOCK_INT: - NODE_DEFINE_SUBTYPES_INT - break; - case SOCK_BOOLEAN: - return &RNA_NodeSocketBoolean; - case SOCK_VECTOR: - NODE_DEFINE_SUBTYPES_VECTOR - break; - case SOCK_RGBA: - return &RNA_NodeSocketRGBA; - case SOCK_SHADER: - return &RNA_NodeSocketShader; - } - break; - case SOCK_STRUCT_OUTPUT_FILE: - return &RNA_NodeImageFileSocket; + switch (sock->type) { + case SOCK_FLOAT: + NODE_DEFINE_SUBTYPES_FLOAT + break; + case SOCK_INT: + NODE_DEFINE_SUBTYPES_INT + break; + case SOCK_BOOLEAN: + return &RNA_NodeSocketBoolean; + case SOCK_VECTOR: + NODE_DEFINE_SUBTYPES_VECTOR + break; + case SOCK_RGBA: + return &RNA_NodeSocketRGBA; + case SOCK_SHADER: + return &RNA_NodeSocketShader; } #undef SUBTYPE @@ -328,6 +322,39 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value) chroma->t2 = value; } +static void rna_distance_matte_t1_set(PointerRNA *ptr, float value) +{ + bNode *node = (bNode*)ptr->data; + NodeChroma *chroma = node->storage; + + chroma->t1 = value; +} + +static void rna_distance_matte_t2_set(PointerRNA *ptr, float value) +{ + bNode *node = (bNode*)ptr->data; + NodeChroma *chroma = node->storage; + + chroma->t2 = value; +} + +static void rna_difference_matte_t1_set(PointerRNA *ptr, float value) +{ + bNode *node = (bNode*)ptr->data; + NodeChroma *chroma = node->storage; + + chroma->t1 = value; +} + +static void rna_difference_matte_t2_set(PointerRNA *ptr, float value) +{ + bNode *node = (bNode*)ptr->data; + NodeChroma *chroma = node->storage; + + chroma->t2 = value; +} + + static void rna_Node_scene_set(PointerRNA *ptr, PointerRNA value) { bNode *node = (bNode*)ptr->data; @@ -825,14 +852,18 @@ static void rna_Mapping_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr) rna_Node_update(bmain, scene, ptr); } -static PointerRNA rna_CompositNodeOutputMultiFile_active_input_get(PointerRNA *ptr) +static void rna_NodeOutputFile_file_inputs_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { bNode *node = ptr->data; - NodeImageMultiFile *nimf = node->storage; - bNodeSocket *sock = BLI_findlink(&node->inputs, nimf->active_input); - PointerRNA sock_ptr; - RNA_pointer_create((ID*)ptr->id.data, &RNA_NodeSocket, sock, &sock_ptr); - return sock_ptr; + rna_iterator_listbase_begin(iter, &node->inputs, NULL); +} + +static PointerRNA rna_NodeOutputFile_file_inputs_get(CollectionPropertyIterator *iter) +{ + PointerRNA ptr; + bNodeSocket *sock = rna_iterator_listbase_get(iter); + RNA_pointer_create(iter->ptr.id.data, &RNA_NodeImageFileSocket, sock->storage, &ptr); + return ptr; } #else @@ -1794,22 +1825,23 @@ static void rna_def_cmp_output_file_socket(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - srna = RNA_def_struct(brna, "NodeImageFileSocket", "NodeSocketRGBA"); - RNA_def_struct_sdna(srna, "bNodeSocket"); - RNA_def_struct_path_func(srna, "rna_NodeSocket_path"); + srna = RNA_def_struct(brna, "NodeImageFileSocket", NULL); + RNA_def_struct_sdna(srna, "NodeImageMultiFileSocket"); RNA_def_struct_ui_text(srna, "Node Image File Socket", "Socket data of file output node"); - RNA_def_struct_ui_icon(srna, ICON_PLUG); - RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL); - - RNA_def_struct_sdna_from(srna, "NodeImageMultiFileSocket", "storage"); prop = RNA_def_property(srna, "use_node_format", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "use_node_format", 1); RNA_def_property_ui_text(prop, "Use Node Format", ""); - RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, NULL); prop = RNA_def_property(srna, "format", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "ImageFormatSettings"); + + prop = RNA_def_property(srna, "path", PROP_STRING, PROP_FILEPATH); + RNA_def_property_string_sdna(prop, NULL, "path"); + RNA_def_property_ui_text(prop, "Path", "Subpath used for this input"); + RNA_def_struct_name_property(srna, prop); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, NULL); } static void def_cmp_output_file(StructRNA *srna) { @@ -1822,12 +1854,6 @@ static void def_cmp_output_file(StructRNA *srna) RNA_def_property_ui_text(prop, "Base Path", "Base output path for the image"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - prop = RNA_def_property(srna, "active_input", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_funcs(prop, "rna_CompositNodeOutputMultiFile_active_input_get", NULL, NULL, NULL); - RNA_def_property_struct_type(prop, "NodeSocket"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Active Input", "Active input in details view list"); - prop = RNA_def_property(srna, "active_input_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "active_input"); RNA_def_property_ui_text(prop, "Active Input Index", "Active input index in details view list"); @@ -1835,6 +1861,12 @@ static void def_cmp_output_file(StructRNA *srna) prop = RNA_def_property(srna, "format", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "ImageFormatSettings"); + + prop = RNA_def_property(srna, "file_inputs", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_funcs(prop, "rna_NodeOutputFile_file_inputs_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", + "rna_NodeOutputFile_file_inputs_get", NULL, NULL, NULL, NULL); + RNA_def_property_struct_type(prop, "NodeImageFileSocket"); + RNA_def_property_ui_text(prop, "File Inputs", ""); } static void def_cmp_dilate_erode(StructRNA *srna) @@ -1891,14 +1923,14 @@ static void def_cmp_diff_matte(StructRNA *srna) prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t1"); - RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); + RNA_def_property_float_funcs(prop, NULL, "rna_difference_matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Tolerance", "Color distances below this threshold are keyed"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); - RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); + RNA_def_property_float_funcs(prop, NULL, "rna_difference_matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Falloff", "Color distances below this additional threshold are partially keyed"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); @@ -1933,18 +1965,30 @@ static void def_cmp_distance_matte(StructRNA *srna) { PropertyRNA *prop; + static EnumPropertyItem color_space_items[] = { + {1, "RGB", 0, "RGB", "RGB color space"}, + {2, "YCC", 0, "YCC", "YCbCr Suppression"}, + {0, NULL, 0, NULL, NULL}}; + RNA_def_struct_sdna_from(srna, "NodeChroma", "storage"); + + prop = RNA_def_property(srna, "channel", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "channel"); + RNA_def_property_enum_items(prop, color_space_items); + RNA_def_property_ui_text(prop, "Channel", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t1"); - RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL); + RNA_def_property_float_funcs(prop, NULL, "rna_distance_matte_t1_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Tolerance", "Color distances below this threshold are keyed"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "t2"); - RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL); + RNA_def_property_float_funcs(prop, NULL, "rna_distance_matte_t2_set", NULL); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Falloff", "Color distances below this additional threshold are partially keyed"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); @@ -2071,7 +2115,7 @@ static void def_cmp_chroma_matte(StructRNA *srna) prop = RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fstrength"); RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Gain", "Alpha gain"); + RNA_def_property_ui_text(prop, "Falloff", "Alpha falloff"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "shadow_adjust", PROP_FLOAT, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 140e874eb78..6a4809e54e5 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -1888,9 +1888,9 @@ static void rna_def_object(BlenderRNA *brna) "Axis Angle (W+XYZ), defines a rotation around some axis defined by 3D-Vector"}, {0, NULL, 0, NULL, NULL}}; - static float default_quat[4] = {1,0,0,0}; /* default quaternion values */ - static float default_axisAngle[4] = {0,0,1,0}; /* default axis-angle rotation values */ - static float default_scale[3] = {1,1,1}; /* default scale values */ + static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */ + static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */ + static float default_scale[3] = {1, 1, 1}; /* default scale values */ static int boundbox_dimsize[] = {8, 3}; srna = RNA_def_struct(brna, "Object", "ID"); diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 0ac6dcbc518..cb0f1d307aa 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -96,7 +96,7 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_ object_free_modifiers(tmpobj); /* copies the data */ - copycu = tmpobj->data = BKE_curve_copy( (Curve *) ob->data ); + copycu = tmpobj->data = BKE_curve_copy((Curve *) ob->data ); /* temporarily set edit so we get updates from edit mode, but * also because for text datablocks copying it while in edit @@ -105,21 +105,21 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_ copycu->editnurb = tmpcu->editnurb; /* get updated display list, and convert to a mesh */ - makeDispListCurveTypes( sce, tmpobj, 0 ); + makeDispListCurveTypes(sce, tmpobj, 0); copycu->editfont = NULL; copycu->editnurb = NULL; - nurbs_to_mesh( tmpobj ); + nurbs_to_mesh(tmpobj); /* nurbs_to_mesh changes the type to a mesh, check it worked */ if (tmpobj->type != OB_MESH) { - free_libblock_us( &(G.main->object), tmpobj ); + free_libblock_us(&(G.main->object), tmpobj); BKE_report(reports, RPT_ERROR, "cant convert curve to mesh. Does the curve have any segments?"); return NULL; } tmpmesh = tmpobj->data; - free_libblock_us( &G.main->object, tmpobj ); + free_libblock_us(&G.main->object, tmpobj); break; case OB_MBALL: { @@ -364,7 +364,7 @@ static void rna_Mesh_assign_verts_to_group(Object *ob, bDeformGroup *group, int } if (assignmode != WEIGHT_REPLACE && assignmode != WEIGHT_ADD && assignmode != WEIGHT_SUBTRACT) { - BKE_report(reports, RPT_ERROR, "Bad assignment mode" ); + BKE_report(reports, RPT_ERROR, "Bad assignment mode"); return; } @@ -476,6 +476,11 @@ int rna_Object_is_modified(Object *ob, Scene *scene, int settings) return object_is_modified(scene, ob) & settings; } +int rna_Object_is_deform_modified(Object *ob, Scene *scene, int settings) +{ + return object_is_deform_modified(scene, ob) & settings; +} + #ifndef NDEBUG void rna_Object_dm_info(struct Object *ob, int type, char *result) { @@ -644,6 +649,14 @@ void RNA_api_object(StructRNA *srna) parm = RNA_def_boolean(func, "result", 0, "", "Object visibility"); RNA_def_function_return(func, parm); + func = RNA_def_function(srna, "is_deform_modified", "rna_Object_is_deform_modified"); + RNA_def_function_ui_description(func, "Determine if this object is modified by a deformation from the base mesh data"); + parm = RNA_def_pointer(func, "scene", "Scene", "", ""); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL); + parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply"); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm = RNA_def_boolean(func, "result", 0, "", "Object visibility"); + RNA_def_function_return(func, parm); #ifndef NDEBUG /* mesh */ diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index c52b6251223..2e8e597ad35 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -187,7 +187,7 @@ static void rna_Cache_idname_change(Main *UNUSED(bmain), Scene *UNUSED(scene), P for (pid = pidlist.first; pid; pid = pid->next) { if (pid->cache == cache) pid2 = pid; - else if (cache->name[0] != '\0' && strcmp(cache->name,pid->cache->name) == 0) { + else if (cache->name[0] != '\0' && strcmp(cache->name, pid->cache->name) == 0) { /*TODO: report "name exists" to user */ BLI_strncpy(cache->name, cache->prev_name, sizeof(cache->name)); new_name = 0; @@ -513,7 +513,7 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA /* add/remove modifier as needed */ if (!md) { - if (pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield,PFIELD_GUIDE,PFIELD_TEXTURE) == 0) + if (pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield, PFIELD_GUIDE, PFIELD_TEXTURE) == 0) if (ELEM4(ob->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE)) ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Surface); } diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index dd591ea7343..52c41c869bb 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -1516,7 +1516,7 @@ static void rna_def_particle_settings(BlenderRNA *brna) {PART_AVE_GLOBAL_X, "GLOBAL_X", 0, "Global X", ""}, {PART_AVE_GLOBAL_Y, "GLOBAL_Y", 0, "Global Y", ""}, {PART_AVE_GLOBAL_Z, "GLOBAL_Z", 0, "Global Z", ""}, - {PART_AVE_RAND, "RAND", 0, "Random", ""} , + {PART_AVE_RAND, "RAND", 0, "Random", ""}, {0, NULL, 0, NULL, NULL} }; diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index b65924057cd..ceace424f35 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -736,9 +736,9 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro static void rna_def_pose_channel(BlenderRNA *brna) { - static float default_quat[4] = {1,0,0,0}; /* default quaternion values */ - static float default_axisAngle[4] = {0,0,1,0}; /* default axis-angle rotation values */ - static float default_scale[3] = {1,1,1}; /* default scale values */ + static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */ + static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */ + static float default_scale[3] = {1, 1, 1}; /* default scale values */ const int matrix_dimsize[] = {4, 4}; @@ -1002,21 +1002,21 @@ static void rna_def_pose_channel(BlenderRNA *brna) prop = RNA_def_property(srna, "ik_stretch", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "ikstretch"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "IK Stretch", "Allow scaling of the bone for IK"); RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update"); prop = RNA_def_property(srna, "ik_rotation_weight", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "ikrotweight"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "IK Rot Weight", "Weight of rotation constraint for IK"); RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); prop = RNA_def_property(srna, "ik_linear_weight", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "iklinweight"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "IK Lin Weight", "Weight of scale constraint for IK"); RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); @@ -1133,13 +1133,13 @@ static void rna_def_pose_itasc(BlenderRNA *brna) prop = RNA_def_property(srna, "precision", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "precision"); - RNA_def_property_range(prop, 0.0f,0.1f); + RNA_def_property_range(prop, 0.0f, 0.1f); RNA_def_property_ui_text(prop, "Precision", "Precision of convergence in case of reiteration"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update"); prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "numiter"); - RNA_def_property_range(prop, 1.f,1000.f); + RNA_def_property_range(prop, 1.f, 1000.f); RNA_def_property_ui_text(prop, "Iterations", "Maximum number of iterations for convergence in case of reiteration"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update"); @@ -1173,19 +1173,19 @@ static void rna_def_pose_itasc(BlenderRNA *brna) prop = RNA_def_property(srna, "step_min", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "minstep"); - RNA_def_property_range(prop, 0.0f,0.1f); + RNA_def_property_range(prop, 0.0f, 0.1f); RNA_def_property_ui_text(prop, "Min step", "Lower bound for timestep in second in case of automatic substeps"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update"); prop = RNA_def_property(srna, "step_max", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "maxstep"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Max step", "Higher bound for timestep in second in case of automatic substeps"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update"); prop = RNA_def_property(srna, "feedback", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "feedback"); - RNA_def_property_range(prop, 0.0f,100.0f); + RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Feedback", "Feedback coefficient for error correction, average response time is 1/feedback " "(default=20)"); @@ -1193,7 +1193,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna) prop = RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "maxvel"); - RNA_def_property_range(prop, 0.0f,100.0f); + RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Max Velocity", "Maximum joint velocity in rad/s (default=50)"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update"); @@ -1205,7 +1205,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna) prop = RNA_def_property(srna, "damping_max", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "dampmax"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Damp", "Maximum damping coefficient when singular value is nearly 0 " "(higher values=more stability, less reactivity - default=0.5)"); @@ -1213,7 +1213,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna) prop = RNA_def_property(srna, "damping_epsilon", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "dampeps"); - RNA_def_property_range(prop, 0.0f,1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Epsilon", "Singular value under which damping is progressively applied " "(higher values=more stability, less reactivity - default=0.1)"); diff --git a/source/blender/makesrna/intern/rna_pose_api.c b/source/blender/makesrna/intern/rna_pose_api.c index 14f7b7c74f5..531a85edeea 100644 --- a/source/blender/makesrna/intern/rna_pose_api.c +++ b/source/blender/makesrna/intern/rna_pose_api.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/makesrna/intern/rna_property.c b/source/blender/makesrna/intern/rna_property.c index 3eac129a195..637e21cf6c5 100644 --- a/source/blender/makesrna/intern/rna_property.c +++ b/source/blender/makesrna/intern/rna_property.c @@ -109,7 +109,7 @@ void RNA_def_gameproperty(BlenderRNA *brna) /* Base Struct for GameProperty */ srna = RNA_def_struct(brna, "GameProperty", NULL); - RNA_def_struct_ui_text(srna , "Game Property", "Game engine user defined object property"); + RNA_def_struct_ui_text(srna, "Game Property", "Game engine user defined object property"); RNA_def_struct_sdna(srna, "bProperty"); RNA_def_struct_refine_func(srna, "rna_GameProperty_refine"); @@ -132,7 +132,7 @@ void RNA_def_gameproperty(BlenderRNA *brna) /* GameBooleanProperty */ srna = RNA_def_struct(brna, "GameBooleanProperty", "GameProperty"); - RNA_def_struct_ui_text(srna , "Game Boolean Property", "Game engine user defined Boolean property"); + RNA_def_struct_ui_text(srna, "Game Boolean Property", "Game engine user defined Boolean property"); RNA_def_struct_sdna(srna, "bProperty"); RNA_def_property_update(prop, NC_LOGIC, NULL); @@ -143,7 +143,7 @@ void RNA_def_gameproperty(BlenderRNA *brna) /* GameIntProperty */ srna = RNA_def_struct(brna, "GameIntProperty", "GameProperty"); - RNA_def_struct_ui_text(srna , "Game Integer Property", "Game engine user defined integer number property"); + RNA_def_struct_ui_text(srna, "Game Integer Property", "Game engine user defined integer number property"); RNA_def_struct_sdna(srna, "bProperty"); prop = RNA_def_property(srna, "value", PROP_INT, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9ecbab76cbb..7247ee6f0e0 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -152,7 +152,7 @@ EnumPropertyItem snap_element_items[] = { #ifdef WITH_CINEON # define R_IMF_ENUM_CINEON {R_IMF_IMTYPE_CINEON, "CINEON", ICON_FILE_IMAGE, "Cineon", \ "Output image in Cineon format"}, -# define R_IMF_ENUM_DPX {R_IMF_IMTYPE_DPX, "DPX",ICON_FILE_IMAGE, "DPX", "Output image in DPX format"}, +# define R_IMF_ENUM_DPX {R_IMF_IMTYPE_DPX, "DPX", ICON_FILE_IMAGE, "DPX", "Output image in DPX format"}, #else # define R_IMF_ENUM_CINEON # define R_IMF_ENUM_DPX @@ -1080,8 +1080,11 @@ static void rna_RenderSettings_color_management_update(Main *bmain, Scene *UNUSE bNode *node; if (ntree && scene->use_nodes) { - /* XXX images are freed here, stop render and preview threads, until Image is threadsafe */ - WM_jobs_stop_all(bmain->wm.first); + /* images are freed here, stop render and preview threads, until + * Image is threadsafe. when we are changing this propery from a + * python script in the render thread, don't stop own thread */ + if(BLI_thread_is_main()) + WM_jobs_stop_all(bmain->wm.first); for (node = ntree->nodes.first; node; node = node->next) { if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_IMAGE)) { @@ -1370,7 +1373,7 @@ static void rna_UnifiedPaintSettings_size_set(PointerRNA *ptr, int value) UnifiedPaintSettings* ups = ptr->data; /* scale unprojected radius so it stays consistent with brush size */ - brush_scale_unprojected_radius(&ups->unprojected_radius, + BKE_brush_scale_unprojected_radius(&ups->unprojected_radius, value, ups->size); ups->size = value; } @@ -1380,7 +1383,7 @@ static void rna_UnifiedPaintSettings_unprojected_radius_set(PointerRNA *ptr, flo UnifiedPaintSettings* ups = ptr->data; /* scale brush size so it stays consistent with unprojected_radius */ - brush_scale_size(&ups->size, value, ups->unprojected_radius); + BKE_brush_scale_size(&ups->size, value, ups->unprojected_radius); ups->unprojected_radius = value; } @@ -1826,6 +1829,11 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Use Unified Strength", "Instead of per-brush strength, the strength is shared across brushes"); + prop = RNA_def_property(srna, "use_unified_weight", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", UNIFIED_PAINT_WEIGHT); + RNA_def_property_ui_text(prop, "Use Unified Weight", + "Instead of per-brush weight, the weight is shared across brushes"); + /* unified paint settings that override the equivalent settings * from the active brush */ prop = RNA_def_property(srna, "size", PROP_INT, PROP_DISTANCE); @@ -1847,6 +1855,13 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna) RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 3); RNA_def_property_ui_text(prop, "Strength", "How powerful the effect of the brush is when applied"); + prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "weight"); + RNA_def_property_float_default(prop, 0.5f); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 3); + RNA_def_property_ui_text(prop, "Weight", "Weight to assign in vertex groups"); + prop = RNA_def_property(srna, "use_pressure_size", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", UNIFIED_PAINT_BRUSH_SIZE_PRESSURE); RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0); @@ -1959,7 +1974,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene) if (scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_glsl_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); - if(scene) { + if (scene) { prop = RNA_def_property(srna, "samples", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Samples", "Override number of render samples for this render layer, 0 will use the scene setting"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); @@ -3333,7 +3348,7 @@ static void rna_def_scene_ffmpeg_settings(BlenderRNA *brna) {CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""}, {CODEC_ID_FFV1, "FFV1", 0, "FFmpeg video codec #1", ""}, {CODEC_ID_QTRLE, "QTRLE", 0, "QTRLE", ""}, - /* {CODEC_ID_DNXHD, "DNXHD", 0, "DNxHD", ""},*/ /* disabled for after release */ + /* {CODEC_ID_DNXHD, "DNXHD", 0, "DNxHD", ""}, */ /* disabled for after release */ {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem ffmpeg_audio_codec_items[] = { @@ -4246,14 +4261,14 @@ static void rna_def_scene_render_data(BlenderRNA *brna) prop = RNA_def_property(srna, "stamp_foreground", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "fg_stamp"); RNA_def_property_array(prop, 4); - RNA_def_property_range(prop,0.0,1.0); + RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_ui_text(prop, "Text Color", "Color to use for stamp text"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop = RNA_def_property(srna, "stamp_background", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "bg_stamp"); RNA_def_property_array(prop, 4); - RNA_def_property_range(prop,0.0,1.0); + RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_ui_text(prop, "Background", "Color to use behind stamp text"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 08ed7625a01..c92a29cec3c 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -50,7 +50,7 @@ -static void rna_Scene_frame_set(Scene *scene, int frame, float subframe) +void rna_Scene_frame_set(Scene *scene, int frame, float subframe) { scene->r.cfra = frame; scene->r.subframe = subframe; diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index 67a4bafb8ee..db43db273bd 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -111,10 +111,31 @@ static void rna_Area_type_set(PointerRNA *ptr, int value) static void rna_Area_type_update(bContext *C, PointerRNA *ptr) { + wmWindowManager *wm = CTX_wm_manager(C); + wmWindow *win; + bScreen *sc = (bScreen*)ptr->id.data; ScrArea *sa = (ScrArea*)ptr->data; - ED_area_newspace(C, sa, sa->butspacetype); /* XXX - this uses the window */ - ED_area_tag_redraw(sa); + /* XXX this call still use context, so we trick it to work in the right context */ + for(win=wm->windows.first; win; win=win->next) { + if(sc == win->screen) { + wmWindow *prevwin = CTX_wm_window(C); + ScrArea *prevsa = CTX_wm_area(C); + ARegion *prevar = CTX_wm_region(C); + + CTX_wm_window_set(C, win); + CTX_wm_area_set(C, sa); + CTX_wm_region_set(C, NULL); + + ED_area_newspace(C, sa, sa->butspacetype); + ED_area_tag_redraw(sa); + + CTX_wm_window_set(C, prevwin); + CTX_wm_area_set(C, prevsa); + CTX_wm_region_set(C, prevar); + break; + } + } } #else diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c index ff336ba6693..8bed95f88b2 100644 --- a/source/blender/makesrna/intern/rna_sensor.c +++ b/source/blender/makesrna/intern/rna_sensor.c @@ -369,7 +369,7 @@ static void rna_def_near_sensor(BlenderRNA *brna) PropertyRNA *prop; srna = RNA_def_struct(brna, "NearSensor", "Sensor"); - RNA_def_struct_ui_text(srna , "Near Sensor", "Sensor to detect nearby objects"); + RNA_def_struct_ui_text(srna, "Near Sensor", "Sensor to detect nearby objects"); RNA_def_struct_sdna_from(srna, "bNearSensor", "data"); prop = RNA_def_property(srna, "property", PROP_STRING, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 7fecbb83fa5..775e943b9a2 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -1046,7 +1046,7 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_range(prop, 1, MAXFRAME); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip after the handles are applied"); - RNA_def_property_int_funcs(prop, "rna_Sequence_frame_length_get", "rna_Sequence_frame_length_set",NULL); + RNA_def_property_int_funcs(prop, "rna_Sequence_frame_length_get", "rna_Sequence_frame_length_set", NULL); RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable"); RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); @@ -1061,7 +1061,7 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "start"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Start Frame", ""); - RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_set",NULL); /* overlap tests and calc_seq_disp */ + RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_set", NULL); /* overlap tests and calc_seq_disp */ RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable"); RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); @@ -1116,7 +1116,7 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "machine"); RNA_def_property_range(prop, 0, MAXSEQ-1); RNA_def_property_ui_text(prop, "Channel", "Y position of the sequence strip"); - RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_channel_set",NULL); /* overlap test */ + RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_channel_set", NULL); /* overlap test */ RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); /* blending */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8d4b5a32969..51f5cdcda85 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1024,8 +1024,9 @@ static EnumPropertyItem *rna_SpaceProperties_texture_context_itemf(bContext *C, static void rna_SpaceClipEditor_clip_set(PointerRNA *ptr, PointerRNA value) { SpaceClip *sc = (SpaceClip*)(ptr->data); + bScreen *screen = (bScreen*)ptr->id.data; - ED_space_clip_set(NULL, sc, (MovieClip*)value.data); + ED_space_clip_set(NULL, screen, sc, (MovieClip*)value.data); } static void rna_SpaceClipEditor_clip_mode_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) @@ -2612,7 +2613,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna) prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FILE_HIDE_DOT); RNA_def_property_ui_text(prop, "Show Hidden", "Show hidden dot files"); - RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS , NULL); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL); prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "sort"); @@ -2930,6 +2931,13 @@ static void rna_def_space_clip(BlenderRNA *brna) static EnumPropertyItem view_items[] = { {SC_VIEW_CLIP, "CLIP", ICON_SEQUENCE, "Clip", "Show editing clip preview"}, {SC_VIEW_GRAPH, "GRAPH", ICON_IPO, "Graph", "Show graph view for active element"}, + {SC_VIEW_DOPESHEET, "DOPESHEET", ICON_ACTION, "Dopesheet", "Dopesheet view for tracking data"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem dope_sort_items[] = { + {SC_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"}, + {SC_DOPE_SORT_LONGEST, "LONGEST", 0, "Longest", "Sort channels by longest tracked segment"}, + {SC_DOPE_SORT_TOTAL, "TOTAL", 0, "Total", "Sort channels by overall amount of tracked segments"}, {0, NULL, 0, NULL, NULL}}; srna = RNA_def_struct(brna, "SpaceClipEditor", "Space"); @@ -3104,6 +3112,27 @@ static void rna_def_space_clip(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "postproc_flag", MOVIECLIP_PREVIEW_GRAYSCALE); RNA_def_property_ui_text(prop, "Grayscale", "Display frame in grayscale mode"); RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* timeline */ + prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_SECONDS); + RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* ** dopesheet ** */ + + /* dopesheet sort */ + prop = RNA_def_property(srna, "dopesheet_sort_method", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "dope_sort"); + RNA_def_property_enum_items(prop, dope_sort_items); + RNA_def_property_ui_text(prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL); + + /* invert_dopesheet_sort */ + prop = RNA_def_property(srna, "invert_dopesheet_sort", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "dope_flag", SC_DOPE_SORT_INVERSE); + RNA_def_property_ui_text(prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL); } diff --git a/source/blender/makesrna/intern/rna_test.c b/source/blender/makesrna/intern/rna_test.c index 8bc545f34b7..1f5a4ff7f92 100644 --- a/source/blender/makesrna/intern/rna_test.c +++ b/source/blender/makesrna/intern/rna_test.c @@ -57,7 +57,7 @@ (void)0 #define DEF_GET_SET(type, arr) \ - void rna_Test_ ## arr ## _get(PointerRNA * ptr, type * values) \ + void rna_Test_ ## arr ## _get(PointerRNA * ptr, type * values) \ { \ memcpy(values, arr, sizeof(arr)); \ } \ @@ -69,7 +69,7 @@ (void)0 #define DEF_GET_SET_LEN(arr, max) \ - static int rna_Test_ ## arr ## _get_length(PointerRNA * ptr) \ + static int rna_Test_ ## arr ## _get_length(PointerRNA * ptr) \ { \ return arr ## _len; \ } \ diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index c314e9be0ba..e8253f4b51c 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -92,7 +92,7 @@ EnumPropertyItem blend_type_items[] = { {MTEX_BLEND_VAL, "VALUE", 0, "Value", ""}, {MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""}, {MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, - {MTEX_LIN_LIGHT , "LINEAR_LIGHT", 0, "Linear Light", ""}, + {MTEX_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""}, {0, NULL, 0, NULL, NULL}}; #ifdef RNA_RUNTIME @@ -1558,19 +1558,19 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna) static EnumPropertyItem point_source_items[] = { {TEX_PD_PSYS, "PARTICLE_SYSTEM", 0, "Particle System", "Generate point density from a particle system"}, {TEX_PD_OBJECT, "OBJECT", 0, "Object Vertices", "Generate point density from an object's vertices"}, - /*{TEX_PD_FILE, "FILE", 0 , "File", ""}, */ + /*{TEX_PD_FILE, "FILE", 0, "File", ""}, */ {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem particle_cache_items[] = { {TEX_PD_OBJECTLOC, "OBJECT_LOCATION", 0, "Emit Object Location", ""}, {TEX_PD_OBJECTSPACE, "OBJECT_SPACE", 0, "Emit Object Space", ""}, - {TEX_PD_WORLDSPACE, "WORLD_SPACE", 0 , "Global Space", ""}, + {TEX_PD_WORLDSPACE, "WORLD_SPACE", 0, "Global Space", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem vertice_cache_items[] = { {TEX_PD_OBJECTLOC, "OBJECT_LOCATION", 0, "Object Location", ""}, {TEX_PD_OBJECTSPACE, "OBJECT_SPACE", 0, "Object Space", ""}, - {TEX_PD_WORLDSPACE, "WORLD_SPACE", 0 , "Global Space", ""}, + {TEX_PD_WORLDSPACE, "WORLD_SPACE", 0, "Global Space", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem falloff_items[] = { diff --git a/source/blender/makesrna/intern/rna_texture_api.c b/source/blender/makesrna/intern/rna_texture_api.c index 034696b43c5..b801dbb4fed 100644 --- a/source/blender/makesrna/intern/rna_texture_api.c +++ b/source/blender/makesrna/intern/rna_texture_api.c @@ -103,18 +103,18 @@ void RNA_api_environment_map(StructRNA *srna) FunctionRNA *func; PropertyRNA *parm; - static const float default_layout[] = { 0,0, 1,0, 2,0, 0,1, 1,1, 2,1 }; + static const float default_layout[] = {0, 0, 1, 0, 2, 0, 0, 1, 1, 1, 2, 1}; func = RNA_def_function(srna, "clear", "clear_envmap"); RNA_def_function_ui_description(func, "Discard the environment map and free it from memory"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); - func = RNA_def_function(srna,"save", "save_envmap"); + func = RNA_def_function(srna, "save", "save_envmap"); RNA_def_function_ui_description(func, "Save the environment map to disc using the scene render settings"); RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS); - parm = RNA_def_string_file_name(func,"filepath","",FILE_MAX,"File path","Location of the output file"); + parm = RNA_def_string_file_name(func, "filepath", "", FILE_MAX, "File path", "Location of the output file"); RNA_def_property_flag(parm, PROP_REQUIRED); RNA_def_pointer(func, "scene", "Scene", "", "Overrides the scene from which image parameters are taken"); diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 85adf524717..5eb4e2190e4 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -265,7 +265,7 @@ static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value) if (clip->lastsize[0]) value = clip->lastsize[0]*value/camera->sensor_width; - if (value >= 0.0001) + if (value >= 0.0001f) camera->focal = value; } diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 2066799194f..83424a16b03 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -155,7 +155,7 @@ static void rna_userdef_gl_use_16bit_textures(Main *bmain, Scene *scene, Pointer rna_userdef_update(bmain, scene, ptr); } -static void rna_userdef_select_mouse_set(PointerRNA *ptr,int value) +static void rna_userdef_select_mouse_set(PointerRNA *ptr, int value) { UserDef *userdef = (UserDef*)ptr->data; @@ -178,7 +178,7 @@ static int rna_userdef_autokeymode_get(PointerRNA *ptr) return retval; } -static void rna_userdef_autokeymode_set(PointerRNA *ptr,int value) +static void rna_userdef_autokeymode_set(PointerRNA *ptr, int value) { UserDef *userdef = (UserDef*)ptr->data; @@ -2007,6 +2007,7 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Theme Clip Editor", "Theme settings for the Movie Clip Editor"); rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_list_main(srna); prop = RNA_def_property(srna, "marker_outline", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_float_sdna(prop, NULL, "marker_outline"); @@ -2081,6 +2082,18 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna) RNA_def_property_range(prop, 0, 255); RNA_def_property_ui_text(prop, "Handle Vertex Size", ""); RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop = RNA_def_property(srna, "strips", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "strip"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Strips", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop = RNA_def_property(srna, "strips_selected", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "strip_select"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Strips Selected", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); } static void rna_def_userdef_themes(BlenderRNA *brna) @@ -2864,7 +2877,7 @@ static void rna_def_userdef_system(BlenderRNA *brna) /* locale according to http://www.roseindia.net/tutorials/I18N/locales-list.shtml */ /* if you edit here, please also edit the source/blender/blenfont/intern/blf_lang.c 's locales */ /* Note: As this list is in alphabetical order, and not defined order, - * here is the highest define currently in use: 30 (turkish). */ + * here is the highest define currently in use: 31 (Hungarian). */ static EnumPropertyItem language_items[] = { { 0, "", 0, N_("Nearly done"), ""}, { 0, "DEFAULT", 0, "Default (Default)", ""}, @@ -2882,20 +2895,21 @@ static void rna_def_userdef_system(BlenderRNA *brna) {10, "CATALAN", 0, "Catalan (Català)", "ca_AD"}, {16, "CROATIAN", 0, "Croatian (Hrvatski)", "hr_HR"}, {11, "CZECH", 0, "Czech (Český)", "cs_CZ"}, -/* { 3, "DUTCH", 0, "Dutch (Nederlandse taal)", "nl_NL"},*/ /* XXX No po's yet. */ +/* { 3, "DUTCH", 0, "Dutch (Nederlandse taal)", "nl_NL"}, */ /* XXX No po's yet. */ { 6, "FINNISH", 0, "Finnish (Suomi)", "fi_FI"}, { 5, "GERMAN", 0, "German (Deutsch)", "de_DE"}, {23, "GREEK", 0, "Greek (Ελληνικά)", "el_GR"}, + {31, "HUNGARIAN", 0, "Hungarian (magyar)", "hu_HU"}, {27, "INDONESIAN", 0, "Indonesian (Bahasa indonesia)", "id_ID"}, { 2, "JAPANESE", 0, "Japanese (日本語)", "ja_JP"}, {29, "KYRGYZ", 0, "Kyrgyz (Кыргыз тили)", "ky_KG"}, -/* {24, "KOREAN", 0, "Korean (한국 언어)", "ko_KR"},*/ /* XXX No po's yet. */ +/* {24, "KOREAN", 0, "Korean (한국 언어)", "ko_KR"}, */ /* XXX No po's yet. */ {25, "NEPALI", 0, "Nepali (नेपाली)", "ne_NP"}, /* using the utf8 flipped form of Persian (فارسی) */ {26, "PERSIAN", 0, "Persian (ﯽﺳﺭﺎﻓ)", "fa_IR"}, {19, "POLISH", 0, "Polish (Polski)", "pl_PL"}, {12, "BRAZILIAN_PORTUGUESE", 0, "Portuguese (Português)", "pt"}, -/* {20, "ROMANIAN", 0, "Romanian (Român)", "ro_RO"},*/ /* XXX No po's yet. */ +/* {20, "ROMANIAN", 0, "Romanian (Român)", "ro_RO"}, */ /* XXX No po's yet. */ {17, "SERBIAN", 0, "Serbian (Српски)", "sr_RS"}, {28, "SERBIAN_LATIN", 0, "Serbian latin (Srpski latinica)", "sr_RS@latin"}, { 7, "SWEDISH", 0, "Swedish (Svenska)", "sv_SE"}, diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner.py b/source/blender/makesrna/rna_cleanup/rna_cleaner.py index ca610eeb024..b75d177d809 100755 --- a/source/blender/makesrna/rna_cleanup/rna_cleaner.py +++ b/source/blender/makesrna/rna_cleanup/rna_cleaner.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#!/usr/bin/env python3.2 """ This script is used to help cleaning RNA api. diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py b/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py index 89d95b5a627..75851105991 100755 --- a/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py +++ b/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#!/usr/bin/env python3.2 import sys diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c index 8341bc67107..8d6295ee6d4 100644 --- a/source/blender/modifiers/intern/MOD_boolean_util.c +++ b/source/blender/modifiers/intern/MOD_boolean_util.c @@ -113,7 +113,7 @@ static void VertexIt_Fill(CSG_IteratorPtr it, CSG_IVertex *vert) static void VertexIt_Step(CSG_IteratorPtr it) { VertexIt * iterator = (VertexIt *)it; - iterator->pos ++; + iterator->pos++; } static void VertexIt_Reset(CSG_IteratorPtr it) @@ -129,7 +129,7 @@ static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, DerivedMesh if (output == 0) return; // allocate some memory for blender iterator - it = (VertexIt *)(MEM_mallocN(sizeof(VertexIt),"Boolean_VIt")); + it = (VertexIt *)(MEM_mallocN(sizeof(VertexIt), "Boolean_VIt")); if (it == 0) { return; } @@ -207,7 +207,7 @@ static void FaceIt_Fill(CSG_IteratorPtr it, CSG_IFace *face) static void FaceIt_Step(CSG_IteratorPtr it) { FaceIt * face_it = (FaceIt *)it; - face_it->pos ++; + face_it->pos++; } static void FaceIt_Reset(CSG_IteratorPtr it) @@ -223,7 +223,7 @@ static void FaceIt_Construct( if (output == 0) return; // allocate some memory for blender iterator - it = (FaceIt *)(MEM_mallocN(sizeof(FaceIt),"Boolean_FIt")); + it = (FaceIt *)(MEM_mallocN(sizeof(FaceIt), "Boolean_FIt")); if (it == 0) { return; } @@ -333,7 +333,7 @@ static void InterpCSGFace( else copy_v3_v3(obco, co[j]); - interp_weights_face_v3( w[j],orig_co[0], orig_co[1], orig_co[2], orig_co[3], obco); + interp_weights_face_v3(w[j], orig_co[0], orig_co[1], orig_co[2], orig_co[3], obco); } CustomData_interp(&orig_dm->faceData, &dm->faceData, &orig_index, NULL, (float*)w, 1, index); @@ -441,7 +441,7 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh( mat_nr = 0; for (a = 0; a < ob1->totcol; a++) { - if (give_current_material(ob1, a+1) == orig_mat) { + if (give_current_material(ob1, a + 1) == orig_mat) { mat_nr = a; break; } @@ -496,8 +496,8 @@ static void BuildMeshDescriptors( struct CSG_FaceIteratorDescriptor * face_it, struct CSG_VertexIteratorDescriptor * vertex_it) { - VertexIt_Construct(vertex_it,dm, ob); - FaceIt_Construct(face_it,dm,face_offset,ob); + VertexIt_Construct(vertex_it, dm, ob); + FaceIt_Construct(face_it, dm, face_offset, ob); } static void FreeMeshDescriptors( @@ -551,7 +551,7 @@ static DerivedMesh *NewBooleanDerivedMesh_intern( } BuildMeshDescriptors(dm_select, ob_select, 0, &fd_1, &vd_1); - BuildMeshDescriptors(dm, ob, dm_select->getNumTessFaces(dm_select) , &fd_2, &vd_2); + BuildMeshDescriptors(dm, ob, dm_select->getNumTessFaces(dm_select), &fd_2, &vd_2); bool_op = CSG_NewBooleanFunction(); @@ -601,7 +601,7 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type) dm_select = mesh_create_derived_view(scene, ob_select, 0); // no modifiers in editmode ?? maxmat= ob->totcol + ob_select->totcol; - mat= (Material**)MEM_mallocN(sizeof(Material*)*maxmat, "NewBooleanMeshMat"); + mat = (Material **)MEM_mallocN(sizeof(Material *) * maxmat, "NewBooleanMeshMat"); /* put some checks in for nice user feedback */ if (dm == NULL || dm_select == NULL) { @@ -632,7 +632,7 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type) /* add materials to object */ for (a = 0; a < totmat; a++) - assign_material(ob_new, mat[a], a+1); + assign_material(ob_new, mat[a], a + 1); MEM_freeN(mat); diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c index d5d8439c749..1bc23ab5040 100644 --- a/source/blender/modifiers/intern/MOD_cloth.c +++ b/source/blender/modifiers/intern/MOD_cloth.c @@ -113,7 +113,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene, Ob CollisionModifierData *coll_clmd = (CollisionModifierData *)modifiers_findByType(ob1, eModifierType_Collision); if (coll_clmd) { DagNode *curNode = dag_get_node(forest, ob1); - dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Cloth Collision"); + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Cloth Collision"); } } } diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c index 4c5ce184c22..9636104cb06 100644 --- a/source/blender/modifiers/intern/MOD_collision.c +++ b/source/blender/modifiers/intern/MOD_collision.c @@ -117,7 +117,7 @@ static void deformVerts(ModifierData *md, Object *ob, /* if possible use/create DerivedMesh */ if (derivedData) dm = CDDM_copy(derivedData); - else if (ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob); + else if (ob->type == OB_MESH) dm = CDDM_from_mesh(ob->data, ob); if (!ob->pd) { printf("CollisionModifier deformVerts: Should not happen!\n"); @@ -136,9 +136,9 @@ static void deformVerts(ModifierData *md, Object *ob, if (G.rt > 0) printf("current_time %f, collmd->time_xnew %f\n", current_time, collmd->time_xnew); - numverts = dm->getNumVerts ( dm ); + numverts = dm->getNumVerts (dm); - if ((current_time > collmd->time_xnew)|| (BKE_ptcache_get_continue_physics())) { + if ((current_time > collmd->time_xnew) || (BKE_ptcache_get_continue_physics())) { unsigned int i; // check if mesh has changed @@ -148,9 +148,9 @@ static void deformVerts(ModifierData *md, Object *ob, if (collmd->time_xnew == -1000) { /* first time */ collmd->x = dm->dupVertArray(dm); // frame start position - for ( i = 0; i < numverts; i++ ) { + for (i = 0; i < numverts; i++) { // we save global positions - mul_m4_v3( ob->obmat, collmd->x[i].co ); + mul_m4_v3(ob->obmat, collmd->x[i].co); } collmd->xnew = MEM_dupallocN(collmd->x); // frame end position @@ -181,7 +181,7 @@ static void deformVerts(ModifierData *md, Object *ob, for (i = 0; i < numverts; i++) { // we save global positions - mul_m4_v3( ob->obmat, collmd->xnew[i].co ); + mul_m4_v3(ob->obmat, collmd->xnew[i].co); } memcpy(collmd->current_xnew, collmd->x, numverts*sizeof(MVert)); diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c index f55faf9c183..e1a8e221476 100644 --- a/source/blender/modifiers/intern/MOD_decimate.c +++ b/source/blender/modifiers/intern/MOD_decimate.c @@ -140,7 +140,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), /* we assume the decim_faces tells how much to reduce */ while (lod.face_num > numTris*dmd->percent) { - if ( LOD_CollapseEdge(&lod)==0) break; + if ( LOD_CollapseEdge(&lod) == 0) break; } if (lod.vertex_num>2) { @@ -160,7 +160,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), if (lod.vertex_num>2) { mface = CDDM_get_tessfaces(result); - for (a=0; a<lod.face_num; a++) { + for (a = 0; a < lod.face_num; a++) { MFace *mf = &mface[a]; int *tri = &lod.triangle_index_buffer[a*3]; mf->v1 = tri[0]; diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index 70294588fd4..4d9b8de061e 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -189,7 +189,7 @@ static void displaceModifier_do( modifier_init_texture(dmd->modifier.scene, dmd->texture); - for (i = 0; i < numVerts; ++i) { + for (i = 0; i < numVerts; i++) { TexResult texres; float delta = 0, strength = dmd->strength; diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index def02081be8..3e399707040 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -64,7 +64,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj BMEditMesh *em; BMIter iter; BMEdge *e; - float threshold = cos((emd->split_angle + 0.00001) * M_PI / 180.0); + float threshold = cosf((emd->split_angle + 0.00001f) * (float)M_PI / 180.0f); em = DM_to_editbmesh(dm, NULL, FALSE); bm = em->bm; diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index 11542dc4c1a..4270659d851 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -35,6 +35,7 @@ #include "DNA_meshdata_types.h" #include "DNA_scene_types.h" +#include "DNA_object_types.h" #include "BLI_kdtree.h" #include "BLI_rand.h" @@ -104,8 +105,8 @@ static void createFacepa(ExplodeModifierData *emd, ParticleData *pa; KDTree *tree; float center[3], co[3]; - int *facepa=NULL,*vertpa=NULL,totvert=0,totface=0,totpart=0; - int i,p,v1,v2,v3,v4=0; + int *facepa=NULL, *vertpa=NULL, totvert=0, totface=0, totpart=0; + int i, p, v1, v2, v3, v4=0; mvert = dm->getVertArray(dm); mface = dm->getTessFaceArray(dm); @@ -145,24 +146,24 @@ static void createFacepa(ExplodeModifierData *emd, /* make tree of emitter locations */ tree=BLI_kdtree_new(totpart); - for (p=0,pa=psys->particles; p<totpart; p++,pa++) { - psys_particle_on_emitter(psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,NULL,NULL,NULL,NULL,NULL); + for (p=0, pa=psys->particles; p<totpart; p++, pa++) { + psys_particle_on_emitter(psmd, psys->part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co, NULL, NULL, NULL, NULL, NULL); BLI_kdtree_insert(tree, p, co, NULL); } BLI_kdtree_balance(tree); /* set face-particle-indexes to nearest particle to face center */ - for (i=0,fa=mface; i<totface; i++,fa++) { - add_v3_v3v3(center,mvert[fa->v1].co,mvert[fa->v2].co); + for (i=0, fa=mface; i<totface; i++, fa++) { + add_v3_v3v3(center, mvert[fa->v1].co, mvert[fa->v2].co); add_v3_v3(center, mvert[fa->v3].co); if (fa->v4) { add_v3_v3(center, mvert[fa->v4].co); - mul_v3_fl(center,0.25); + mul_v3_fl(center, 0.25); } else - mul_v3_fl(center,0.3333f); + mul_v3_fl(center, 0.3333f); - p= BLI_kdtree_find_nearest(tree,center,NULL,NULL); + p= BLI_kdtree_find_nearest(tree, center, NULL, NULL); v1=vertpa[fa->v1]; v2=vertpa[fa->v2]; @@ -545,7 +546,7 @@ static void remap_uvs_23(DerivedMesh *dm, DerivedMesh *split, int numlayer, int static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) { DerivedMesh *splitdm; - MFace *mf=NULL,*df1=NULL; + MFace *mf=NULL, *df1=NULL; MFace *mface=dm->getTessFaceArray(dm); MVert *dupve, *mv; EdgeHash *edgehash; @@ -553,10 +554,10 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) int totvert=dm->getNumVerts(dm); int totface=dm->getNumTessFaces(dm); - int *facesplit = MEM_callocN(sizeof(int)*totface,"explode_facesplit"); - int *vertpa = MEM_callocN(sizeof(int)*totvert,"explode_vertpa2"); + int *facesplit = MEM_callocN(sizeof(int)*totface, "explode_facesplit"); + int *vertpa = MEM_callocN(sizeof(int)*totvert, "explode_vertpa2"); int *facepa = emd->facepa; - int *fs, totesplit=0,totfsplit=0,curdupface=0; + int *fs, totesplit=0, totfsplit=0, curdupface=0; int i, v1, v2, v3, v4, esplit, v[4] = {0, 0, 0, 0}, /* To quite gcc barking... */ uv[4] = {0, 0, 0, 0}; /* To quite gcc barking... */ @@ -566,7 +567,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) edgehash= BLI_edgehash_new(); /* recreate vertpa from facepa calculation */ - for (i=0,mf=mface; i<totface; i++,mf++) { + for (i=0, mf=mface; i<totface; i++, mf++) { vertpa[mf->v1]=facepa[i]; vertpa[mf->v2]=facepa[i]; vertpa[mf->v3]=facepa[i]; @@ -575,7 +576,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) } /* mark edges for splitting and how to split faces */ - for (i=0,mf=mface,fs=facesplit; i<totface; i++,mf++,fs++) { + for (i=0, mf=mface, fs=facesplit; i<totface; i++, mf++, fs++) { v1=vertpa[mf->v1]; v2=vertpa[mf->v2]; v3=vertpa[mf->v3]; @@ -627,7 +628,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) BLI_edgehashIterator_free(ehi); /* count new faces due to splitting */ - for (i=0,fs=facesplit; i<totface; i++,fs++) + for (i=0, fs=facesplit; i<totface; i++, fs++) totfsplit += add_faces[*fs]; splitdm= CDDM_from_template(dm, totesplit, 0, totface+totfsplit, 0, 0); @@ -650,8 +651,8 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) * later interpreted as tri's, for this to work right I think we probably * have to stop using tessface - campbell */ - facepa= MEM_callocN(sizeof(int)*(totface+(totfsplit * 2)),"explode_facepa"); - //memcpy(facepa,emd->facepa,totface*sizeof(int)); + facepa= MEM_callocN(sizeof(int)*(totface+(totfsplit * 2)), "explode_facepa"); + //memcpy(facepa, emd->facepa, totface*sizeof(int)); emd->facepa=facepa; /* create new verts */ @@ -660,9 +661,9 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) BLI_edgehashIterator_getKey(ehi, &ed_v1, &ed_v2); esplit= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi)); mv=CDDM_get_vert(splitdm, ed_v2); - dupve=CDDM_get_vert(splitdm,esplit); + dupve=CDDM_get_vert(splitdm, esplit); - DM_copy_vert_data(splitdm,splitdm, ed_v2, esplit,1); + DM_copy_vert_data(splitdm, splitdm, ed_v2, esplit, 1); *dupve=*mv; @@ -676,7 +677,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) /* create new faces */ curdupface=0;//=totface; //curdupin=totesplit; - for (i=0,fs=facesplit; i<totface; i++,fs++) { + for (i=0, fs=facesplit; i<totface; i++, fs++) { mf = dm->getTessFaceData(dm, i, CD_MFACE); switch (*fs) { @@ -781,8 +782,8 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) return splitdm; } static DerivedMesh * explodeMesh(ExplodeModifierData *emd, - ParticleSystemModifierData *psmd, Scene *scene, Object *ob, - DerivedMesh *to_explode) + ParticleSystemModifierData *psmd, Scene *scene, Object *ob, + DerivedMesh *to_explode) { DerivedMesh *explode, *dm=to_explode; MFace *mf= NULL, *mface; @@ -797,7 +798,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, float cfra; /* float timestep; */ int *facepa=emd->facepa; - int totdup=0,totvert=0,totface=0,totpart=0,delface=0; + int totdup=0, totvert=0, totface=0, totpart=0, delface=0; int i, v, u; unsigned int ed_v1, ed_v2, mindex=0; MTFace *mtface = NULL, *mtf; @@ -858,12 +859,12 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, BLI_edgehashIterator_free(ehi); /* the final duplicated vertices */ - explode= CDDM_from_template(dm, totdup, 0,totface-delface, 0, 0); + explode= CDDM_from_template(dm, totdup, 0, totface-delface, 0, 0); mtface = CustomData_get_layer_named(&explode->faceData, CD_MTFACE, emd->uvname); /*dupvert= CDDM_get_verts(explode);*/ /* getting back to object space */ - invert_m4_m4(imat,ob->obmat); + invert_m4_m4(imat, ob->obmat); psmd->psys->lattice = psys_get_lattice(&sim); @@ -879,7 +880,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, v= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi)); dm->getVert(dm, ed_v1, &source); - dest = CDDM_get_vert(explode,v); + dest = CDDM_get_vert(explode, v); DM_copy_vert_data(dm, explode, ed_v1, v, 1); *dest = source; @@ -893,8 +894,8 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, state.time=cfra; psys_get_particle_state(&sim, ed_v2, &state, 1); - vertco=CDDM_get_vert(explode,v)->co; - mul_m4_v3(ob->obmat,vertco); + vertco=CDDM_get_vert(explode, v)->co; + mul_m4_v3(ob->obmat, vertco); sub_v3_v3(vertco, birth.co); @@ -903,7 +904,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, mul_qt_v3(rot, vertco); if (emd->flag & eExplodeFlag_PaSize) - mul_v3_fl(vertco,pa->size); + mul_v3_fl(vertco, pa->size); add_v3_v3(vertco, state.co); @@ -913,7 +914,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, BLI_edgehashIterator_free(ehi); /*map new vertices to faces*/ - for (i=0,u=0; i<totface; i++) { + for (i=0, u=0; i<totface; i++) { MFace source; int orig_v4; @@ -925,8 +926,8 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, if (pa->alive==PARS_DEAD && (emd->flag&eExplodeFlag_Dead)==0) continue; } - dm->getTessFace(dm,i,&source); - mf=CDDM_get_tessface(explode,u); + dm->getTessFace(dm, i, &source); + mf=CDDM_get_tessface(explode, u); orig_v4 = source.v4; @@ -941,7 +942,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, if (source.v4) source.v4 = edgecut_get(vertpahash, source.v4, mindex); - DM_copy_tessface_data(dm,explode,i,u,1); + DM_copy_tessface_data(dm, explode, i, u, 1); *mf = source; @@ -995,7 +996,7 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, { DerivedMesh *dm = derivedData; ExplodeModifierData *emd= (ExplodeModifierData*) md; - ParticleSystemModifierData *psmd=findPrecedingParticlesystem(ob,md); + ParticleSystemModifierData *psmd=findPrecedingParticlesystem(ob, md); DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly */ @@ -1018,13 +1019,13 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, if (emd->flag & eExplodeFlag_CalcFaces) emd->flag &= ~eExplodeFlag_CalcFaces; - createFacepa(emd,psmd,derivedData); + createFacepa(emd, psmd, derivedData); } /* 2. create new mesh */ if (emd->flag & eExplodeFlag_EdgeCut) { int *facepa = emd->facepa; - DerivedMesh *splitdm=cutEdges(emd,dm); - DerivedMesh *explode=explodeMesh(emd, psmd, md->scene, ob, splitdm); + DerivedMesh *splitdm = cutEdges(emd, dm); + DerivedMesh *explode = explodeMesh(emd, psmd, md->scene, ob, splitdm); MEM_freeN(emd->facepa); emd->facepa=facepa; diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c index 8d3b1871c51..80c48062635 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim_util.c +++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c @@ -165,7 +165,7 @@ void fluidsim_free(FluidsimModifierData *fluidmd) /* read .bobj.gz file into a fluidsimDerivedMesh struct */ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_example) { - int wri = 0,i; + int wri = 0, i; int gotBytes; gzFile gzf; int numverts = 0, numfaces = 0; @@ -361,7 +361,7 @@ void fluid_estimate_memory(Object *ob, FluidsimSettings *fss, char *value) mesh= ob->data; fluid_get_bb(mesh->mvert, mesh->totvert, ob->obmat, fss->bbStart, fss->bbSize); - elbeemEstimateMemreq(fss->resolutionxyz, fss->bbSize[0],fss->bbSize[1],fss->bbSize[2], fss->maxRefine, value); + elbeemEstimateMemreq(fss->resolutionxyz, fss->bbSize[0], fss->bbSize[1], fss->bbSize[2], fss->maxRefine, value); } } @@ -393,7 +393,7 @@ static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh * velarray = fss->meshVelocities; - // .bobj.gz , correct filename + // .bobj.gz, correct filename // 87654321 filename[len-6] = 'v'; filename[len-5] = 'e'; @@ -406,7 +406,7 @@ static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh * return; } - gzread(gzf, &wri, sizeof( wri )); + gzread(gzf, &wri, sizeof(wri)); if (wri != totvert) { MEM_freeN(fss->meshVelocities); fss->meshVelocities = NULL; @@ -415,7 +415,7 @@ static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh * for (i=0; i<totvert;i++) { for (j=0; j<3; j++) { - gzread(gzf, &wrf, sizeof( wrf )); + gzread(gzf, &wrf, sizeof(wrf)); velarray[i].vel[j] = wrf; } } @@ -478,7 +478,7 @@ static DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, Fluidsim if (getenv(strEnvName2)) { int elevel = atoi(getenv(strEnvName2)); if (elevel>0) { - printf("Env. var %s set, fluid sim mesh '%s' not found, aborting render...\n",strEnvName2, targetFile); + printf("Env. var %s set, fluid sim mesh '%s' not found, aborting render...\n", strEnvName2, targetFile); exit(1); } } diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index b115e5bb244..ef3a6d8217e 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -122,7 +122,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, DagNode *curNode = dag_get_node(forest, hmd->object); if (hmd->subtarget[0]) - dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA|DAG_RL_DATA_DATA, "Hook Modifier"); + dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Hook Modifier"); else dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA, "Hook Modifier"); } @@ -195,9 +195,9 @@ static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm, for (j = 0; j < numVerts; j++) { if (origindex_ar[j] == *index_pt) { float *co = vertexCos[j]; - if ((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { + if ((fac = hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { if (dvert) - fac *= defvert_find_weight(dvert+j, defgrp_index); + fac *= defvert_find_weight(dvert + j, defgrp_index); if (fac) { mul_v3_m4v3(vec, mat, co); @@ -210,12 +210,12 @@ static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm, } } else { /* missing dm or ORIGINDEX */ - for (i= 0, index_pt= hmd->indexar; i < hmd->totindex; i++, index_pt++) { + for (i = 0, index_pt = hmd->indexar; i < hmd->totindex; i++, index_pt++) { if (*index_pt < numVerts) { float *co = vertexCos[*index_pt]; - if ((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { + if ((fac = hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { if (dvert) - fac *= defvert_find_weight(dvert+(*index_pt), defgrp_index); + fac *= defvert_find_weight(dvert + (*index_pt), defgrp_index); if (fac) { mul_v3_m4v3(vec, mat, co); @@ -227,13 +227,13 @@ static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm, } } else if (dvert) { /* vertex group hook */ - const float fac_orig= hmd->force; + const float fac_orig = hmd->force; for (i = 0; i < max_dvert; i++, dvert++) { float fac; float *co = vertexCos[i]; - if ((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { + if ((fac = hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) { fac *= defvert_find_weight(dvert, defgrp_index); if (fac) { mul_v3_m4v3(vec, mat, co); diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c index b667fc4bd29..9faca7bddc5 100644 --- a/source/blender/modifiers/intern/MOD_mask.c +++ b/source/blender/modifiers/intern/MOD_mask.c @@ -146,13 +146,13 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, char *bone_select_array; int bone_select_tot= 0; const int defbase_tot= BLI_countlist(&ob->defbase); - + /* check that there is armature object with bones to use, otherwise return original mesh */ if (ELEM3(NULL, mmd->ob_arm, mmd->ob_arm->pose, ob->defbase.first)) return derivedData; - + bone_select_array= MEM_mallocN(defbase_tot * sizeof(char), "mask array"); - + for (i = 0, def = ob->defbase.first; def; def = def->next, i++) { pchan = get_pose_channel(oba->pose, def->name); if (pchan && pchan->bone && (pchan->bone->flag & BONE_SELECTED)) { @@ -198,7 +198,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, for (i= 0, dv= dvert; i < maxVerts; i++, dv++) { MDeformWeight *dw= dv->dw; int j; - + for (j= dv->totweight; j > 0; j--, dw++) { if (dw->def_nr < defbase_tot) { if (bone_select_array[dw->def_nr]) { @@ -279,8 +279,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, dm->getEdge(dm, i, &me); /* only add if both verts will be in new mesh */ - if ( BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v1)) && - BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v2)) ) + if (BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v1)) && + BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v2))) { BLI_ghash_insert(edgeHash, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(numEdges)); numEdges++; @@ -291,7 +291,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, MLoop *ml = mloop + mp->loopstart; int ok = TRUE; int j; - + for (j = 0; j < mp->totloop; j++, ml++) { if (!BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(ml->v))) { ok = FALSE; @@ -320,10 +320,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, mvert_new = CDDM_get_verts(result); /* using ghash-iterators, map data into new mesh */ - /* vertices */ - for ( hashIter = BLI_ghashIterator_new(vertHash); - !BLI_ghashIterator_isDone(hashIter); - BLI_ghashIterator_step(hashIter) ) + /* vertices */ + for (hashIter = BLI_ghashIterator_new(vertHash); + !BLI_ghashIterator_isDone(hashIter); + BLI_ghashIterator_step(hashIter) ) { MVert source; MVert *dest; @@ -338,10 +338,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } BLI_ghashIterator_free(hashIter); - /* edges */ - for ( hashIter = BLI_ghashIterator_new(edgeHash); - !BLI_ghashIterator_isDone(hashIter); - BLI_ghashIterator_step(hashIter) ) + /* edges */ + for (hashIter = BLI_ghashIterator_new(edgeHash); + !BLI_ghashIterator_isDone(hashIter); + BLI_ghashIterator_step(hashIter)) { MEdge source; MEdge *dest; @@ -359,10 +359,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } BLI_ghashIterator_free(hashIter); - /* faces */ - for ( hashIter = BLI_ghashIterator_new(polyHash); - !BLI_ghashIterator_isDone(hashIter); - BLI_ghashIterator_step(hashIter) ) + /* faces */ + for (hashIter = BLI_ghashIterator_new(polyHash); + !BLI_ghashIterator_isDone(hashIter); + BLI_ghashIterator_step(hashIter) ) { int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter)); int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter)); @@ -407,7 +407,9 @@ ModifierTypeInfo modifierType_Mask = { /* structName */ "MaskModifierData", /* structSize */ sizeof(MaskModifierData), /* type */ eModifierTypeType_Nonconstructive, - /* flags */ eModifierTypeFlag_AcceptsMesh|eModifierTypeFlag_SupportsMapping|eModifierTypeFlag_SupportsEditmode, + /* flags */ eModifierTypeFlag_AcceptsMesh | + eModifierTypeFlag_SupportsMapping | + eModifierTypeFlag_SupportsEditmode, /* copyData */ copyData, /* deformVerts */ NULL, diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 08626e55231..1bcafc2918e 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -104,9 +104,9 @@ static int isDisabled(ModifierData *md, int UNUSED(useRenderParams)) } static void foreachObjectLink( - ModifierData *md, Object *ob, - void (*walk)(void *userData, Object *ob, Object **obpoin), - void *userData) + ModifierData *md, Object *ob, + void (*walk)(void *userData, Object *ob, Object **obpoin), + void *userData) { MeshDeformModifierData *mmd = (MeshDeformModifierData*) md; @@ -142,24 +142,24 @@ static float meshdeform_dynamic_bind(MeshDeformModifierData *mmd, float (*dco)[3 size= mmd->dyngridsize; for (i=0; i<3; i++) { - gridvec[i]= (vec[i] - mmd->dyncellmin[i] - mmd->dyncellwidth*0.5f)/mmd->dyncellwidth; - ivec[i]= (int)gridvec[i]; - dvec[i]= gridvec[i] - ivec[i]; + gridvec[i] = (vec[i] - mmd->dyncellmin[i] - mmd->dyncellwidth*0.5f)/mmd->dyncellwidth; + ivec[i] = (int)gridvec[i]; + dvec[i] = gridvec[i] - ivec[i]; } for (i=0; i<8; i++) { - if (i & 1) { x= ivec[0]+1; wx= dvec[0]; } - else { x= ivec[0]; wx= 1.0f-dvec[0]; } + if (i & 1) { x = ivec[0] + 1; wx = dvec[0]; } + else { x = ivec[0]; wx = 1.0f - dvec[0]; } - if (i & 2) { y= ivec[1]+1; wy= dvec[1]; } - else { y= ivec[1]; wy= 1.0f-dvec[1]; } + if (i & 2) { y = ivec[1] + 1; wy = dvec[1]; } + else { y = ivec[1]; wy = 1.0f - dvec[1]; } - if (i & 4) { z= ivec[2]+1; wz= dvec[2]; } - else { z= ivec[2]; wz= 1.0f-dvec[2]; } + if (i & 4) { z = ivec[2] + 1; wz = dvec[2]; } + else { z = ivec[2]; wz = 1.0f - dvec[2]; } - CLAMP(x, 0, size-1); - CLAMP(y, 0, size-1); - CLAMP(z, 0, size-1); + CLAMP(x, 0, size - 1); + CLAMP(y, 0, size - 1); + CLAMP(z, 0, size - 1); a= x + y*size + z*size*size; weight= wx*wy*wz; @@ -314,7 +314,7 @@ static void meshdeformModifier_do( totweight= 0.0f; zero_v3(co); - for (a=offsets[b]; a<offsets[b+1]; a++) { + for (a = offsets[b]; a < offsets[b + 1]; a++) { weight= influences[a].weight; madd_v3_v3fl(co, dco[influences[a].vertex], weight); totweight += weight; @@ -322,7 +322,7 @@ static void meshdeformModifier_do( } if (totweight > 0.0f) { - mul_v3_fl(co, fac/totweight); + mul_v3_fl(co, fac / totweight); mul_m3_v3(icagemat, co); if (G.rt != 527) add_v3_v3(vertexCos[b], co); @@ -394,8 +394,8 @@ void modifier_mdef_compact_influences(ModifierData *md) } /* allocate bind influences */ - mmd->bindinfluences= MEM_callocN(sizeof(MDefInfluence)*mmd->totinfluence, "MDefBindInfluence"); - mmd->bindoffsets= MEM_callocN(sizeof(int)*(totvert+1), "MDefBindOffset"); + mmd->bindinfluences = MEM_callocN(sizeof(MDefInfluence) * mmd->totinfluence, "MDefBindInfluence"); + mmd->bindoffsets = MEM_callocN(sizeof(int) * (totvert + 1), "MDefBindOffset"); /* write influences */ totinfluence= 0; @@ -417,8 +417,8 @@ void modifier_mdef_compact_influences(ModifierData *md) weight= weights[a + b*totcagevert]; if (weight > MESHDEFORM_MIN_INFLUENCE) { - mmd->bindinfluences[totinfluence].weight= weight/totweight; - mmd->bindinfluences[totinfluence].vertex= a; + mmd->bindinfluences[totinfluence].weight = weight / totweight; + mmd->bindinfluences[totinfluence].vertex = a; totinfluence++; } } diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c index 1284d5a6769..2df0bd17eaf 100644 --- a/source/blender/modifiers/intern/MOD_mirror.c +++ b/source/blender/modifiers/intern/MOD_mirror.c @@ -113,7 +113,7 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, float mtx[4][4]; int i, j; int a, totshape; - int *vtargetmap, *vtmap_a = NULL, *vtmap_b = NULL; + int *vtargetmap = NULL, *vtmap_a = NULL, *vtmap_b = NULL; /* mtx is the mirror transformation */ unit_m4(mtx); @@ -223,17 +223,18 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, MLoop *ml2; int e; - /* reverse the loop */ - for (j = 0; j < mp->totloop; j++) { - DM_copy_loop_data(result, result, mp->loopstart + j, mp->loopstart + maxLoops + mp->totloop - j - 1, 1); - } + /* reverse the loop, but we keep the first vertex in the face the same, + * to ensure that quads are split the same way as on the other side */ + DM_copy_loop_data(result, result, mp->loopstart, mp->loopstart + maxLoops, 1); + for (j = 1; j < mp->totloop; j++) + DM_copy_loop_data(result, result, mp->loopstart + j, mp->loopstart + maxLoops + mp->totloop - j, 1); ml2 = ml + mp->loopstart + maxLoops; e = ml2[0].e; - for (j = 0; j < mp->totloop-1; j++) { - ml2[j].e = ml2[j+1].e; + for (j = 0; j < mp->totloop - 1; j++) { + ml2[j].e = ml2[j + 1].e; } - ml2[mp->totloop-1].e = e; + ml2[mp->totloop - 1].e = e; mp->loopstart += maxLoops; } diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c index 628104295f7..3af1351cbdb 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.c +++ b/source/blender/modifiers/intern/MOD_particleinstance.c @@ -117,7 +117,7 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, ParticleData *pa= NULL, *pars= NULL; MFace *mface, *orig_mface; MVert *mvert, *orig_mvert; - int i,totvert, totpart=0, totface, maxvert, maxface, first_particle=0; + int i, totvert, totpart=0, totface, maxvert, maxface, first_particle=0; short track=ob->trackflag%3, trackneg, axis = pimd->axis; float max_co=0.0, min_co=0.0, temp_co[3], cross[3]; float *size=NULL; @@ -132,7 +132,7 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, } if (pimd->ob) { - psys = BLI_findlink(&pimd->ob->particlesystem,pimd->psys-1); + psys = BLI_findlink(&pimd->ob->particlesystem, pimd->psys-1); if (psys==NULL || psys->totpart==0) return derivedData; } @@ -192,7 +192,7 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, max_co=max_r[track]; } - result = CDDM_from_template(dm, maxvert,dm->getNumEdges(dm)*totpart,maxface, 0, 0); + result = CDDM_from_template(dm, maxvert, dm->getNumEdges(dm)*totpart, maxface, 0, 0); mvert=result->getVertArray(result); orig_mvert=dm->getVertArray(dm); @@ -231,7 +231,7 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, mv->co[axis] = 0.0; } - psys_get_particle_on_path(&sim, first_particle + i/totvert, &state,1); + psys_get_particle_on_path(&sim, first_particle + i/totvert, &state, 1); normalize_v3(state.vel); @@ -241,22 +241,22 @@ static DerivedMesh * applyModifier(ModifierData *md, Object *ob, state.rot[1] = state.rot[2] = state.rot[3] = 0.0f; } else { - float temp[3] = {0.0f,0.0f,0.0f}; + float temp[3] = {0.0f, 0.0f, 0.0f}; temp[axis] = 1.0f; cross_v3_v3v3(cross, temp, state.vel); /* state.vel[axis] is the only component surviving from a dot product with the axis */ - axis_angle_to_quat(state.rot,cross,saacos(state.vel[axis])); + axis_angle_to_quat(state.rot, cross, saacos(state.vel[axis])); } } else { state.time=-1.0; - psys_get_particle_state(&sim, first_particle + i/totvert, &state,1); + psys_get_particle_state(&sim, first_particle + i/totvert, &state, 1); } - mul_qt_v3(state.rot,mv->co); + mul_qt_v3(state.rot, mv->co); if (pimd->flag & eParticleInstanceFlag_UseSize) mul_v3_fl(mv->co, size[i/totvert]); add_v3_v3(mv->co, state.co); diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index d93779fc07d..dc1429208a0 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -226,7 +226,7 @@ ModifierTypeInfo modifierType_ParticleSystem = { /* copyData */ copyData, /* deformVerts */ deformVerts, - /* deformVertsEM */ NULL /* deformVertsEM */ , + /* deformVertsEM */ NULL, /* deformMatrices */ NULL, /* deformMatricesEM */ NULL, /* applyModifier */ NULL, diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c index d3e54651eea..71839312cf5 100644 --- a/source/blender/modifiers/intern/MOD_solidify.c +++ b/source/blender/modifiers/intern/MOD_solidify.c @@ -478,7 +478,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, sub_v3_v3v3(e1, mvert[ml_next->v].co, mvert[ml->v].co); sub_v3_v3v3(e2, mvert[ml_prev->v].co, mvert[ml->v].co); - angle = M_PI - angle_normalized_v3v3(e1, e2); + angle = (float)M_PI - angle_normalized_v3v3(e1, e2); BLI_array_append(face_angles, angle); } @@ -644,13 +644,13 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, ml[j].v = ed->v1+numVerts; ml[j++].e = eidx+numEdges; - ml[j].v = ed->v2+numVerts; - ml[j++].e = numEdges*2 + old_vert_arr[ed->v2]; + ml[j].v = ed->v2 + numVerts; + ml[j++].e = numEdges * 2 + old_vert_arr[ed->v2]; } if (edge_origIndex) { - edge_origIndex[ml[j-3].e] = ORIGINDEX_NONE; - edge_origIndex[ml[j-1].e] = ORIGINDEX_NONE; + edge_origIndex[ml[j - 3].e] = ORIGINDEX_NONE; + edge_origIndex[ml[j - 1].e] = ORIGINDEX_NONE; } /* use the next material index if option enabled */ @@ -667,13 +667,16 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, if (crease_inner) { /* crease += crease_inner; without wrapping */ - unsigned char *cr= (unsigned char *)&(medge[numEdges + eidx].crease); - int tcr= *cr + crease_inner; - *cr= tcr > 255 ? 255 : tcr; + unsigned char *cr = (unsigned char *)&(medge[numEdges + eidx].crease); + int tcr = *cr + crease_inner; + *cr = tcr > 255 ? 255 : tcr; } #ifdef SOLIDIFY_SIDE_NORMALS - normal_quad_v3(nor, mvert[ml[j-4].v].co, mvert[ml[j-3].v].co, mvert[ml[j-2].v].co, mvert[ml[j-1].v].co); + normal_quad_v3(nor, mvert[ml[j - 4].v].co, + mvert[ml[j - 3].v].co, + mvert[ml[j - 2].v].co, + mvert[ml[j - 1].v].co); add_v3_v3(edge_vert_nos[ed->v1], nor); add_v3_v3(edge_vert_nos[ed->v2], nor); diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index c0a4b319a18..4e143bcb008 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -209,7 +209,7 @@ DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (* if (orco) DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, get_mesh_orco_verts(ob)); } - else if (ELEM3(ob->type,OB_FONT,OB_CURVE,OB_SURF)) { + else if (ELEM3(ob->type, OB_FONT, OB_CURVE, OB_SURF)) { dm= CDDM_from_curve(ob); } diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c index 1b96c586cbf..ef8cf24987c 100644 --- a/source/blender/modifiers/intern/MOD_uvproject.c +++ b/source/blender/modifiers/intern/MOD_uvproject.c @@ -193,14 +193,14 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, if (projectors[i].ob->type == OB_CAMERA) { cam = (Camera *)projectors[i].ob->data; - if (cam->flag & CAM_PANORAMA) { - projectors[i].uci= project_camera_info(projectors[i].ob, NULL, aspx, aspy); - project_camera_info_scale(projectors[i].uci, scax, scay); + if (cam->type == CAM_PANO) { + projectors[i].uci= BLI_uvproject_camera_info(projectors[i].ob, NULL, aspx, aspy); + BLI_uvproject_camera_info_scale(projectors[i].uci, scax, scay); free_uci= 1; } else { - float sensor= camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); - int sensor_fit= camera_sensor_fit(cam->sensor_fit, aspx, aspy); + float sensor= BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); + int sensor_fit= BKE_camera_sensor_fit(cam->sensor_fit, aspx, aspy); float scale= (cam->type == CAM_PERSP) ? cam->clipsta * sensor / cam->lens : cam->ortho_scale; float xmax, xmin, ymax, ymin; @@ -224,12 +224,12 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, if (cam->type == CAM_PERSP) { float perspmat[4][4]; - perspective_m4( perspmat,xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); + perspective_m4(perspmat, xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); mult_m4_m4m4(tmpmat, perspmat, projectors[i].projmat); } else { /* if (cam->type == CAM_ORTHO) */ float orthomat[4][4]; - orthographic_m4( orthomat,xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); + orthographic_m4(orthomat, xmin, xmax, ymin, ymax, cam->clipsta, cam->clipend); mult_m4_m4m4(tmpmat, orthomat, projectors[i].projmat); } } @@ -304,7 +304,7 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, do { unsigned int lidx= mp->loopstart + fidx; unsigned int vidx= mloop[lidx].v; - project_from_camera(mloop_uv[lidx].uv, coords[vidx], projectors[0].uci); + BLI_uvproject_from_camera(mloop_uv[lidx].uv, coords[vidx], projectors[0].uci); } while (fidx--); } else { @@ -347,7 +347,7 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd, do { unsigned int lidx= mp->loopstart + fidx; unsigned int vidx= mloop[lidx].v; - project_from_camera(mloop_uv[lidx].uv, coords[vidx], best_projector->uci); + BLI_uvproject_from_camera(mloop_uv[lidx].uv, coords[vidx], best_projector->uci); } while (fidx--); } else { diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 926a674462c..5ee8103630d 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -29,6 +29,9 @@ #include "MEM_guardedalloc.h" +#include "DNA_object_types.h" +#include "DNA_meshdata_types.h" + #include "BLI_math.h" #include "BLI_utildefines.h" #include "BLI_string.h" @@ -39,9 +42,6 @@ #include "BKE_texture.h" #include "BKE_colortools.h" -#include "DNA_object_types.h" -#include "DNA_meshdata_types.h" - #include "depsgraph_private.h" #include "RE_shader_ext.h" @@ -192,7 +192,7 @@ static void warpModifier_do(WarpModifierData *wmd, Object *ob, modifier_get_vgroup(ob, dm, wmd->defgrp_name, &dvert, &defgrp_index); - if (wmd->curfalloff==NULL) /* should never happen, but bad lib linking could cause it */ + if (wmd->curfalloff == NULL) /* should never happen, but bad lib linking could cause it */ wmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); invert_m4_m4(obinv, ob->obmat); @@ -229,9 +229,10 @@ static void warpModifier_do(WarpModifierData *wmd, Object *ob, for (i = 0; i < numVerts; i++) { float *co = vertexCos[i]; - if (wmd->falloff_type==eWarp_Falloff_None || - ((fac=len_v3v3(co, mat_from[3])) < wmd->falloff_radius && (fac=(wmd->falloff_radius-fac)/wmd->falloff_radius)) ) { - + if (wmd->falloff_type == eWarp_Falloff_None || + ((fac = len_v3v3(co, mat_from[3])) < wmd->falloff_radius && + (fac = (wmd->falloff_radius-fac) / wmd->falloff_radius))) + { /* skip if no vert group found */ if (dvert && defgrp_index >= 0) { dv = &dvert[i]; diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index bcfdced4ffd..31cd20e7f97 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -112,7 +112,7 @@ static void get_vert2geom_distance(int numVerts, float (*v_cos)[3], dist_f,loc2trgt) \ schedule(static) #endif - for (i = 0; i < numVerts; ++i) { + for (i = 0; i < numVerts; i++) { float tmp_co[3]; /* Convert the vertex to tree coordinates. */ @@ -319,12 +319,12 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *UN if (wmd->mask_tex_map_obj && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { curNode = dag_get_node(forest, wmd->mask_tex_map_obj); - dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "WeightVGProximity Modifier"); } if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) - dag_add_relation(forest, obNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, + dag_add_relation(forest, obNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "WeightVGProximity Modifier"); } @@ -546,10 +546,10 @@ ModifierTypeInfo modifierType_WeightVGProximity = { /* structName */ "WeightVGProximityModifierData", /* structSize */ sizeof(WeightVGProximityModifierData), /* type */ eModifierTypeType_NonGeometrical, - /* flags */ eModifierTypeFlag_AcceptsMesh - |eModifierTypeFlag_SupportsMapping - |eModifierTypeFlag_SupportsEditmode - |eModifierTypeFlag_UsesPreview, + /* flags */ eModifierTypeFlag_AcceptsMesh | + eModifierTypeFlag_SupportsMapping | + eModifierTypeFlag_SupportsEditmode | + eModifierTypeFlag_UsesPreview, /* copyData */ copyData, /* deformVerts */ NULL, diff --git a/source/blender/nodes/composite/node_composite_util.c b/source/blender/nodes/composite/node_composite_util.c index 8012057b393..f26b5f44f99 100644 --- a/source/blender/nodes/composite/node_composite_util.c +++ b/source/blender/nodes/composite/node_composite_util.c @@ -643,37 +643,37 @@ void generate_preview(void *data, bNode *node, CompBuf *stackbuf) void do_rgba_to_yuva(bNode *UNUSED(node), float *out, float *in) { - rgb_to_yuv(in[0],in[1],in[2], &out[0], &out[1], &out[2]); + rgb_to_yuv(in[0], in[1], in[2], &out[0], &out[1], &out[2]); out[3]=in[3]; } void do_rgba_to_hsva(bNode *UNUSED(node), float *out, float *in) { - rgb_to_hsv(in[0],in[1],in[2], &out[0], &out[1], &out[2]); + rgb_to_hsv(in[0], in[1], in[2], &out[0], &out[1], &out[2]); out[3]=in[3]; } void do_rgba_to_ycca(bNode *UNUSED(node), float *out, float *in) { - rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + rgb_to_ycc(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); out[3]=in[3]; } void do_yuva_to_rgba(bNode *UNUSED(node), float *out, float *in) { - yuv_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2]); + yuv_to_rgb(in[0], in[1], in[2], &out[0], &out[1], &out[2]); out[3]=in[3]; } void do_hsva_to_rgba(bNode *UNUSED(node), float *out, float *in) { - hsv_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2]); + hsv_to_rgb(in[0], in[1], in[2], &out[0], &out[1], &out[2]); out[3]=in[3]; } void do_ycca_to_rgba(bNode *UNUSED(node), float *out, float *in) { - ycc_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + ycc_to_rgb(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); out[3]=in[3]; } @@ -1200,7 +1200,7 @@ void qd_getPixelLerp(CompBuf* src, float u, float v, float* col) const int x1 = (int)ufl, y1 = (int)vfl; const int x2 = (int)ceil(u), y2 = (int)ceil(v); if ((x2 >= 0) && (y2 >= 0) && (x1 < src->x) && (y1 < src->y)) { - const float B[4] = {0,0,0,0}; + const float B[4] = {0, 0, 0, 0}; const int ox1 = (x1 < 0), oy1 = (y1 < 0), ox2 = (x2 >= src->x), oy2 = (y2 >= src->y); const float* c00 = (ox1 || oy1) ? B : &src->rect[(x1 + y1*src->x)*src->type]; const float* c10 = (ox2 || oy1) ? B : &src->rect[(x2 + y1*src->x)*src->type]; @@ -1226,7 +1226,7 @@ void qd_getPixelLerpChan(CompBuf* src, float u, float v, int chan, float* out) const int x2 = (int)ceil(u), y2 = (int)ceil(v); if (chan >= src->type) chan = 0; if ((x2 >= 0) && (y2 >= 0) && (x1 < src->x) && (y1 < src->y)) { - const float B[4] = {0,0,0,0}; + const float B[4] = {0, 0, 0, 0}; const int ox1 = (x1 < 0), oy1 = (y1 < 0), ox2 = (x2 >= src->x), oy2 = (y2 >= src->y); const float* c00 = (ox1 || oy1) ? B : &src->rect[(x1 + y1*src->x)*src->type + chan]; const float* c10 = (ox2 || oy1) ? B : &src->rect[(x2 + y1*src->x)*src->type + chan]; diff --git a/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c b/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c index f42fd83c13d..5b26927b694 100644 --- a/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c +++ b/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c @@ -96,7 +96,7 @@ The main change is an optional image input */ static void node_composit_exec_bilateralblur(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out) { NodeBilateralBlurData *nbbd= node->storage; - CompBuf *new, *source, *img= in[0]->data , *refimg= in[1]->data; + CompBuf *new, *source, *img= in[0]->data, *refimg= in[1]->data; double mean0, w, i2sigma_color, i2sigma_space; double mean1[4]; double weight_tab[8]; diff --git a/source/blender/nodes/composite/nodes/node_composite_blur.c b/source/blender/nodes/composite/nodes/node_composite_blur.c index 354bb458ea9..77b62938d94 100644 --- a/source/blender/nodes/composite/nodes/node_composite_blur.c +++ b/source/blender/nodes/composite/nodes/node_composite_blur.c @@ -605,36 +605,39 @@ static void node_composit_exec_blur(void *data, bNode *node, bNodeStack **in, bN out[0]->data= new; } else if (nbd->filtertype == R_FILTER_FAST_GAUSS) { - CompBuf *new, *img = in[0]->data; - // TODO: can this be mapped with reference, too? - const float sx = ((float)nbd->sizex*in[1]->vec[0])/2.0f, sy = ((float)nbd->sizey*in[1]->vec[0])/2.0f; - int c; + if (in[1]->vec[0] < 0.001f) { /* time node inputs can be a tiny value */ + new = pass_on_compbuf(img); + } + else { + // TODO: can this be mapped with reference, too? + const float sx = ((float)nbd->sizex*in[1]->vec[0])/2.0f, sy = ((float)nbd->sizey*in[1]->vec[0])/2.0f; + int c; - if ((img==NULL) || (out[0]->hasoutput==0)) return; + if ((img==NULL) || (out[0]->hasoutput==0)) return; - if (img->type == CB_VEC2) - new = typecheck_compbuf(img, CB_VAL); - else if (img->type == CB_VEC3) - new = typecheck_compbuf(img, CB_RGBA); - else - new = dupalloc_compbuf(img); + if (img->type == CB_VEC2) + new = typecheck_compbuf(img, CB_VAL); + else if (img->type == CB_VEC3) + new = typecheck_compbuf(img, CB_RGBA); + else + new = dupalloc_compbuf(img); - if ((sx == sy) && (sx > 0.f)) { - for (c=0; c<new->type; ++c) - IIR_gauss(new, sx, c, 3); - } - else { - if (sx > 0.f) { + if ((sx == sy) && (sx > 0.f)) { for (c=0; c<new->type; ++c) - IIR_gauss(new, sx, c, 1); + IIR_gauss(new, sx, c, 3); } - if (sy > 0.f) { - for (c=0; c<new->type; ++c) - IIR_gauss(new, sy, c, 2); + else { + if (sx > 0.f) { + for (c=0; c<new->type; ++c) + IIR_gauss(new, sx, c, 1); + } + if (sy > 0.f) { + for (c=0; c<new->type; ++c) + IIR_gauss(new, sy, c, 2); + } } } out[0]->data = new; - } else { /* All non fast gauss blur methods */ diff --git a/source/blender/nodes/composite/nodes/node_composite_channelMatte.c b/source/blender/nodes/composite/nodes/node_composite_channelMatte.c index b3690b5d20f..9e3aa9ee13f 100644 --- a/source/blender/nodes/composite/nodes/node_composite_channelMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_channelMatte.c @@ -35,20 +35,20 @@ /* ******************* Channel Matte Node ********************************* */ static bNodeSocketTemplate cmp_node_channel_matte_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_channel_matte_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; static void do_normalized_rgba_to_ycca2(bNode *UNUSED(node), float *out, float *in) { /*normalize to the range 0.0 to 1.0) */ - rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + rgb_to_ycc(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); out[0]=(out[0])/255.0f; out[1]=(out[1])/255.0f; out[2]=(out[2])/255.0f; @@ -61,7 +61,7 @@ static void do_normalized_ycca_to_rgba2(bNode *UNUSED(node), float *out, float * in[0]=in[0]*255.0f; in[1]=in[1]*255.0f; in[2]=in[2]*255.0f; - ycc_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + ycc_to_rgb(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); out[3]=in[3]; } @@ -81,15 +81,15 @@ static void do_channel_matte(bNode *node, float *out, float *in) case 1: { /* Alpha=G-MAX(R, B) */ switch (node->custom2) { case 1: { - alpha=in[0]-MAX2(in[1],in[2]); + alpha=in[0]-MAX2(in[1], in[2]); break; } case 2: { - alpha=in[1]-MAX2(in[0],in[2]); + alpha=in[1]-MAX2(in[0], in[2]); break; } case 3: { - alpha=in[2]-MAX2(in[0],in[1]); + alpha=in[2]-MAX2(in[0], in[1]); break; } default: diff --git a/source/blender/nodes/composite/nodes/node_composite_chromaMatte.c b/source/blender/nodes/composite/nodes/node_composite_chromaMatte.c index 2df8e1b6139..a7c0ae68271 100644 --- a/source/blender/nodes/composite/nodes/node_composite_chromaMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_chromaMatte.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,28 +26,28 @@ */ /** \file blender/nodes/composite/nodes/node_composite_chromaMatte.c - * \ingroup cmpnodes - */ +* \ingroup cmpnodes +*/ #include "node_composite_util.h" /* ******************* Chroma Key ********************************************************** */ static bNodeSocketTemplate cmp_node_chroma_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {SOCK_RGBA,1,"Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, "Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_chroma_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; static void do_rgba_to_ycca_normalized(bNode *UNUSED(node), float *out, float *in) { - rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + rgb_to_ycc(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); //normalize to 0..1.0 out[0]=out[0]/255.0f; @@ -59,9 +59,9 @@ static void do_rgba_to_ycca_normalized(bNode *UNUSED(node), float *out, float *i out[1]=(out[1]*2.0f)-1.0f; out[2]=(out[2]*2.0f)-1.0f; -// out[0]=((out[0])-16)/255.0; -// out[1]=((out[1])-128)/255.0; -// out[2]=((out[2])-128)/255.0; + // out[0]=((out[0])-16)/255.0; + // out[1]=((out[1])-128)/255.0; + // out[2]=((out[2])-128)/255.0; out[3]=in[3]; } @@ -77,9 +77,9 @@ static void do_ycca_to_rgba_normalized(bNode *UNUSED(node), float *out, float *i in[2]=(in[2]*255.0f); // in[0]=(in[0]*255.0)+16; -// in[1]=(in[1]*255.0)+128; -// in[2]=(in[2]*255.0)+128; - ycc_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); + // in[1]=(in[1]*255.0)+128; + // in[2]=(in[2]*255.0)+128; + ycc_to_rgb(in[0], in[1], in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601); out[3]=in[3]; } @@ -94,7 +94,7 @@ static void do_chroma_key(bNode *node, float *out, float *in) /* Algorithm from book "Video Demistified," does not include the spill reduction part */ - /* find theta, the angle that the color space should be rotated based on key*/ + /* find theta, the angle that the color space should be rotated based on key chroma values*/ theta=atan2(c->key[2], c->key[1]); /*rotate the cb and cr into x/z space */ @@ -107,20 +107,19 @@ static void do_chroma_key(bNode *node, float *out, float *in) /* if kfg is <0 then the pixel is outside of the key color */ kfg= x-(fabsf(z)/tanf(angle/2.0f)); - out[0]=in[0]; - out[1]=in[1]; - out[2]=in[2]; + copy_v3_v3(out, in); if (kfg>0.0f) { /* found a pixel that is within key color */ - alpha=(1.0f-kfg)*(c->fstrength); - - beta=atan2(z,x); + beta=atan2(z, x); angle2=c->t2; /* t2 is radians. */ /* if beta is within the cutoff angle */ if (fabsf(beta) < (angle2/2.0f)) { alpha=0.0; } + else { + alpha=1.0f-(kfg/c->fstrength); + } /* don't make something that was more transparent less transparent */ if (alpha<in[3]) { @@ -130,11 +129,8 @@ static void do_chroma_key(bNode *node, float *out, float *in) out[3]=in[3]; } } - else { /*pixel is outside key color */ - out[0]=in[0]; - out[1]=in[1]; - out[2]=in[2]; - out[3]=in[3]; /* make pixel just as transparent as it was before */ + else { /* make pixel just as transparent as it was before */ + out[3]=in[3]; } } @@ -143,32 +139,32 @@ static void node_composit_exec_chroma_matte(void *data, bNode *node, bNodeStack CompBuf *cbuf; CompBuf *chromabuf; NodeChroma *c; - + if (in[0]->hasinput==0) return; if (in[0]->data==NULL) return; if (out[0]->hasoutput==0 && out[1]->hasoutput==0) return; - + cbuf= typecheck_compbuf(in[0]->data, CB_RGBA); - + chromabuf= dupalloc_compbuf(cbuf); - + c=node->storage; - + /*convert rgbbuf to normalized chroma space*/ composit1_pixel_processor(node, chromabuf, cbuf, in[0]->vec, do_rgba_to_ycca_normalized, CB_RGBA); /*convert key to normalized chroma color space */ do_rgba_to_ycca_normalized(node, c->key, in[1]->vec); - + /*per pixel chroma key*/ composit1_pixel_processor(node, chromabuf, chromabuf, in[0]->vec, do_chroma_key, CB_RGBA); - + /*convert back*/ composit1_pixel_processor(node, chromabuf, chromabuf, in[0]->vec, do_ycca_to_rgba_normalized, CB_RGBA); - + out[0]->data= chromabuf; if (out[1]->hasoutput) out[1]->data= valbuf_from_rgbabuf(chromabuf, CHAN_A); - + generate_preview(data, node, chromabuf); if (cbuf!=in[0]->data) diff --git a/source/blender/nodes/composite/nodes/node_composite_colorMatte.c b/source/blender/nodes/composite/nodes/node_composite_colorMatte.c index 12b6e802555..d9f0c741738 100644 --- a/source/blender/nodes/composite/nodes/node_composite_colorMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_colorMatte.c @@ -34,15 +34,15 @@ /* ******************* Color Key ********************************************************** */ static bNodeSocketTemplate cmp_node_color_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {SOCK_RGBA,1,"Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, "Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_color_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; static void do_color_key(bNode *node, float *out, float *in) @@ -92,7 +92,7 @@ static void node_composit_exec_color_matte(void *data, bNode *node, bNodeStack * /*convert rgbbuf to hsv*/ composit1_pixel_processor(node, colorbuf, cbuf, in[0]->vec, do_rgba_to_hsva, CB_RGBA); - /*convert key to hsv*/ + /*convert key to hsv*/ do_rgba_to_hsva(node, c->key, in[1]->vec); diff --git a/source/blender/nodes/composite/nodes/node_composite_colorSpill.c b/source/blender/nodes/composite/nodes/node_composite_colorSpill.c index 0153a2bce34..81693c31d87 100644 --- a/source/blender/nodes/composite/nodes/node_composite_colorSpill.c +++ b/source/blender/nodes/composite/nodes/node_composite_colorSpill.c @@ -37,14 +37,14 @@ /* ******************* Color Spill Supression ********************************* */ static bNodeSocketTemplate cmp_node_color_spill_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, {SOCK_FLOAT, 1, "Fac", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_FACTOR}, - {-1,0,""} + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_color_spill_out[]={ - {SOCK_RGBA,0,"Image"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {-1, 0, ""} }; static void do_simple_spillmap_red(bNode *node, float* out, float *in) @@ -161,7 +161,7 @@ static void do_apply_spillmap_green(bNode *node, float* out, float *in, float *m out[0]=in[0]+(ncs->uspillr*map[0]); out[1]=in[1]-(ncs->uspillg*map[0]); out[2]=in[2]+(ncs->uspillb*map[0]); - } + } else { out[0]=in[0]; out[1]=in[1]; @@ -177,7 +177,7 @@ static void do_apply_spillmap_blue(bNode *node, float* out, float *in, float *ma out[0]=in[0]+(ncs->uspillr*map[0]); out[1]=in[1]+(ncs->uspillg*map[0]); out[2]=in[2]-(ncs->uspillb*map[0]); - } + } else { out[0]=in[0]; out[1]=in[1]; diff --git a/source/blender/nodes/composite/nodes/node_composite_colorbalance.c b/source/blender/nodes/composite/nodes/node_composite_colorbalance.c index f77e4cd9c4e..8dead1babdd 100644 --- a/source/blender/nodes/composite/nodes/node_composite_colorbalance.c +++ b/source/blender/nodes/composite/nodes/node_composite_colorbalance.c @@ -37,13 +37,13 @@ /* ******************* Color Balance ********************************* */ static bNodeSocketTemplate cmp_node_colorbalance_in[]={ {SOCK_FLOAT, 1, "Fac", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_FACTOR}, - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_colorbalance_out[]={ - {SOCK_RGBA,0,"Image"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {-1, 0, ""} }; /* this function implements ASC-CDL according to the spec at http://www.asctech.org/ diff --git a/source/blender/nodes/composite/nodes/node_composite_defocus.c b/source/blender/nodes/composite/nodes/node_composite_defocus.c index fc6e6847f34..72dec01066e 100644 --- a/source/blender/nodes/composite/nodes/node_composite_defocus.c +++ b/source/blender/nodes/composite/nodes/node_composite_defocus.c @@ -261,7 +261,7 @@ static void defocus_blur(bNode *node, CompBuf *new, CompBuf *img, CompBuf *zbuf, if (camob && camob->type==OB_CAMERA) { Camera* cam = (Camera*)camob->data; cam_lens = cam->lens; - cam_fdist = object_camera_dof_distance(camob); + cam_fdist = BKE_camera_object_dof_distance(camob); if (cam_fdist==0.0f) cam_fdist = 1e10f; /* if the dof is 0.0 then set it be be far away */ cam_invfdist = 1.f/cam_fdist; } diff --git a/source/blender/nodes/composite/nodes/node_composite_diffMatte.c b/source/blender/nodes/composite/nodes/node_composite_diffMatte.c index 027786d8b22..c7fbcb46c23 100644 --- a/source/blender/nodes/composite/nodes/node_composite_diffMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_diffMatte.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,62 +26,65 @@ */ /** \file blender/nodes/composite/nodes/node_composite_diffMatte.c - * \ingroup cmpnodes - */ +* \ingroup cmpnodes +*/ #include "node_composite_util.h" /* ******************* channel Difference Matte ********************************* */ static bNodeSocketTemplate cmp_node_diff_matte_in[]={ - {SOCK_RGBA,1,"Image 1", 1.0f, 1.0f, 1.0f, 1.0f}, - {SOCK_RGBA,1,"Image 2", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image 1", 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, "Image 2", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_diff_matte_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; static void do_diff_matte(bNode *node, float *outColor, float *inColor1, float *inColor2) { NodeChroma *c= (NodeChroma *)node->storage; float tolerence=c->t1; - float falloff=c->t2; + float fper=c->t2; + /* get falloff amount over tolerence size */ + float falloff=(1.0f-fper) * tolerence; float difference; float alpha; + float maxInputAlpha; + /* average together the distances */ difference= fabs(inColor2[0]-inColor1[0]) + - fabs(inColor2[1]-inColor1[1]) + - fabs(inColor2[2]-inColor1[2]); - - /*average together the distances*/ + fabs(inColor2[1]-inColor1[1]) + + fabs(inColor2[2]-inColor1[2]); difference=difference/3.0f; copy_v3_v3(outColor, inColor1); - /*make 100% transparent*/ - if (difference < tolerence) { - outColor[3]=0.0; - } - /*in the falloff region, make partially transparent */ - else if (difference < falloff+tolerence) { - difference=difference-tolerence; - alpha=difference/falloff; - /*only change if more transparent than before */ - if (alpha < inColor1[3]) { - outColor[3]=alpha; + if (difference <= tolerence) { + if (difference <= falloff) { + alpha = 0.0f; + } + else { + /* alpha as percent (distance / tolerance), each modified by falloff amount (in pixels)*/ + alpha=(difference-falloff)/(tolerence-falloff); + } + + /*only change if more transparent than either image */ + maxInputAlpha=maxf(inColor1[3], inColor2[3]); + if (alpha < maxInputAlpha) { + /*clamp*/ + if (alpha < 0.0f) alpha = 0.0f; + if (alpha > 1.0f) alpha = 1.0f; + outColor[3] = alpha; } else { /* leave as before */ - outColor[3]=inColor1[3]; + outColor[3]=maxInputAlpha; } } - else { - /*foreground object*/ - outColor[3]= inColor1[3]; - } } static void node_composit_exec_diff_matte(void *data, bNode *node, bNodeStack **in, bNodeStack **out) diff --git a/source/blender/nodes/composite/nodes/node_composite_directionalblur.c b/source/blender/nodes/composite/nodes/node_composite_directionalblur.c index f65b3312bea..49690499569 100644 --- a/source/blender/nodes/composite/nodes/node_composite_directionalblur.c +++ b/source/blender/nodes/composite/nodes/node_composite_directionalblur.c @@ -72,7 +72,7 @@ static CompBuf *dblur(bNode *node, CompBuf *img, int iterations, int wrap, const float cs= cosf(rot), ss= sinf(rot); const float isc= 1.f / (1.f + sc); unsigned int x, y; - float col[4]= {0,0,0,0}; + float col[4]= {0, 0, 0, 0}; for (y= 0; y < img->y; ++y) { const float v= isc * (y - center_y_pix) + ty; diff --git a/source/blender/nodes/composite/nodes/node_composite_distanceMatte.c b/source/blender/nodes/composite/nodes/node_composite_distanceMatte.c index 7aaaa7ed9b4..1976aa45eed 100644 --- a/source/blender/nodes/composite/nodes/node_composite_distanceMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_distanceMatte.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,23 +26,23 @@ */ /** \file blender/nodes/composite/nodes/node_composite_distanceMatte.c - * \ingroup cmpnodes - */ +* \ingroup cmpnodes +*/ #include "node_composite_util.h" /* ******************* channel Distance Matte ********************************* */ static bNodeSocketTemplate cmp_node_distance_matte_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {SOCK_RGBA,1,"Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, "Key Color", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_distance_matte_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; /* note, keyvals is passed on from caller as stack array */ @@ -51,34 +51,88 @@ static void do_distance_matte(bNode *node, float *out, float *in) { NodeChroma *c= (NodeChroma *)node->storage; float tolerence=c->t1; - float falloff=c->t2; + float fper=c->t2; + /* get falloff amount over tolerence size */ + float falloff=(1.0f-fper) * tolerence; float distance; float alpha; distance=sqrt((c->key[0]-in[0])*(c->key[0]-in[0]) + - (c->key[1]-in[1])*(c->key[1]-in[1]) + - (c->key[2]-in[2])*(c->key[2]-in[2])); + (c->key[1]-in[1])*(c->key[1]-in[1]) + + (c->key[2]-in[2])*(c->key[2]-in[2])); copy_v3_v3(out, in); - /*make 100% transparent */ - if (distance < tolerence) { - out[3]=0.0; - } - /*in the falloff region, make partially transparent */ - else if (distance < falloff+tolerence) { - distance=distance-tolerence; - alpha=distance/falloff; + if (distance <= tolerence) { + if (distance <= falloff) { + alpha = 0.0f; + } + else { + /* alpha as percent (distance / tolerance), each modified by falloff amount (in pixels)*/ + alpha=(distance-falloff)/(tolerence-falloff); + } + /*only change if more transparent than before */ if (alpha < in[3]) { + /*clamp*/ + if (alpha < 0.0f) alpha = 0.0f; + if (alpha > 1.0f) alpha = 1.0f; out[3]=alpha; } else { /* leave as before */ out[3]=in[3]; } } - else { - out[3]=in[3]; +} + +static void do_chroma_distance_matte(bNode *node, float *out, float *in) +{ + NodeChroma *c= (NodeChroma *)node->storage; + float tolerence=c->t1; + float fper=c->t2; + /* get falloff amount over tolerence size */ + float falloff=(1.0f-fper) * tolerence; + float y_key, cb_key, cr_key; + float y_pix, cb_pix, cr_pix; + float distance; + float alpha; + + /*convert key to chroma colorspace */ + rgb_to_ycc(c->key[0], c->key[1], c->key[2], &y_key, &cb_key, &cr_key, BLI_YCC_JFIF_0_255); + /* normalize the values */ + cb_key=cb_key/255.0f; + cr_key=cr_key/255.0f; + + /*convert pixel to chroma colorspace */ + rgb_to_ycc(in[0], in[1], in[2], &y_pix, &cb_pix, &cr_pix, BLI_YCC_JFIF_0_255); + /*normalize the values */ + cb_pix=cb_pix/255.0f; + cr_pix=cr_pix/255.0f; + + distance=sqrt((cb_key-cb_pix)*(cb_key-cb_pix) + + (cr_key-cr_pix)*(cr_key-cr_pix)); + + copy_v3_v3(out, in); + + if (distance <= tolerence) { + if (distance <= falloff) { + alpha = 0.0f; + } + else { + /* alpha as percent (distance / tolerance), each modified by falloff amount (in pixels)*/ + alpha=(distance-falloff)/(tolerence-falloff); + } + + /*only change if more transparent than before */ + if (alpha < in[3]) { + /*clamp*/ + if (alpha < 0.0f) alpha = 0.0f; + if (alpha > 1.0f) alpha = 1.0f; + out[3]=alpha; + } + else { /* leave as before */ + out[3]=in[3]; + } } } @@ -91,26 +145,34 @@ static void node_composit_exec_distance_matte(void *data, bNode *node, bNodeStac CompBuf *workbuf; CompBuf *inbuf; NodeChroma *c; - + /*is anything connected?*/ if (out[0]->hasoutput==0 && out[1]->hasoutput==0) return; /*must have an image imput*/ if (in[0]->data==NULL) return; - + inbuf=typecheck_compbuf(in[0]->data, CB_RGBA); - + c=node->storage; workbuf=dupalloc_compbuf(inbuf); - + /*use the input color*/ c->key[0]= in[1]->vec[0]; c->key[1]= in[1]->vec[1]; c->key[2]= in[1]->vec[2]; - - /* note, processor gets a keyvals array passed on as buffer constant */ - composit1_pixel_processor(node, workbuf, workbuf, in[0]->vec, do_distance_matte, CB_RGBA); - - + + /* work in RGB color space */ + if (c->channel == 1) { + /* note, processor gets a keyvals array passed on as buffer constant */ + composit1_pixel_processor(node, workbuf, workbuf, in[0]->vec, do_distance_matte, CB_RGBA); + } + /* work in YCbCr color space */ + else { + composit1_pixel_processor(node, workbuf, workbuf, in[0]->vec, do_chroma_distance_matte, CB_RGBA); + } + + + out[0]->data=workbuf; if (out[1]->hasoutput) out[1]->data=valbuf_from_rgbabuf(workbuf, CHAN_A); @@ -124,6 +186,7 @@ static void node_composit_init_distance_matte(bNodeTree *UNUSED(ntree), bNode* n { NodeChroma *c= MEM_callocN(sizeof(NodeChroma), "node chroma"); node->storage= c; + c->channel=1; c->t1= 0.1f; c->t2= 0.1f; } diff --git a/source/blender/nodes/composite/nodes/node_composite_doubleEdgeMask.c b/source/blender/nodes/composite/nodes/node_composite_doubleEdgeMask.c index 966d8f8a21a..6eb70636efa 100644 --- a/source/blender/nodes/composite/nodes/node_composite_doubleEdgeMask.c +++ b/source/blender/nodes/composite/nodes/node_composite_doubleEdgeMask.c @@ -786,7 +786,7 @@ static void do_allEdgeDetection(unsigned int t, unsigned int rw, unsigned int *l int pix_prevCol; // pix_prevCol = pixel one column behind the one we are testing in a loop int pix_nextCol; // pix_nextCol = pixel one column in front of the one we are testing in a loop /* Test all rows between the FIRST and LAST rows, excluding left and right edges */ - for (x= (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw,dx-=rw) { + for (x= (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw, dx-=rw) { a=x-2; pix_prevRow=a+rw; pix_nextRow=a-rw; @@ -848,7 +848,7 @@ static void do_adjacentEdgeDetection(unsigned int t, unsigned int rw, unsigned i int pix_prevCol; // pix_prevCol = pixel one column behind the one we are testing in a loop int pix_nextCol; // pix_nextCol = pixel one column in front of the one we are testing in a loop /* Test all rows between the FIRST and LAST rows, excluding left and right edges */ - for (x= (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw,dx-=rw) { + for (x= (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw, dx-=rw) { a=x-2; pix_prevRow=a+rw; pix_nextRow=a-rw; @@ -917,13 +917,13 @@ static void do_createEdgeLocationBuffer(unsigned int t, unsigned int rw, unsigne unsigned int outerAccum=0; // for looping outer edge pixel indexes, represents current position from offset unsigned int gradientAccum=0; // for looping gradient pixel indexes, represents current position from offset /* - * Here we compute the size of buffer needed to hold (row,col) coordinates + * Here we compute the size of buffer needed to hold (row, col) coordinates * for each pixel previously determined to be either gradient, inner edge, * or outer edge. * * Allocation is done by requesting 4 bytes "sizeof(int)" per pixel, even * though gbuf[] is declared as unsigned short* (2 bytes) because we don't - * store the pixel indexes, we only store x,y location of pixel in buffer. + * store the pixel indexes, we only store x, y location of pixel in buffer. * * This does make the assumption that x and y can fit in 16 unsigned bits * so if Blender starts doing renders greater than 65536 in either direction @@ -961,7 +961,7 @@ static void do_createEdgeLocationBuffer(unsigned int t, unsigned int rw, unsigne * gradientFillOffset (0 pixels) innerEdgeOffset (18 pixels) outerEdgeOffset (22 pixels) * / / / * / / / - * |X Y X Y X Y X Y > <X Y X Y > <X Y X Y X Y > <X Y X Y | <- (x,y) + * |X Y X Y X Y X Y > <X Y X Y > <X Y X Y X Y > <X Y X Y | <- (x, y) * +--------------------------------> <----------------> <------------------------> <----------------+ * |0 2 4 6 8 10 12 14 > ... <68 70 72 74 > ... <80 82 84 86 88 90 > ... <152 154 156 158 | <- bytes * +--------------------------------> <----------------> <------------------------> <----------------+ @@ -975,7 +975,7 @@ static void do_createEdgeLocationBuffer(unsigned int t, unsigned int rw, unsigne * Ultimately we do need the pixel's memory buffer index to set the output * pixel color, but it's faster to reconstruct the memory buffer location * each iteration of the final gradient calculation than it is to deconstruct - * a memory location into x,y pairs each round. + * a memory location into x, y pairs each round. */ @@ -987,7 +987,7 @@ static void do_createEdgeLocationBuffer(unsigned int t, unsigned int rw, unsigne innerAccum = *innerEdgeOffset; // section's offset so when we start filling, each outerAccum = *outerEdgeOffset; // section fills up it's allocated space in gbuf //uses dmin=row, rsl=col - for (x=0,dmin=0; x<t; x+=rw,dmin++) { + for (x=0, dmin=0; x<t; x+=rw, dmin++) { for (rsl=0; rsl<rw; rsl++) { a=x+rsl; if (lres[a]==2) { // it is a gradient pixel flagged by 2 @@ -1222,29 +1222,29 @@ static void node_composit_exec_doubleedgemask(void *UNUSED(data), bNode *node, b */ if (node->custom2) { // if "adjacent only" inner edge mode is turned on if (node->custom1) { // if "keep inside" buffer edge mode is turned on - do_adjacentKeepBorders(t,rw,limask,lomask,lres,res,rsize); + do_adjacentKeepBorders(t, rw, limask, lomask, lres, res, rsize); } else { // "bleed out" buffer edge mode is turned on - do_adjacentBleedBorders(t,rw,limask,lomask,lres,res,rsize); + do_adjacentBleedBorders(t, rw, limask, lomask, lres, res, rsize); } isz=rsize[0]; // set up inner edge, outer edge, and gradient buffer sizes after border pass osz=rsize[1]; gsz=rsize[2]; // detect edges in all non-border pixels in the buffer - do_adjacentEdgeDetection(t,rw,limask,lomask,lres,res,rsize,isz,osz,gsz); + do_adjacentEdgeDetection(t, rw, limask, lomask, lres, res, rsize, isz, osz, gsz); } else { // "all" inner edge mode is turned on if (node->custom1) { // if "keep inside" buffer edge mode is turned on - do_allKeepBorders(t,rw,limask,lomask,lres,res,rsize); + do_allKeepBorders(t, rw, limask, lomask, lres, res, rsize); } else { // "bleed out" buffer edge mode is turned on - do_allBleedBorders(t,rw,limask,lomask,lres,res,rsize); + do_allBleedBorders(t, rw, limask, lomask, lres, res, rsize); } isz=rsize[0]; // set up inner edge, outer edge, and gradient buffer sizes after border pass osz=rsize[1]; gsz=rsize[2]; // detect edges in all non-border pixels in the buffer - do_allEdgeDetection(t,rw,limask,lomask,lres,res,rsize,isz,osz,gsz); + do_allEdgeDetection(t, rw, limask, lomask, lres, res, rsize, isz, osz, gsz); } isz=rsize[0]; // set edge and gradient buffer sizes once again... @@ -1263,8 +1263,8 @@ static void node_composit_exec_doubleedgemask(void *UNUSED(data), bNode *node, b fsz=gsz+isz+osz; // calculate size of pixel index buffer needed gbuf= MEM_mallocN(fsz*sizeof(int), "grd buf"); // allocate edge/gradient pixel index buffer - do_createEdgeLocationBuffer(t,rw,lres,res,gbuf,&innerEdgeOffset,&outerEdgeOffset,isz,gsz); - do_fillGradientBuffer(rw,res,gbuf,isz,osz,gsz,innerEdgeOffset,outerEdgeOffset); + do_createEdgeLocationBuffer(t, rw, lres, res, gbuf, &innerEdgeOffset, &outerEdgeOffset, isz, gsz); + do_fillGradientBuffer(rw, res, gbuf, isz, osz, gsz, innerEdgeOffset, outerEdgeOffset); MEM_freeN(gbuf); // free the gradient index buffer out[0]->data= stackbuf; // point the node output buffer to our filled buffer diff --git a/source/blender/nodes/composite/nodes/node_composite_filter.c b/source/blender/nodes/composite/nodes/node_composite_filter.c index d6cb54eb944..5adabecba08 100644 --- a/source/blender/nodes/composite/nodes/node_composite_filter.c +++ b/source/blender/nodes/composite/nodes/node_composite_filter.c @@ -168,12 +168,12 @@ static void do_filter3(CompBuf *out, CompBuf *in, float *filter, float fac) static void node_composit_exec_filter(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { static float soft[9]= {1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f}; - float sharp[9]= {-1,-1,-1,-1,9,-1,-1,-1,-1}; + float sharp[9]= {-1, -1, -1, -1, 9, -1, -1, -1, -1}; float laplace[9]= {-1/8.0f, -1/8.0f, -1/8.0f, -1/8.0f, 1.0f, -1/8.0f, -1/8.0f, -1/8.0f, -1/8.0f}; - float sobel[9]= {1,2,1,0,0,0,-1,-2,-1}; - float prewitt[9]= {1,1,1,0,0,0,-1,-1,-1}; - float kirsch[9]= {5,5,5,-3,-3,-3,-2,-2,-2}; - float shadow[9]= {1,2,1,0,1,0,-1,-2,-1}; + float sobel[9]= {1, 2, 1, 0, 0, 0, -1, -2, -1}; + float prewitt[9]= {1, 1, 1, 0, 0, 0, -1, -1, -1}; + float kirsch[9]= {5, 5, 5, -3, -3, -3, -2, -2, -2}; + float shadow[9]= {1, 2, 1, 0, 1, 0, -1, -2, -1}; if (out[0]->hasoutput==0) return; diff --git a/source/blender/nodes/composite/nodes/node_composite_gamma.c b/source/blender/nodes/composite/nodes/node_composite_gamma.c index ae793b44f2c..2ee94224e4b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_gamma.c +++ b/source/blender/nodes/composite/nodes/node_composite_gamma.c @@ -50,7 +50,7 @@ static void do_gamma(bNode *UNUSED(node), float *out, float *in, float *fac) int i=0; for (i=0; i<3; i++) { /* check for negative to avoid nan's */ - out[i] = (in[i] > 0.0f)? powf(in[i],fac[0]): in[i]; + out[i] = (in[i] > 0.0f)? powf(in[i], fac[0]): in[i]; } out[3] = in[3]; } diff --git a/source/blender/nodes/composite/nodes/node_composite_glare.c b/source/blender/nodes/composite/nodes/node_composite_glare.c index 42760ddfc4e..7484ae266fc 100644 --- a/source/blender/nodes/composite/nodes/node_composite_glare.c +++ b/source/blender/nodes/composite/nodes/node_composite_glare.c @@ -124,7 +124,7 @@ static CompBuf* BTP(CompBuf* src, float threshold, int scaledown) static void star4(NodeGlare* ndg, CompBuf* dst, CompBuf* src) { int x, y, i, xm, xp, ym, yp; - float c[4] = {0,0,0,0}, tc[4] = {0,0,0,0}; + float c[4] = {0, 0, 0, 0}, tc[4] = {0, 0, 0, 0}; CompBuf *tbuf1, *tbuf2, *tsrc; const float f1 = 1.f - ndg->fade, f2 = (1.f - f1)*0.5f; //const float t3 = ndg->threshold*3.f; diff --git a/source/blender/nodes/composite/nodes/node_composite_hueSatVal.c b/source/blender/nodes/composite/nodes/node_composite_hueSatVal.c index 7349d1dd4bf..7089983fdbc 100644 --- a/source/blender/nodes/composite/nodes/node_composite_hueSatVal.c +++ b/source/blender/nodes/composite/nodes/node_composite_hueSatVal.c @@ -81,7 +81,7 @@ static void node_composit_exec_hue_sat(void *UNUSED(data), bNode *node, bNodeSta else { /* make output size of input image */ CompBuf *cbuf= dupalloc_compbuf(in[1]->data); - CompBuf *stackbuf=typecheck_compbuf(cbuf,CB_RGBA); + CompBuf *stackbuf=typecheck_compbuf(cbuf, CB_RGBA); composit2_pixel_processor(node, stackbuf, stackbuf, in[1]->vec, in[0]->data, in[0]->vec, do_hue_sat_fac, CB_RGBA, CB_VAL); diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index 62179cfa471..1789710b096 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -313,7 +313,7 @@ float *node_composit_get_float_buffer(RenderData *rd, ImBuf *ibuf, int *alloc) } /* note: this function is used for multilayer too, to ensure uniform - handling with BKE_image_get_ibuf() */ + * handling with BKE_image_get_ibuf() */ static CompBuf *node_composit_get_image(RenderData *rd, Image *ima, ImageUser *iuser) { ImBuf *ibuf; diff --git a/source/blender/nodes/composite/nodes/node_composite_levels.c b/source/blender/nodes/composite/nodes/node_composite_levels.c index 32b07582140..9888966c46a 100644 --- a/source/blender/nodes/composite/nodes/node_composite_levels.c +++ b/source/blender/nodes/composite/nodes/node_composite_levels.c @@ -40,9 +40,9 @@ static bNodeSocketTemplate cmp_node_view_levels_in[]= { }; static bNodeSocketTemplate cmp_node_view_levels_out[]={ - {SOCK_FLOAT, 0,"Mean"}, - {SOCK_FLOAT, 0,"Std Dev"}, - {-1,0,""} + {SOCK_FLOAT, 0, "Mean"}, + {SOCK_FLOAT, 0, "Std Dev"}, + {-1, 0, ""} }; static void rgb_tobw(float r, float g, float b, float* out) @@ -54,7 +54,7 @@ static void fill_bins(bNode* node, CompBuf* in, int* bins) { float value[4]; int ivalue=0; - int x,y; + int x, y; /*fill bins */ for (y=0; y<in->y; y++) { @@ -66,7 +66,7 @@ static void fill_bins(bNode* node, CompBuf* in, int* bins) if (value[3] > 0.0f) { /* don't count transparent pixels */ switch (node->custom1) { case 1: { /* all colors */ - rgb_tobw(value[0],value[1],value[2], &value[0]); + rgb_tobw(value[0], value[1], value[2], &value[0]); value[0]=value[0]*255; /* scale to 0-255 range */ ivalue=(int)value[0]; break; @@ -89,7 +89,7 @@ static void fill_bins(bNode* node, CompBuf* in, int* bins) } case 5: /* luminence */ { - rgb_to_yuv(value[0],value[1],value[2], &value[0], &value[1], &value[2]); + rgb_to_yuv(value[0], value[1], value[2], &value[0], &value[1], &value[2]); value[0]=value[0]*255; /* scale to 0-255 range */ ivalue=(int)value[0]; break; @@ -111,7 +111,7 @@ static float brightness_mean(bNode* node, CompBuf* in) { float sum=0.0; int numPixels=0.0; - int x,y; + int x, y; float value[4]; for (x=0; x< in->x; x++) { @@ -125,7 +125,7 @@ static float brightness_mean(bNode* node, CompBuf* in) switch (node->custom1) { case 1: { - rgb_tobw(value[0],value[1],value[2], &value[0]); + rgb_tobw(value[0], value[1], value[2], &value[0]); sum+=value[0]; break; } @@ -146,7 +146,7 @@ static float brightness_mean(bNode* node, CompBuf* in) } case 5: { - rgb_to_yuv(value[0],value[1],value[2], &value[0], &value[1], &value[2]); + rgb_to_yuv(value[0], value[1], value[2], &value[0], &value[1], &value[2]); sum+=value[0]; break; } @@ -162,7 +162,7 @@ static float brightness_standard_deviation(bNode* node, CompBuf* in, float mean) { float sum=0.0; int numPixels=0.0; - int x,y; + int x, y; float value[4]; for (x=0; x< in->x; x++) { @@ -176,7 +176,7 @@ static float brightness_standard_deviation(bNode* node, CompBuf* in, float mean) switch (node->custom1) { case 1: { - rgb_tobw(value[0],value[1],value[2], &value[0]); + rgb_tobw(value[0], value[1], value[2], &value[0]); sum+=(value[0]-mean)*(value[0]-mean); break; } @@ -200,7 +200,7 @@ static float brightness_standard_deviation(bNode* node, CompBuf* in, float mean) } case 5: { - rgb_to_yuv(value[0],value[1],value[2], &value[0], &value[1], &value[2]); + rgb_to_yuv(value[0], value[1], value[2], &value[0], &value[1], &value[2]); sum+=(value[0]-mean)*(value[0]-mean); break; } @@ -215,7 +215,7 @@ static float brightness_standard_deviation(bNode* node, CompBuf* in, float mean) static void draw_histogram(bNode *node, CompBuf *out, int* bins) { - int x,y; + int x, y; float color[4]; float value; int max; diff --git a/source/blender/nodes/composite/nodes/node_composite_lummaMatte.c b/source/blender/nodes/composite/nodes/node_composite_lummaMatte.c index 85c291fd9ec..1518284e015 100644 --- a/source/blender/nodes/composite/nodes/node_composite_lummaMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_lummaMatte.c @@ -35,14 +35,14 @@ /* ******************* Luma Matte Node ********************************* */ static bNodeSocketTemplate cmp_node_luma_matte_in[]={ - {SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f}, - {-1,0,""} + {SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f}, + {-1, 0, ""} }; static bNodeSocketTemplate cmp_node_luma_matte_out[]={ - {SOCK_RGBA,0,"Image"}, - {SOCK_FLOAT,0,"Matte"}, - {-1,0,""} + {SOCK_RGBA, 0, "Image"}, + {SOCK_FLOAT, 0, "Matte"}, + {-1, 0, ""} }; static void do_luma_matte(bNode *node, float *out, float *in) diff --git a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c index f6ffc783b08..7a28eabec34 100644 --- a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c +++ b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c @@ -76,9 +76,9 @@ static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out) node->storage = BKE_tracking_distortion_create(); if (node->custom1 == 0) - obuf= BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 1); + obuf = BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 1); else - obuf= BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 0); + obuf = BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 0); stackbuf->rect = obuf->rect_float; stackbuf->malloc = TRUE; @@ -118,7 +118,7 @@ static void storage_free(bNode *node) if (node->storage) BKE_tracking_distortion_destroy(node->storage); - node->storage= NULL; + node->storage = NULL; } static void storage_copy(bNode *orig_node, bNode *new_node) diff --git a/source/blender/nodes/composite/nodes/node_composite_outputFile.c b/source/blender/nodes/composite/nodes/node_composite_outputFile.c index 2eb68c787fb..f89dcf63f64 100644 --- a/source/blender/nodes/composite/nodes/node_composite_outputFile.c +++ b/source/blender/nodes/composite/nodes/node_composite_outputFile.c @@ -48,12 +48,13 @@ bNodeSocket *ntreeCompositOutputFileAddSocket(bNodeTree *ntree, bNode *node, const char *name, ImageFormatData *im_format) { NodeImageMultiFile *nimf = node->storage; - bNodeSocket *sock = nodeAddSocket(ntree, node, SOCK_IN, name, SOCK_RGBA); + bNodeSocket *sock = nodeAddSocket(ntree, node, SOCK_IN, "", SOCK_RGBA); /* create format data for the input socket */ NodeImageMultiFileSocket *sockdata = MEM_callocN(sizeof(NodeImageMultiFileSocket), "socket image format"); sock->storage = sockdata; - sock->struct_type = SOCK_STRUCT_OUTPUT_FILE; + + BLI_strncpy(sockdata->path, name, sizeof(sockdata->path)); if (im_format) { sockdata->format= *im_format; @@ -188,7 +189,7 @@ static void exec_output_file_singlelayer(RenderData *rd, bNode *node, bNodeStack ibuf->profile = IB_PROFILE_LINEAR_RGB; /* get full path */ - BLI_join_dirfile(path, FILE_MAX, nimf->base_path, sock->name); + BLI_join_dirfile(path, FILE_MAX, nimf->base_path, sockdata->path); BKE_makepicstring(filename, path, bmain->name, rd->cfra, format->imtype, (rd->scemode & R_EXTENSION), TRUE); if (0 == BKE_write_ibuf(ibuf, filename, format)) @@ -229,6 +230,7 @@ static void exec_output_file_multilayer(RenderData *rd, bNode *node, bNodeStack for (sock=node->inputs.first, i=0; sock; sock=sock->next, ++i) { if (in[i]->data) { + NodeImageMultiFileSocket *sockdata = sock->storage; CompBuf *cbuf = in[i]->data; char layname[EXR_LAY_MAXNAME]; char channelname[EXR_PASS_MAXNAME]; @@ -247,8 +249,8 @@ static void exec_output_file_multilayer(RenderData *rd, bNode *node, bNodeStack continue; } - BLI_strncpy(layname, sock->name, sizeof(layname)); - BLI_strncpy(channelname, sock->name, sizeof(channelname)-2); + BLI_strncpy(layname, sockdata->path, sizeof(layname)); + BLI_strncpy(channelname, sockdata->path, sizeof(channelname)-2); channelname_ext = channelname + strlen(channelname); /* create channels */ diff --git a/source/blender/nodes/composite/nodes/node_composite_sepcombHSVA.c b/source/blender/nodes/composite/nodes/node_composite_sepcombHSVA.c index 6dac2d16401..a30342ee28d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_sepcombHSVA.c +++ b/source/blender/nodes/composite/nodes/node_composite_sepcombHSVA.c @@ -113,21 +113,21 @@ void register_node_type_cmp_sephsva(bNodeTreeType *ttype) /* **************** COMBINE HSVA ******************** */ -static bNodeSocketTemplate cmp_node_combhsva_in[]= { - { SOCK_FLOAT, 1, "H", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, - { SOCK_FLOAT, 1, "S", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, - { SOCK_FLOAT, 1, "V", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, - { SOCK_FLOAT, 1, "A", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, - { -1, 0, "" } +static bNodeSocketTemplate cmp_node_combhsva_in[] = { + { SOCK_FLOAT, 1, "H", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, + { SOCK_FLOAT, 1, "S", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, + { SOCK_FLOAT, 1, "V", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, + { SOCK_FLOAT, 1, "A", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, + { -1, 0, "" } }; static bNodeSocketTemplate cmp_node_combhsva_out[]= { - { SOCK_RGBA, 0, "Image"}, - { -1, 0, "" } + { SOCK_RGBA, 0, "Image"}, + { -1, 0, "" } }; static void do_comb_hsva(bNode *UNUSED(node), float *out, float *in1, float *in2, float *in3, float *in4) { - float r,g,b; + float r, g, b; hsv_to_rgb(in1[0], in2[0], in3[0], &r, &g, &b); out[0] = r; diff --git a/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c b/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c index 6eff3dcd95b..7f3b8a31a4b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c +++ b/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c @@ -175,7 +175,7 @@ static bNodeSocketTemplate cmp_node_combycca_out[]= { static void do_comb_ycca_601(bNode *UNUSED(node), float *out, float *in1, float *in2, float *in3, float *in4) { - float r,g,b; + float r, g, b; float y, cb, cr; /*need to un-normalize the data*/ @@ -183,7 +183,7 @@ static void do_comb_ycca_601(bNode *UNUSED(node), float *out, float *in1, float cb=in2[0]*255; cr=in3[0]*255; - ycc_to_rgb(y,cb,cr, &r, &g, &b, BLI_YCC_ITU_BT601); + ycc_to_rgb(y, cb, cr, &r, &g, &b, BLI_YCC_ITU_BT601); out[0] = r; out[1] = g; @@ -193,7 +193,7 @@ static void do_comb_ycca_601(bNode *UNUSED(node), float *out, float *in1, float static void do_comb_ycca_709(bNode *UNUSED(node), float *out, float *in1, float *in2, float *in3, float *in4) { - float r,g,b; + float r, g, b; float y, cb, cr; /*need to un-normalize the data*/ @@ -201,7 +201,7 @@ static void do_comb_ycca_709(bNode *UNUSED(node), float *out, float *in1, float cb=in2[0]*255; cr=in3[0]*255; - ycc_to_rgb(y,cb,cr, &r, &g, &b, BLI_YCC_ITU_BT709); + ycc_to_rgb(y, cb, cr, &r, &g, &b, BLI_YCC_ITU_BT709); out[0] = r; out[1] = g; @@ -211,7 +211,7 @@ static void do_comb_ycca_709(bNode *UNUSED(node), float *out, float *in1, float static void do_comb_ycca_jfif(bNode *UNUSED(node), float *out, float *in1, float *in2, float *in3, float *in4) { - float r,g,b; + float r, g, b; float y, cb, cr; /*need to un-normalize the data*/ @@ -219,7 +219,7 @@ static void do_comb_ycca_jfif(bNode *UNUSED(node), float *out, float *in1, float cb=in2[0]*255; cr=in3[0]*255; - ycc_to_rgb(y,cb,cr, &r, &g, &b, BLI_YCC_JFIF_0_255); + ycc_to_rgb(y, cb, cr, &r, &g, &b, BLI_YCC_JFIF_0_255); out[0] = r; out[1] = g; diff --git a/source/blender/nodes/composite/nodes/node_composite_sepcombYUVA.c b/source/blender/nodes/composite/nodes/node_composite_sepcombYUVA.c index 8dd551643f5..57fcf3af046 100644 --- a/source/blender/nodes/composite/nodes/node_composite_sepcombYUVA.c +++ b/source/blender/nodes/composite/nodes/node_composite_sepcombYUVA.c @@ -128,7 +128,7 @@ static bNodeSocketTemplate cmp_node_combyuva_out[]= { static void do_comb_yuva(bNode *UNUSED(node), float *out, float *in1, float *in2, float *in3, float *in4) { - float r,g,b; + float r, g, b; yuv_to_rgb(in1[0], in2[0], in3[0], &r, &g, &b); out[0] = r; diff --git a/source/blender/nodes/composite/nodes/node_composite_texture.c b/source/blender/nodes/composite/nodes/node_composite_texture.c index 562e2b2737e..0b521fac3e1 100644 --- a/source/blender/nodes/composite/nodes/node_composite_texture.c +++ b/source/blender/nodes/composite/nodes/node_composite_texture.c @@ -40,7 +40,7 @@ static bNodeSocketTemplate cmp_node_texture_in[]= { }; static bNodeSocketTemplate cmp_node_texture_out[]= { { SOCK_FLOAT, 0, "Value"}, - { SOCK_RGBA , 0, "Color"}, + { SOCK_RGBA, 0, "Color"}, { -1, 0, "" } }; diff --git a/source/blender/nodes/composite/nodes/node_composite_tonemap.c b/source/blender/nodes/composite/nodes/node_composite_tonemap.c index 0696c2ba848..eae81a4bbd2 100644 --- a/source/blender/nodes/composite/nodes/node_composite_tonemap.c +++ b/source/blender/nodes/composite/nodes/node_composite_tonemap.c @@ -94,7 +94,7 @@ static void tonemap(NodeTonemap* ntm, CompBuf* dst, CompBuf* src) I_l = sp[x][1] + ic*(L - sp[x][1]); I_g = Cav[1] + ic*(Lav - Cav[1]); I_a = I_l + ia*(I_g - I_l); - dp[x][1] /= (dp[x][1] + pow((double)f*I_a,(double)m)); + dp[x][1] /= (dp[x][1] + pow((double)f*I_a, (double)m)); I_l = sp[x][2] + ic*(L - sp[x][2]); I_g = Cav[2] + ic*(Lav - Cav[2]); I_a = I_l + ia*(I_g - I_l); diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c index 362ed59a38e..3aadcef4c82 100644 --- a/source/blender/nodes/intern/node_common.c +++ b/source/blender/nodes/intern/node_common.c @@ -130,7 +130,7 @@ bNode *node_group_make_from_selected(bNodeTree *ntree) /* no groups in groups */ if (node->type==NODE_GROUP) return NULL; - DO_MINMAX2( (&node->locx), min, max); + DO_MINMAX2((&node->locx), min, max); totnode++; } node->done= 0; @@ -551,7 +551,8 @@ static bNodeSocket *group_verify_socket(bNodeTree *ntree, ListBase *lb, int in_o sock->groupsock = gsock; BLI_strncpy(sock->name, gsock->name, sizeof(sock->name)); - sock->type= gsock->type; + if(gsock->type != sock->type) + nodeSocketSetType(sock, gsock->type); /* XXX hack: group socket input/output roles are inverted internally, * need to change the limit value when making actual node sockets from them. diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c index 94b9d364418..b5400244efe 100644 --- a/source/blender/nodes/intern/node_socket.c +++ b/source/blender/nodes/intern/node_socket.c @@ -59,7 +59,7 @@ static bNodeSocketType node_socket_type_float = { /* ui_name */ "Float", /* ui_description */ "Floating Point", /* ui_icon */ 0, - /* ui_color */ {160,160,160,255}, + /* ui_color */ {160, 160, 160, 255}, /* value_structname */ "bNodeSocketValueFloat", /* value_structsize */ sizeof(bNodeSocketValueFloat), @@ -74,7 +74,7 @@ static bNodeSocketType node_socket_type_vector = { /* ui_name */ "Vector", /* ui_description */ "3-dimensional floating point vector", /* ui_icon */ 0, - /* ui_color */ {100,100,200,255}, + /* ui_color */ {100, 100, 200, 255}, /* value_structname */ "bNodeSocketValueVector", /* value_structsize */ sizeof(bNodeSocketValueVector), @@ -89,7 +89,7 @@ static bNodeSocketType node_socket_type_rgba = { /* ui_name */ "RGBA", /* ui_description */ "RGBA color", /* ui_icon */ 0, - /* ui_color */ {200,200,40,255}, + /* ui_color */ {200, 200, 40, 255}, /* value_structname */ "bNodeSocketValueRGBA", /* value_structsize */ sizeof(bNodeSocketValueRGBA), @@ -104,7 +104,7 @@ static bNodeSocketType node_socket_type_int = { /* ui_name */ "Int", /* ui_description */ "Integer", /* ui_icon */ 0, - /* ui_color */ {17,133,37,255}, + /* ui_color */ {17, 133, 37, 255}, /* value_structname */ "bNodeSocketValueInt", /* value_structsize */ sizeof(bNodeSocketValueInt), @@ -119,7 +119,7 @@ static bNodeSocketType node_socket_type_boolean = { /* ui_name */ "Boolean", /* ui_description */ "Boolean", /* ui_icon */ 0, - /* ui_color */ {158,139,63,255}, + /* ui_color */ {158, 139, 63, 255}, /* value_structname */ "bNodeSocketValueBoolean", /* value_structsize */ sizeof(bNodeSocketValueBoolean), @@ -134,7 +134,7 @@ static bNodeSocketType node_socket_type_shader = { /* ui_name */ "Shader", /* ui_description */ "Shader", /* ui_icon */ 0, - /* ui_color */ {100,200,100,255}, + /* ui_color */ {100, 200, 100, 255}, /* value_structname */ NULL, /* value_structsize */ 0, @@ -149,7 +149,7 @@ static bNodeSocketType node_socket_type_mesh = { /* ui_name */ "Mesh", /* ui_description */ "Mesh geometry data", /* ui_icon */ 0, - /* ui_color */ {255,133,7,255}, + /* ui_color */ {255, 133, 7, 255}, /* value_structname */ NULL, /* value_structsize */ 0, diff --git a/source/blender/nodes/shader/nodes/node_shader_common.c b/source/blender/nodes/shader/nodes/node_shader_common.c index f75cecfe83b..df369482a2e 100644 --- a/source/blender/nodes/shader/nodes/node_shader_common.c +++ b/source/blender/nodes/shader/nodes/node_shader_common.c @@ -73,6 +73,9 @@ static void *group_initexec(bNode *node) bNodeTree *ngroup= (bNodeTree*)node->id; bNodeTreeExec *exec; + if (!ngroup) + return NULL; + /* initialize the internal node tree execution */ exec = ntreeShaderBeginExecTree(ngroup, 0); @@ -121,6 +124,9 @@ static void group_execute(void *data, int thread, struct bNode *node, void *node bNodeTreeExec *exec= (bNodeTreeExec*)nodedata; bNodeThreadStack *nts; + if (!exec) + return; + /* XXX same behavior as trunk: all nodes inside group are executed. * it's stupid, but just makes it work. compo redesign will do this better. */ diff --git a/source/blender/nodes/shader/nodes/node_shader_light_path.c b/source/blender/nodes/shader/nodes/node_shader_light_path.c index 5d7a3014682..5ebbd63a5a1 100644 --- a/source/blender/nodes/shader/nodes/node_shader_light_path.c +++ b/source/blender/nodes/shader/nodes/node_shader_light_path.c @@ -37,6 +37,7 @@ static bNodeSocketTemplate sh_node_light_path_out[]= { { SOCK_FLOAT, 0, "Is Singular Ray", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_FLOAT, 0, "Is Reflection Ray", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_FLOAT, 0, "Is Transmission Ray", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, + { SOCK_FLOAT, 0, "Ray Length", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { -1, 0, "" } }; diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_coord.c b/source/blender/nodes/shader/nodes/node_shader_tex_coord.c index 8f67fb585c9..aa8b7070cab 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_coord.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_coord.c @@ -33,6 +33,7 @@ static bNodeSocketTemplate sh_node_tex_coord_out[]= { { SOCK_VECTOR, 0, "Generated", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, + { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_VECTOR, 0, "UV", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_VECTOR, 0, "Object", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_VECTOR, 0, "Camera", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, @@ -48,7 +49,7 @@ static int node_shader_gpu_tex_coord(GPUMaterial *mat, bNode *UNUSED(node), GPUN return GPU_stack_link(mat, "node_tex_coord", in, out, GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL), - GPU_builtin(GPU_INVERSE_VIEW_MATRIX), orco, mtface); + GPU_builtin(GPU_INVERSE_VIEW_MATRIX), GPU_builtin(GPU_INVERSE_OBJECT_MATRIX), orco, mtface); } /* node type definition */ diff --git a/source/blender/nodes/shader/nodes/node_shader_texture.c b/source/blender/nodes/shader/nodes/node_shader_texture.c index 8b6386fe2f6..7d3e532be0b 100644 --- a/source/blender/nodes/shader/nodes/node_shader_texture.c +++ b/source/blender/nodes/shader/nodes/node_shader_texture.c @@ -41,7 +41,7 @@ static bNodeSocketTemplate sh_node_texture_in[]= { }; static bNodeSocketTemplate sh_node_texture_out[]= { { SOCK_FLOAT, 0, "Value"}, - { SOCK_RGBA , 0, "Color"}, + { SOCK_RGBA, 0, "Color"}, { SOCK_VECTOR, 0, "Normal"}, { -1, 0, "" } }; diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c index 7e513135203..0e58fed4357 100644 --- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c +++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c @@ -90,12 +90,12 @@ void register_node_type_sh_valtorgb(bNodeTreeType *ttype) /* **************** RGBTOBW ******************** */ static bNodeSocketTemplate sh_node_rgbtobw_in[]= { - { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f}, - { -1, 0, "" } + { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f}, + { -1, 0, "" } }; static bNodeSocketTemplate sh_node_rgbtobw_out[]= { - { SOCK_FLOAT, 0, "Val", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, - { -1, 0, "" } + { SOCK_FLOAT, 0, "Val", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, + { -1, 0, "" } }; diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c index a0fe67d591d..73b0582490d 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c +++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c @@ -73,7 +73,7 @@ static void node_shader_exec_vect_math(void *UNUSED(data), bNode *node, bNodeSta out[0]->vec[1]= vec1[1] + vec2[1]; out[0]->vec[2]= vec1[2] + vec2[2]; - out[1]->vec[0] = normalize_v3( out[0]->vec ); + out[1]->vec[0] = normalize_v3(out[0]->vec ); } else if (node->custom1 == 3) { /* Dot product */ out[1]->vec[0]= (vec1[0] * vec2[0]) + (vec1[1] * vec2[1]) + (vec1[2] * vec2[2]); @@ -83,7 +83,7 @@ static void node_shader_exec_vect_math(void *UNUSED(data), bNode *node, bNodeSta out[0]->vec[1]= (vec1[2] * vec2[0]) - (vec1[0] * vec2[2]); out[0]->vec[2]= (vec1[0] * vec2[1]) - (vec1[1] * vec2[0]); - out[1]->vec[0] = normalize_v3( out[0]->vec ); + out[1]->vec[0] = normalize_v3(out[0]->vec ); } else if (node->custom1 == 5) { /* Normalize */ if (in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */ @@ -97,7 +97,7 @@ static void node_shader_exec_vect_math(void *UNUSED(data), bNode *node, bNodeSta out[0]->vec[2]= vec2[2]; } - out[1]->vec[0] = normalize_v3( out[0]->vec ); + out[1]->vec[0] = normalize_v3(out[0]->vec ); } } diff --git a/source/blender/nodes/texture/nodes/node_texture_bricks.c b/source/blender/nodes/texture/nodes/node_texture_bricks.c index ac8799762bd..fbf04715020 100644 --- a/source/blender/nodes/texture/nodes/node_texture_bricks.c +++ b/source/blender/nodes/texture/nodes/node_texture_bricks.c @@ -102,16 +102,17 @@ static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor ins_y = y - row_height*rownum; tint = noise((rownum << 16) + (bricknum & 0xFFFF)) + bias; - CLAMP(tint,0.0f,1.0f); + CLAMP(tint, 0.0f, 1.0f); - if ( ins_x < mortar_thickness || ins_y < mortar_thickness || - ins_x > (brick_width - mortar_thickness) || - ins_y > (row_height - mortar_thickness) ) { - copy_v4_v4( out, mortar ); + if (ins_x < mortar_thickness || ins_y < mortar_thickness || + ins_x > (brick_width - mortar_thickness) || + ins_y > (row_height - mortar_thickness)) + { + copy_v4_v4(out, mortar); } else { - copy_v4_v4( out, bricks1 ); - ramp_blend( MA_RAMP_BLEND, out, tint, bricks2 ); + copy_v4_v4(out, bricks1); + ramp_blend(MA_RAMP_BLEND, out, tint, bricks2); } } diff --git a/source/blender/nodes/texture/nodes/node_texture_common.c b/source/blender/nodes/texture/nodes/node_texture_common.c index 9a66ecb5ffb..1eaf9b2b0fe 100644 --- a/source/blender/nodes/texture/nodes/node_texture_common.c +++ b/source/blender/nodes/texture/nodes/node_texture_common.c @@ -58,6 +58,9 @@ static void *group_initexec(bNode *node) bNodeTree *ngroup= (bNodeTree*)node->id; void *exec; + if (!ngroup) + return NULL; + /* initialize the internal node tree execution */ exec = ntreeTexBeginExecTree(ngroup, 0); @@ -107,6 +110,9 @@ static void group_execute(void *data, int thread, struct bNode *node, void *node bNodeTreeExec *exec= (bNodeTreeExec*)nodedata; bNodeThreadStack *nts; + if (!exec) + return; + /* XXX same behavior as trunk: all nodes inside group are executed. * it's stupid, but just makes it work. compo redesign will do this better. */ diff --git a/source/blender/nodes/texture/nodes/node_texture_image.c b/source/blender/nodes/texture/nodes/node_texture_image.c index d0bc30089e2..38d6db1fd08 100644 --- a/source/blender/nodes/texture/nodes/node_texture_image.c +++ b/source/blender/nodes/texture/nodes/node_texture_image.c @@ -76,7 +76,7 @@ static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **UNUSED(i while ( py >= ibuf->y ) py -= ibuf->y; result = ibuf->rect_float + py*ibuf->x*4 + px*4; - copy_v4_v4( out, result ); + copy_v4_v4(out, result); } } } diff --git a/source/blender/nodes/texture/nodes/node_texture_mixRgb.c b/source/blender/nodes/texture/nodes/node_texture_mixRgb.c index 41115076ec1..c170d03a495 100644 --- a/source/blender/nodes/texture/nodes/node_texture_mixRgb.c +++ b/source/blender/nodes/texture/nodes/node_texture_mixRgb.c @@ -37,7 +37,7 @@ static bNodeSocketTemplate inputs[]= { { SOCK_FLOAT, 1, "Factor", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR }, { SOCK_RGBA, 1, "Color1", 0.5f, 0.5f, 0.5f, 1.0f }, - { SOCK_RGBA , 1, "Color2", 0.5f, 0.5f, 0.5f, 1.0f }, + { SOCK_RGBA, 1, "Color2", 0.5f, 0.5f, 0.5f, 1.0f }, { -1, 0, "" } }; static bNodeSocketTemplate outputs[]= { diff --git a/source/blender/nodes/texture/nodes/node_texture_texture.c b/source/blender/nodes/texture/nodes/node_texture_texture.c index bf93231c306..ecf47a900f9 100644 --- a/source/blender/nodes/texture/nodes/node_texture_texture.c +++ b/source/blender/nodes/texture/nodes/node_texture_texture.c @@ -49,8 +49,8 @@ static bNodeSocketTemplate outputs[]= { static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { Tex *nodetex = (Tex *)node->id; - static float red[] = {1,0,0,1}; - static float white[] = {1,1,1,1}; + static float red[] = {1, 0, 0, 1}; + static float white[] = {1, 1, 1, 1}; float co[3], dxt[3], dyt[3]; copy_v3_v3(co, p->co); @@ -65,12 +65,12 @@ static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor if (node->custom2 || node->need_exec==0) { /* this node refers to its own texture tree! */ - copy_v4_v4(out, (fabs(co[0] - co[1]) < .01) ? white : red ); + copy_v4_v4(out, (fabs(co[0] - co[1]) < .01) ? white : red); } else if (nodetex) { TexResult texres; int textype; - float nor[] = {0,0,0}; + float nor[] = {0, 0, 0}; float col1[4], col2[4]; tex_input_rgba(col1, in[0], p, thread); diff --git a/source/blender/python/bmesh/bmesh_py_types.h b/source/blender/python/bmesh/bmesh_py_types.h index a69091cb7ec..85bbd5d7b09 100644 --- a/source/blender/python/bmesh/bmesh_py_types.h +++ b/source/blender/python/bmesh/bmesh_py_types.h @@ -138,8 +138,8 @@ void BPy_BM_init_types(void); PyObject *BPyInit_bmesh_types(void); enum { - BPY_BMFLAG_NOP = 0, /* do nothing */ - BPY_BMFLAG_IS_WRAPPED = 1 /* the mesh is owned by editmode */ + BPY_BMFLAG_NOP = 0, /* do nothing */ + BPY_BMFLAG_IS_WRAPPED = 1 /* the mesh is owned by editmode */ }; PyObject *BPy_BMesh_CreatePyObject(BMesh *bm, int flag); diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c index 6a02d8e4a25..f25222c89da 100644 --- a/source/blender/python/bmesh/bmesh_py_types_customdata.c +++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c @@ -124,7 +124,7 @@ static PyObject *bpy_bmlayeraccess_collection_get(BPy_BMLayerAccess *self, void PyDoc_STRVAR(bpy_bmlayercollection_active_doc, -"This meshes vert sequence (read-only).\n\n:type: :class:`BMVertSeq`" +"The active layer of this type (read-only).\n\n:type: :class:`BMLayerItem`" ); static PyObject *bpy_bmlayercollection_active_get(BPy_BMLayerItem *self, void *UNUSED(flag)) { @@ -145,6 +145,17 @@ static PyObject *bpy_bmlayercollection_active_get(BPy_BMLayerItem *self, void *U } } + +PyDoc_STRVAR(bpy_bmlayercollection_is_singleton_doc, +"This meshes vert sequence (read-only).\n\n:type: :class:`BMVertSeq`" +); +static PyObject *bpy_bmlayercollection_is_singleton_get(BPy_BMLayerItem *self, void *UNUSED(flag)) +{ + BPY_BM_CHECK_OBJ(self); + + return PyBool_FromLong(CustomData_layertype_is_singleton(self->type)); +} + PyDoc_STRVAR(bpy_bmlayercollection_name_doc, "The layers unique name (read-only).\n\n:type: string" ); @@ -211,7 +222,8 @@ static PyGetSetDef bpy_bmlayeraccess_loop_getseters[] = { static PyGetSetDef bpy_bmlayercollection_getseters[] = { /* BMESH_TODO, make writeable */ - {(char *)"active", (getter)bpy_bmlayercollection_active_get, (setter)NULL, (char *)bpy_bmlayercollection_active_doc, NULL}, + {(char *)"active", (getter)bpy_bmlayercollection_active_get, (setter)NULL, (char *)bpy_bmlayercollection_active_doc, NULL}, + {(char *)"is_singleton", (getter)bpy_bmlayercollection_is_singleton_get, (setter)NULL, (char *)bpy_bmlayercollection_is_singleton_doc, NULL}, {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; @@ -230,6 +242,87 @@ static PyGetSetDef bpy_bmlayeritem_getseters[] = { /* BMLayerCollection * ----------------- */ +PyDoc_STRVAR(bpy_bmlayeritem_copy_from_doc, +".. method:: copy_from(other)\n" +"\n" +" Return a copy of the layer\n" +"\n" +" :arg other: Another layer to copy from.\n" +" :arg other: :class:`BMLayerItem`\n" +); +static PyObject *bpy_bmlayeritem_copy_from(BPy_BMLayerItem *self, BPy_BMLayerItem *value) +{ + CustomData *data; + + if (!BPy_BMLayerItem_Check(value)) { + PyErr_Format(PyExc_TypeError, + "layer.copy_from(x): expected BMLayerItem, not '%.200s'", + Py_TYPE(value)->tp_name); + return NULL; + } + + BPY_BM_CHECK_OBJ(self); + BPY_BM_CHECK_OBJ(value); + + if (self->bm != value->bm) { + PyErr_SetString(PyExc_ValueError, + "layer.copy_from(): layer is from another mesh"); + return NULL; + } + + else if ((self->htype != value->htype) || + (self->type != value->type) || + (self->index != value->index)) + { + PyErr_SetString(PyExc_ValueError, + "layer.copy_from(other): layer type mismatch"); + } + + data = bpy_bm_customdata_get(self->bm, self->htype); + + if ((bpy_bmlayeritem_get(self) == NULL) || + (bpy_bmlayeritem_get(value) == NULL)) + { + return NULL; + } + + BM_data_layer_copy(self->bm, data, self->type, value->index, self->index); + + Py_RETURN_NONE; +} + +/* similar to new(), but no name arg. */ +PyDoc_STRVAR(bpy_bmlayercollection_verify_doc, +".. method:: verify()\n" +"\n" +" Create a new layer or return an existing active layer\n" +"\n" +" :return: The newly verified layer.\n" +" :rtype: :class:`BMLayerItem`\n" +); +static PyObject *bpy_bmlayercollection_verify(BPy_BMLayerCollection *self) +{ + int index; + CustomData *data; + + BPY_BM_CHECK_OBJ(self); + + data = bpy_bm_customdata_get(self->bm, self->htype); + + index = CustomData_get_layer_index(data, self->type); + + if (index == -1) { + BM_data_layer_add(self->bm, data, self->type); + index = 0; + } + else { + index = CustomData_get_active_layer_index(data, self->type) - index; /* make relative */ + } + + BLI_assert(index >= 0); + + return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index); +} PyDoc_STRVAR(bpy_bmlayercollection_new_doc, ".. method:: new(name)\n" @@ -255,6 +348,14 @@ static PyObject *bpy_bmlayercollection_new(BPy_BMLayerCollection *self, PyObject data = bpy_bm_customdata_get(self->bm, self->htype); + if (CustomData_layertype_is_singleton(self->type) && + CustomData_has_layer(data, self->type)) + { + PyErr_SetString(PyExc_ValueError, + "layers.new(): is a singleton, use verify() instead"); + return NULL; + } + if (name) { BM_data_layer_add_named(self->bm, data, self->type, name); } @@ -451,7 +552,13 @@ static PyObject *bpy_bmlayercollection_get(BPy_BMLayerCollection *self, PyObject return Py_INCREF(def), def; } +static struct PyMethodDef bpy_bmlayeritem_methods[] = { + {"copy_from", (PyCFunction)bpy_bmlayeritem_copy_from, METH_O, bpy_bmlayeritem_copy_from_doc}, + {NULL, NULL, 0, NULL} +}; + static struct PyMethodDef bpy_bmelemseq_methods[] = { + {"verify", (PyCFunction)bpy_bmlayercollection_verify, METH_NOARGS, bpy_bmlayercollection_verify_doc}, {"new", (PyCFunction)bpy_bmlayercollection_new, METH_VARARGS, bpy_bmlayercollection_new_doc}, {"remove", (PyCFunction)bpy_bmlayercollection_remove, METH_O, bpy_bmlayercollection_remove_doc}, @@ -462,8 +569,6 @@ static struct PyMethodDef bpy_bmelemseq_methods[] = { {NULL, NULL, 0, NULL} }; - - /* Sequences * ========= */ @@ -763,6 +868,7 @@ void BPy_BM_init_types_customdata(void) // BPy_BMLayerAccess_Type.tp_methods = bpy_bmeditselseq_methods; BPy_BMLayerCollection_Type.tp_methods = bpy_bmelemseq_methods; + BPy_BMLayerItem_Type.tp_methods = bpy_bmlayeritem_methods; BPy_BMLayerCollection_Type.tp_as_sequence = &bpy_bmlayercollection_as_sequence; @@ -883,8 +989,7 @@ PyObject *BPy_BMLayerItem_GetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer) } case CD_MTEXPOLY: { - ret = Py_NotImplemented; /* TODO */ - Py_INCREF(ret); + ret = BPy_BMTexPoly_CreatePyObject(value); break; } case CD_MLOOPUV: @@ -977,8 +1082,7 @@ int BPy_BMLayerItem_SetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer, PyObj } case CD_MTEXPOLY: { - PyErr_SetString(PyExc_AttributeError, "readonly"); /* could make this writeable later */ - ret = -1; + ret = BPy_BMTexPoly_AssignPyObject(value, py_value); break; } case CD_MLOOPUV: diff --git a/source/blender/python/bmesh/bmesh_py_types_meshdata.c b/source/blender/python/bmesh/bmesh_py_types_meshdata.c index 9972ff288b2..aa78dc64f6b 100644 --- a/source/blender/python/bmesh/bmesh_py_types_meshdata.c +++ b/source/blender/python/bmesh/bmesh_py_types_meshdata.c @@ -34,15 +34,107 @@ #include "../mathutils/mathutils.h" +#include "DNA_object_types.h" #include "DNA_meshdata_types.h" #include "BLI_utildefines.h" #include "BLI_math_vector.h" #include "BKE_deform.h" +#include "BKE_library.h" #include "bmesh_py_types_meshdata.h" + +/* Mesh BMTexPoly + * ************** */ + +#define BPy_BMTexPoly_Check(v) (Py_TYPE(v) == &BPy_BMTexPoly_Type) + +typedef struct BPy_BMTexPoly { + PyObject_VAR_HEAD + MTexPoly *data; +} BPy_BMTexPoly; + +extern PyObject *pyrna_id_CreatePyObject(ID *id); +extern int pyrna_id_FromPyObject(PyObject *obj, ID **id); + +PyDoc_STRVAR(bpy_bmtexpoly_image_doc, +"Image or None.\n\n:type: :class:`bpy.types.Image`" +); +static PyObject *bpy_bmtexpoly_image_get(BPy_BMTexPoly *self, void *UNUSED(closure)) +{ + return pyrna_id_CreatePyObject((ID *)self->data->tpage); +} + +static int bpy_bmtexpoly_image_set(BPy_BMTexPoly *self, PyObject *value, void *UNUSED(closure)) +{ + ID *id; + + if (value == Py_None) { + id = NULL; + } + else if (pyrna_id_FromPyObject(value, &id) && id && GS(id->name) == ID_IM) { + /* pass */ + } + else { + PyErr_Format(PyExc_KeyError, "BMTexPoly.image = x" + "expected an image or None, not '%.200s'", + Py_TYPE(value)->tp_name); + return -1; + } + + id_lib_extern(id); + self->data->tpage = (struct Image *)id; + + return 0; +} + +static PyGetSetDef bpy_bmtexpoly_getseters[] = { + /* attributes match rna_def_mtpoly */ + {(char *)"image", (getter)bpy_bmtexpoly_image_get, (setter)bpy_bmtexpoly_image_set, (char *)bpy_bmtexpoly_image_doc, NULL}, + + {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ +}; + +PyTypeObject BPy_BMTexPoly_Type = {{{0}}}; /* bm.loops.layers.uv.active */ + +static void bm_init_types_bmtexpoly(void) +{ + BPy_BMTexPoly_Type.tp_basicsize = sizeof(BPy_BMTexPoly); + + BPy_BMTexPoly_Type.tp_name = "BMTexPoly"; + + BPy_BMTexPoly_Type.tp_doc = NULL; // todo + + BPy_BMTexPoly_Type.tp_getset = bpy_bmtexpoly_getseters; + + BPy_BMTexPoly_Type.tp_flags = Py_TPFLAGS_DEFAULT; + + PyType_Ready(&BPy_BMTexPoly_Type); +} + +int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mtpoly, PyObject *value) +{ + if (UNLIKELY(!BPy_BMTexPoly_Check(value))) { + PyErr_Format(PyExc_TypeError, "expected BMTexPoly, not a %.200s", Py_TYPE(value)->tp_name); + return -1; + } + else { + *((MTexPoly *)mtpoly) = *(((BPy_BMTexPoly *)value)->data); + return 0; + } +} + +PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mtpoly) +{ + BPy_BMTexPoly *self = PyObject_New(BPy_BMTexPoly, &BPy_BMTexPoly_Type); + self->data = mtpoly; + return (PyObject *)self; +} + +/* --- End Mesh BMTexPoly --- */ + /* Mesh Loop UV * ************ */ @@ -596,6 +688,7 @@ PyObject *BPy_BMDeformVert_CreatePyObject(struct MDeformVert *dvert) /* call to init all types */ void BPy_BM_init_types_meshdata(void) { + bm_init_types_bmtexpoly(); bm_init_types_bmloopuv(); bm_init_types_bmloopcol(); bm_init_types_bmdvert(); diff --git a/source/blender/python/bmesh/bmesh_py_types_meshdata.h b/source/blender/python/bmesh/bmesh_py_types_meshdata.h index 4636f800ed3..c9e8dce97a0 100644 --- a/source/blender/python/bmesh/bmesh_py_types_meshdata.h +++ b/source/blender/python/bmesh/bmesh_py_types_meshdata.h @@ -40,10 +40,17 @@ typedef struct BPy_BMGenericMeshData { void *data; } BPy_BMGenericMeshData; +struct MTexPoly; struct MLoopUV; struct MLoopCol; struct MDeformVert; +int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mloopuv, PyObject *value); +PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mloopuv); + +int BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value); +PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data); + int BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value); PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data); diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index fa45b54062a..5511673481e 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -127,13 +127,13 @@ static PyObject *bpy_blend_paths(PyObject *UNUSED(self), PyObject *args, PyObjec return NULL; } - if (absolute) flag |= BPATH_TRAVERSE_ABS; - if (!packed) flag |= BPATH_TRAVERSE_SKIP_PACKED; - if (local) flag |= BPATH_TRAVERSE_SKIP_LIBRARY; + if (absolute) flag |= BLI_BPATH_TRAVERSE_ABS; + if (!packed) flag |= BLI_BPATH_TRAVERSE_SKIP_PACKED; + if (local) flag |= BLI_BPATH_TRAVERSE_SKIP_LIBRARY; list = PyList_New(0); - bpath_traverse_main(G.main, bpy_blend_paths_visit_cb, flag, (void *)list); + BLI_bpath_traverse_main(G.main, bpy_blend_paths_visit_cb, flag, (void *)list); return list; } diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c index 5128cf0b924..bab5a83a6ed 100644 --- a/source/blender/python/intern/bpy_app_handlers.c +++ b/source/blender/python/intern/bpy_app_handlers.c @@ -225,7 +225,7 @@ PyObject *BPY_app_handlers_struct(void) funcstore->func = bpy_app_generic_callback; funcstore->alloc = 0; funcstore->arg = SET_INT_IN_POINTER(pos); - BLI_add_cb(funcstore, pos); + BLI_callback_add(funcstore, pos); } } diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c index 4d0c05f6582..dbb25eb854b 100644 --- a/source/blender/python/intern/bpy_props.c +++ b/source/blender/python/intern/bpy_props.c @@ -1071,8 +1071,8 @@ static EnumPropertyItem *enum_items_from_py(PyObject *seq_fast, PyObject *def, i else { MEM_freeN(items); PyErr_SetString(PyExc_TypeError, - "EnumProperty(...): expected an tuple containing " - "(identifier, name description) and optionally a " + "EnumProperty(...): expected a tuple containing " + "(identifier, name, description) and optionally a " "unique number"); return NULL; } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 7c8f28d0979..2174241eeda 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1424,7 +1424,8 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const cha totkw = kw ? PyDict_Size(kw) : 0; - RNA_STRUCT_BEGIN (ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) + { arg_name = RNA_property_identifier(prop); if (strcmp(arg_name, "rna_type") == 0) continue; @@ -2203,7 +2204,8 @@ int pyrna_prop_collection_subscript_str_lib_pair_ptr(BPy_PropertyRNA *self, PyOb /* lib is either a valid poniter or NULL, * either way can do direct comparison with id.lib */ - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { ID *id = itemptr.data; /* always an ID */ if (id->lib == lib && (strncmp(keyname, id->name + 2, sizeof(id->name) - 2) == 0)) { found = TRUE; @@ -3346,7 +3348,8 @@ static void pyrna_dir_members_rna(PyObject *list, PointerRNA *ptr) RNA_pointer_create(NULL, &RNA_Struct, ptr->type, &tptr); iterprop = RNA_struct_find_property(&tptr, "functions"); - RNA_PROP_BEGIN (&tptr, itemptr, iterprop) { + RNA_PROP_BEGIN (&tptr, itemptr, iterprop) + { idname = RNA_function_identifier(itemptr.data); pystring = PyUnicode_FromString(idname); @@ -3365,7 +3368,8 @@ static void pyrna_dir_members_rna(PyObject *list, PointerRNA *ptr) iterprop = RNA_struct_iterator_property(ptr->type); - RNA_PROP_BEGIN (ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (ptr, itemptr, iterprop) + { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -3980,7 +3984,8 @@ static PyObject *pyrna_prop_collection_keys(BPy_PropertyRNA *self) char name[256], *nameptr; int namelen; - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -4017,7 +4022,8 @@ static PyObject *pyrna_prop_collection_items(BPy_PropertyRNA *self) int namelen; int i = 0; - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { if (itemptr.data) { /* add to python list */ item = PyTuple_New(2); @@ -4189,7 +4195,8 @@ static PyObject *pyrna_prop_collection_find(BPy_PropertyRNA *self, PyObject *key PYRNA_PROP_CHECK_OBJ(self); - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -4220,7 +4227,8 @@ static void foreach_attr_type(BPy_PropertyRNA *self, const char *attr, *attr_signed = FALSE; /* note: this is fail with zero length lists, so don't let this get caled in that case */ - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { prop = RNA_struct_find_property(&itemptr, attr); *raw_type = RNA_property_raw_type(prop); *attr_tot = RNA_property_array_length(&itemptr, prop); @@ -6246,6 +6254,31 @@ PyObject *pyrna_prop_CreatePyObject(PointerRNA *ptr, PropertyRNA *prop) return (PyObject *)pyrna; } +/* utility func to be used by external modules, *sneaky!* */ +PyObject *pyrna_id_CreatePyObject(ID *id) +{ + if (id) { + PointerRNA ptr; + RNA_id_pointer_create(id, &ptr); + return pyrna_struct_CreatePyObject(&ptr); + } + else { + Py_RETURN_NONE; + } +} + +int pyrna_id_FromPyObject(PyObject *obj, ID **id) +{ + if (BPy_StructRNA_Check(obj) && (RNA_struct_is_ID(((BPy_StructRNA *)obj)->ptr.type))) { + *id = ((BPy_StructRNA *)obj)->ptr.id.data; + return TRUE; + } + else { + *id = NULL; + return FALSE; + } +} + void BPY_rna_init(void) { #ifdef USE_MATHUTILS // register mathutils callbacks, ok to run more then once. @@ -6401,7 +6434,8 @@ static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self) PyObject *ret = PyList_New(0); PyObject *item; - RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) + { StructRNA *srna = itemptr.data; StructRNA *srna_base = RNA_struct_base(itemptr.data); /* skip own operators, these double up [#29666] */ @@ -7189,7 +7223,8 @@ void pyrna_alloc_types(void) RNA_blender_rna_pointer_create(&ptr); prop = RNA_struct_find_property(&ptr, "structs"); - RNA_PROP_BEGIN (&ptr, itemptr, prop) { + RNA_PROP_BEGIN (&ptr, itemptr, prop) + { PyObject *item = pyrna_struct_Subtype(&itemptr); if (item == NULL) { if (PyErr_Occurred()) { @@ -7217,7 +7252,8 @@ void pyrna_free_types(void) prop = RNA_struct_find_property(&ptr, "structs"); - RNA_PROP_BEGIN (&ptr, itemptr, prop) { + RNA_PROP_BEGIN (&ptr, itemptr, prop) + { StructRNA *srna = srna_from_ptr(&itemptr); void *py_ptr = RNA_struct_py_type_get(srna); @@ -7475,9 +7511,9 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla prop_rna = RNA_struct_find_property(&ptr_rna, "structs"); - /* loop over all structs */ - RNA_PROP_BEGIN (&ptr_rna, itemptr, prop_rna) { + RNA_PROP_BEGIN (&ptr_rna, itemptr, prop_rna) + { srna_iter = itemptr.data; if (pyrna_srna_contains_pointer_prop_srna(srna_iter, srna, &prop_identifier)) { break; diff --git a/source/blender/python/mathutils/mathutils.h b/source/blender/python/mathutils/mathutils.h index e8d128b431e..d4673d14823 100644 --- a/source/blender/python/mathutils/mathutils.h +++ b/source/blender/python/mathutils/mathutils.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -26,15 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __MATHUTILS_H__ +#define __MATHUTILS_H__ + /** \file blender/python/mathutils/mathutils.h * \ingroup pymathutils */ -//Include this file for access to vector, quat, matrix, euler, etc... - -#ifndef __MATHUTILS_H__ -#define __MATHUTILS_H__ - /* Can cast different mathutils types to this, use for generic funcs */ struct DynStr; diff --git a/source/blender/python/mathutils/mathutils_Color.c b/source/blender/python/mathutils/mathutils_Color.c index fc8b2886f37..0f421f1ddea 100644 --- a/source/blender/python/mathutils/mathutils_Color.c +++ b/source/blender/python/mathutils/mathutils_Color.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/python/mathutils/mathutils_Color.h b/source/blender/python/mathutils/mathutils_Color.h index 2bf6ba2ef1f..eff09c25a99 100644 --- a/source/blender/python/mathutils/mathutils_Color.h +++ b/source/blender/python/mathutils/mathutils_Color.h @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/python/mathutils/mathutils_Euler.c b/source/blender/python/mathutils/mathutils_Euler.c index a663bd71130..583831b1655 100644 --- a/source/blender/python/mathutils/mathutils_Euler.c +++ b/source/blender/python/mathutils/mathutils_Euler.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/python/mathutils/mathutils_Euler.h b/source/blender/python/mathutils/mathutils_Euler.h index 56199f4a546..bcbc6c60ca7 100644 --- a/source/blender/python/mathutils/mathutils_Euler.h +++ b/source/blender/python/mathutils/mathutils_Euler.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -27,14 +26,13 @@ * */ +#ifndef __MATHUTILS_EULER_H__ +#define __MATHUTILS_EULER_H__ + /** \file blender/python/mathutils/mathutils_Euler.h * \ingroup pymathutils */ - -#ifndef __MATHUTILS_EULER_H__ -#define __MATHUTILS_EULER_H__ - extern PyTypeObject euler_Type; #define EulerObject_Check(_v) PyObject_TypeCheck((_v), &euler_Type) diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c index a48e7ed854d..5c4c6414f39 100644 --- a/source/blender/python/mathutils/mathutils_Matrix.c +++ b/source/blender/python/mathutils/mathutils_Matrix.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/python/mathutils/mathutils_Quaternion.h b/source/blender/python/mathutils/mathutils_Quaternion.h index 09faff192de..4ffe8488843 100644 --- a/source/blender/python/mathutils/mathutils_Quaternion.h +++ b/source/blender/python/mathutils/mathutils_Quaternion.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -24,17 +23,15 @@ * Contributor(s): Joseph Gilbert * * ***** END GPL LICENSE BLOCK ***** - * */ +#ifndef __MATHUTILS_QUATERNION_H__ +#define __MATHUTILS_QUATERNION_H__ + /** \file blender/python/mathutils/mathutils_Quaternion.h * \ingroup pymathutils */ - -#ifndef __MATHUTILS_QUATERNION_H__ -#define __MATHUTILS_QUATERNION_H__ - extern PyTypeObject quaternion_Type; #define QuaternionObject_Check(_v) PyObject_TypeCheck((_v), &quaternion_Type) diff --git a/source/blender/python/mathutils/mathutils_Vector.h b/source/blender/python/mathutils/mathutils_Vector.h index 04fd0adcda5..974abe0f869 100644 --- a/source/blender/python/mathutils/mathutils_Vector.h +++ b/source/blender/python/mathutils/mathutils_Vector.h @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c index 543574e5136..9e9b96a885b 100644 --- a/source/blender/python/mathutils/mathutils_geometry.c +++ b/source/blender/python/mathutils/mathutils_geometry.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -1151,11 +1150,11 @@ static PyObject *M_Geometry_tessellate_polygon(PyObject *UNUSED(self), PyObject } -static int boxPack_FromPyObject(PyObject *value, boxPack **boxarray) +static int boxPack_FromPyObject(PyObject *value, BoxPack **boxarray) { Py_ssize_t len, i; PyObject *list_item, *item_1, *item_2; - boxPack *box; + BoxPack *box; /* Error checking must already be done */ @@ -1167,7 +1166,7 @@ static int boxPack_FromPyObject(PyObject *value, boxPack **boxarray) len = PyList_GET_SIZE(value); - *boxarray = MEM_mallocN(len * sizeof(boxPack), "boxPack box"); + *boxarray = MEM_mallocN(len * sizeof(BoxPack), "BoxPack box"); for (i = 0; i < len; i++) { @@ -1202,11 +1201,11 @@ static int boxPack_FromPyObject(PyObject *value, boxPack **boxarray) return 0; } -static void boxPack_ToPyObject(PyObject *value, boxPack **boxarray) +static void boxPack_ToPyObject(PyObject *value, BoxPack **boxarray) { Py_ssize_t len, i; PyObject *list_item; - boxPack *box; + BoxPack *box; len = PyList_GET_SIZE(value); @@ -1244,13 +1243,13 @@ static PyObject *M_Geometry_box_pack_2d(PyObject *UNUSED(self), PyObject *boxlis len = PyList_GET_SIZE(boxlist); if (len) { - boxPack *boxarray = NULL; + BoxPack *boxarray = NULL; if (boxPack_FromPyObject(boxlist, &boxarray) == -1) { return NULL; /* exception set */ } /* Non Python function */ - boxPack2D(boxarray, len, &tot_width, &tot_height); + BLI_box_pack_2D(boxarray, len, &tot_width, &tot_height); boxPack_ToPyObject(boxlist, &boxarray); } diff --git a/source/blender/python/mathutils/mathutils_geometry.h b/source/blender/python/mathutils/mathutils_geometry.h index ac89698c12e..3967c934ce9 100644 --- a/source/blender/python/mathutils/mathutils_geometry.h +++ b/source/blender/python/mathutils/mathutils_geometry.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -26,15 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __MATHUTILS_GEOMETRY_H__ +#define __MATHUTILS_GEOMETRY_H__ + /** \file blender/python/mathutils/mathutils_geometry.h * \ingroup pymathutils */ -/*Include this file for access to vector, quat, matrix, euler, etc...*/ - -#ifndef __MATHUTILS_GEOMETRY_H__ -#define __MATHUTILS_GEOMETRY_H__ - #include "mathutils.h" PyMODINIT_FUNC PyInit_mathutils_geometry(void); diff --git a/source/blender/quicktime/apple/quicktime_export.c b/source/blender/quicktime/apple/quicktime_export.c index 599268b225a..e25fc0f04bd 100644 --- a/source/blender/quicktime/apple/quicktime_export.c +++ b/source/blender/quicktime/apple/quicktime_export.c @@ -1,9 +1,4 @@ /* - * - * quicktime_export.c - * - * Code to create QuickTime Movies with Blender - * * ***** BEGIN GPL LICENSE BLOCK ***** * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -29,6 +24,8 @@ /** \file blender/quicktime/apple/quicktime_export.c * \ingroup quicktime + * + * Code to create QuickTime Movies with Blender */ @@ -144,7 +141,7 @@ static QuicktimeCodecTypeDesc qtVideoCodecList[] = { {kMPEG4VisualCodecType, 10, "MPEG4"}, {kH263CodecType, 11, "H.263"}, {kH264CodecType, 12, "H.264"}, - {0,0,NULL}}; + {0, 0, NULL}}; static int qtVideoCodecCount = 12; @@ -263,7 +260,7 @@ static OSErr QT_GetCodecSettingsFromScene(RenderData *rd, ReportList *reports) // if there is codecdata in the blendfile, convert it to a Quicktime handle if (qcd) { myHandle = NewHandle(qcd->cdSize); - PtrToHand( qcd->cdParms, &myHandle, qcd->cdSize); + PtrToHand(qcd->cdParms, &myHandle, qcd->cdSize); } // restore codecsettings to the quicktime component @@ -346,26 +343,26 @@ static void QT_CreateMyVideoTrack(int rectx, int recty, ReportList *reports) trackFrame.bottom = recty; trackFrame.right = rectx; - qtexport->theTrack = NewMovieTrack (qtexport->theMovie, - FixRatio(trackFrame.right,1), - FixRatio(trackFrame.bottom,1), - 0); - CheckError( GetMoviesError(), "NewMovieTrack error", reports ); + qtexport->theTrack = NewMovieTrack (qtexport->theMovie, + FixRatio(trackFrame.right, 1), + FixRatio(trackFrame.bottom, 1), + 0); + CheckError(GetMoviesError(), "NewMovieTrack error", reports); -// SetIdentityMatrix(&myMatrix); -// ScaleMatrix(&myMatrix, fixed1, Long2Fix(-1), 0, 0); -// TranslateMatrix(&myMatrix, 0, Long2Fix(trackFrame.bottom)); -// SetMovieMatrix(qtexport->theMovie, &myMatrix); + // SetIdentityMatrix(&myMatrix); + // ScaleMatrix(&myMatrix, fixed1, Long2Fix(-1), 0, 0); + // TranslateMatrix(&myMatrix, 0, Long2Fix(trackFrame.bottom)); + // SetMovieMatrix(qtexport->theMovie, &myMatrix); qtexport->theMedia = NewTrackMedia (qtexport->theTrack, - VideoMediaType, - qtdata->kVideoTimeScale, - nil, - 0); - CheckError( GetMoviesError(), "NewTrackMedia error", reports ); + VideoMediaType, + qtdata->kVideoTimeScale, + nil, + 0); + CheckError(GetMoviesError(), "NewTrackMedia error", reports); err = BeginMediaEdits (qtexport->theMedia); - CheckError( err, "BeginMediaEdits error", reports ); + CheckError(err, "BeginMediaEdits error", reports); QT_StartAddVideoSamplesToMedia (&trackFrame, rectx, recty, reports); } @@ -378,14 +375,14 @@ static void QT_EndCreateMyVideoTrack(ReportList *reports) QT_EndAddVideoSamplesToMedia (); err = EndMediaEdits (qtexport->theMedia); - CheckError( err, "EndMediaEdits error", reports ); + CheckError(err, "EndMediaEdits error", reports); err = InsertMediaIntoTrack (qtexport->theTrack, - kTrackStart,/* track start time */ - kMediaStart,/* media start time */ - GetMediaDuration (qtexport->theMedia), - fixed1); - CheckError( err, "InsertMediaIntoTrack error", reports ); + kTrackStart, /* track start time */ + kMediaStart, /* media start time */ + GetMediaDuration (qtexport->theMedia), + fixed1); + CheckError(err, "InsertMediaIntoTrack error", reports); } @@ -515,7 +512,7 @@ void filepath_qt(char *string, RenderData *rd) BLI_make_existing_file(string); if (BLI_strcasecmp(string + strlen(string) - 4, ".mov")) { - sprintf(txt, "%04d-%04d.mov", (rd->sfra) , (rd->efra) ); + sprintf(txt, "%04d-%04d.mov", (rd->sfra), (rd->efra)); strcat(string, txt); } } @@ -684,7 +681,7 @@ static void check_renderbutton_framerate(RenderData *rd, ReportList *reports) } err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings); - CheckError( err, "SCSetInfo error", reports ); + CheckError(err, "SCSetInfo error", reports); if (qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps qtdata->kVideoTimeScale = 24000; diff --git a/source/blender/quicktime/apple/quicktime_import.c b/source/blender/quicktime/apple/quicktime_import.c index 197c8cebca3..3e4e53418ac 100644 --- a/source/blender/quicktime/apple/quicktime_import.c +++ b/source/blender/quicktime/apple/quicktime_import.c @@ -1,10 +1,6 @@ /* - * - * quicktime_import.c - * - * Code to use Quicktime to load images/movies as texture. - * * ***** BEGIN GPL LICENSE BLOCK ***** + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 @@ -29,6 +25,8 @@ /** \file blender/quicktime/apple/quicktime_import.c * \ingroup quicktime + * + * Code to use Quicktime to load images/movies as texture. */ #ifdef WITH_QUICKTIME @@ -176,7 +174,7 @@ char *get_valid_qtname(char *name) #endif /* _WIN32 */ -int anim_is_quicktime (const char *name) +int anim_is_quicktime(const char *name) { FSSpec theFSSpec; char theFullPath[255]; @@ -255,7 +253,7 @@ int anim_is_quicktime (const char *name) } -void free_anim_quicktime (struct anim *anim) +void free_anim_quicktime(struct anim *anim) { if (anim == NULL) return; if (anim->qtime == NULL) return; @@ -263,12 +261,12 @@ void free_anim_quicktime (struct anim *anim) UnlockPixels(anim->qtime->offscreenPixMap); if (anim->qtime->have_gw) - DisposeGWorld( anim->qtime->offscreenGWorld ); + DisposeGWorld(anim->qtime->offscreenGWorld); if (anim->qtime->ibuf) IMB_freeImBuf(anim->qtime->ibuf); - DisposeMovie( anim->qtime->movie ); - CloseMovieFile( anim->qtime->movieRefNum ); + DisposeMovie(anim->qtime->movie); + CloseMovieFile(anim->qtime->movieRefNum); if (anim->qtime->frameIndex) MEM_freeN (anim->qtime->frameIndex); if (anim->qtime) MEM_freeN (anim->qtime); @@ -417,7 +415,7 @@ static int GetFirstVideoMedia(struct anim *anim) anim->qtime->theMedia = GetTrackMedia(anim->qtime->theTrack); if (anim->qtime->theMedia) - GetMediaHandlerDescription(anim->qtime->theMedia,&mediaType, nil, nil); + GetMediaHandlerDescription(anim->qtime->theMedia, &mediaType, nil, nil); if (mediaType == VideoMediaType) return 1; } @@ -440,7 +438,7 @@ static short GetFirstVideoTrackPixelDepth(struct anim *anim) } -int startquicktime (struct anim *anim) +int startquicktime(struct anim *anim) { FSSpec theFSSpec; @@ -454,7 +452,7 @@ int startquicktime (struct anim *anim) #endif short depth = 0; - anim->qtime = MEM_callocN (sizeof(QuicktimeMovie),"animqt"); + anim->qtime = MEM_callocN (sizeof(QuicktimeMovie), "animqt"); anim->qtime->have_gw = FALSE; if (anim->qtime == NULL) { diff --git a/source/blender/render/intern/include/gammaCorrectionTables.h b/source/blender/render/intern/include/gammaCorrectionTables.h index 0df4248612b..68bb15f7f4c 100644 --- a/source/blender/render/intern/include/gammaCorrectionTables.h +++ b/source/blender/render/intern/include/gammaCorrectionTables.h @@ -1,7 +1,4 @@ /* - * gammacorrectiontables.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -28,14 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __GAMMACORRECTIONTABLES_H__ +#define __GAMMACORRECTIONTABLES_H__ + /** \file blender/render/intern/include/gammaCorrectionTables.h * \ingroup render */ - -#ifndef __GAMMACORRECTIONTABLES_H__ -#define __GAMMACORRECTIONTABLES_H__ - /** * Initialize the gamma lookup tables */ diff --git a/source/blender/render/intern/include/initrender.h b/source/blender/render/intern/include/initrender.h index d206b157948..7917fd66cfa 100644 --- a/source/blender/render/intern/include/initrender.h +++ b/source/blender/render/intern/include/initrender.h @@ -1,7 +1,4 @@ /* - * initrender_ext.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/include/occlusion.h b/source/blender/render/intern/include/occlusion.h index 78a1f8a1175..2f3ac2a7bff 100644 --- a/source/blender/render/intern/include/occlusion.h +++ b/source/blender/render/intern/include/occlusion.h @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index fc64f0a6e1b..406c8e08f0d 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -528,13 +528,13 @@ typedef struct LampRen { float shdwr, shdwg, shdwb; float energy, haint; int lay; - float spotsi,spotbl; + float spotsi, spotbl; float vec[3]; float xsp, ysp, distkw, inpr; float halokw, halo; short falloff_type; - float ld1,ld2; + float ld1, ld2; struct CurveMapping *curfalloff; /* copied from Lamp, to decouple more rendering stuff */ diff --git a/source/blender/render/intern/include/rendercore.h b/source/blender/render/intern/include/rendercore.h index 3585f243448..a66165d4680 100644 --- a/source/blender/render/intern/include/rendercore.h +++ b/source/blender/render/intern/include/rendercore.h @@ -1,7 +1,4 @@ /* - * rendercore_ext.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -28,14 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __RENDERCORE_H__ +#define __RENDERCORE_H__ + /** \file blender/render/intern/include/rendercore.h * \ingroup render */ - -#ifndef __RENDERCORE_H__ -#define __RENDERCORE_H__ - #include "render_types.h" diff --git a/source/blender/render/intern/include/shadbuf.h b/source/blender/render/intern/include/shadbuf.h index 4b3595a009f..5cde8e5106a 100644 --- a/source/blender/render/intern/include/shadbuf.h +++ b/source/blender/render/intern/include/shadbuf.h @@ -1,7 +1,4 @@ /* - * shadbuf_ext.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -28,14 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __SHADBUF_H__ +#define __SHADBUF_H__ + /** \file blender/render/intern/include/shadbuf.h * \ingroup render */ - -#ifndef __SHADBUF_H__ -#define __SHADBUF_H__ - #include "render_types.h" struct ObjectRen; diff --git a/source/blender/render/intern/include/strand.h b/source/blender/render/intern/include/strand.h index 5094b646807..7482b4d10ee 100644 --- a/source/blender/render/intern/include/strand.h +++ b/source/blender/render/intern/include/strand.h @@ -101,7 +101,7 @@ void free_strand_surface(struct Render *re); struct StrandShadeCache *strand_shade_cache_create(void); void strand_shade_cache_free(struct StrandShadeCache *cache); void strand_shade_segment(struct Render *re, struct StrandShadeCache *cache, struct StrandSegment *sseg, struct ShadeSample *ssamp, float t, float s, int addpassflag); -void strand_shade_unref(struct StrandShadeCache *cache, struct StrandVert *svert); +void strand_shade_unref(struct StrandShadeCache *cache, struct ObjectInstanceRen *obi, struct StrandVert *svert); #endif diff --git a/source/blender/render/intern/include/sunsky.h b/source/blender/render/intern/include/sunsky.h index 6a41517b113..0afd9246150 100644 --- a/source/blender/render/intern/include/sunsky.h +++ b/source/blender/render/intern/include/sunsky.h @@ -73,7 +73,7 @@ typedef struct SunSky } SunSky; void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness, - float spread,float sun_brightness, float sun_size, float back_scatter, + float spread, float sun_brightness, float sun_size, float back_scatter, float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace); void GetSkyXYZRadiance(struct SunSky *sunsky, float theta, float phi, float color_out[3]); diff --git a/source/blender/render/intern/include/texture.h b/source/blender/render/intern/include/texture.h index e5013ace1f0..679bd7bcdbf 100644 --- a/source/blender/render/intern/include/texture.h +++ b/source/blender/render/intern/include/texture.h @@ -1,7 +1,4 @@ /* - * texture_ext.h - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/raytrace/bvh.h b/source/blender/render/intern/raytrace/bvh.h index 946b64e98e5..c38d9b1dcb4 100644 --- a/source/blender/render/intern/raytrace/bvh.h +++ b/source/blender/render/intern/raytrace/bvh.h @@ -99,7 +99,7 @@ static int rayobject_bb_intersect_test(const Isect *isec, const float *_bb) /* bvh tree generics */ template<class Tree> static void bvh_add(Tree *obj, RayObject *ob) { - rtbuild_add( obj->builder, ob ); + rtbuild_add(obj->builder, ob); } template<class Node> @@ -150,10 +150,10 @@ template<class Node> static inline void bvh_node_merge_bb(Node *node, float *min, float *max) { if (is_leaf(node)) { - RE_rayobject_merge_bb( (RayObject*)node, min, max); + RE_rayobject_merge_bb((RayObject *)node, min, max); } else { - DO_MIN(node->bb , min); + DO_MIN(node->bb, min); DO_MAX(node->bb+3, max); } } @@ -165,7 +165,7 @@ static inline void bvh_node_merge_bb(Node *node, float *min, float *max) */ template<class Node> static inline void bvh_node_push_childs(Node *node, Isect *isec, Node **stack, int &stack_pos); -template<class Node,int MAX_STACK_SIZE,bool TEST_ROOT,bool SHADOW> +template<class Node, int MAX_STACK_SIZE, bool TEST_ROOT, bool SHADOW> static int bvh_node_stack_raycast(Node *root, Isect *isec) { Node *stack[MAX_STACK_SIZE]; @@ -179,7 +179,7 @@ static int bvh_node_stack_raycast(Node *root, Isect *isec) while (stack_pos) { Node *node = stack[--stack_pos]; if (!is_leaf(node)) { - if (bvh_node_hit_test(node,isec)) { + if (bvh_node_hit_test(node, isec)) { bvh_node_push_childs(node, isec, stack, stack_pos); assert(stack_pos <= MAX_STACK_SIZE); } @@ -199,7 +199,7 @@ static int bvh_node_stack_raycast(Node *root, Isect *isec) * this was created to be able to use any simd (with the cost of some memmoves) * it can take advantage of any SIMD width and doens't needs any special tree care */ -template<class Node,int MAX_STACK_SIZE,bool TEST_ROOT> +template<class Node, int MAX_STACK_SIZE, bool TEST_ROOT> static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) { Node *stack[MAX_STACK_SIZE]; @@ -242,20 +242,20 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) const float *bb2 = stack[stack_pos+2]->bb; const float *bb3 = stack[stack_pos+3]->bb; - const __m128 x0y0x1y1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(1,0,1,0) ); - const __m128 x2y2x3y3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(1,0,1,0) ); - t_bb[0] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(2,0,2,0) ); - t_bb[1] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(3,1,3,1) ); - - const __m128 z0X0z1X1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(3,2,3,2) ); - const __m128 z2X2z3X3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(3,2,3,2) ); - t_bb[2] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(2,0,2,0) ); - t_bb[3] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(3,1,3,1) ); - - const __m128 Y0Z0Y1Z1 = _mm_shuffle_ps( _mm_load_ps(bb0+4), _mm_load_ps(bb1+4), _MM_SHUFFLE(1,0,1,0) ); - const __m128 Y2Z2Y3Z3 = _mm_shuffle_ps( _mm_load_ps(bb2+4), _mm_load_ps(bb3+4), _MM_SHUFFLE(1,0,1,0) ); - t_bb[4] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(2,0,2,0) ); - t_bb[5] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(3,1,3,1) ); + const __m128 x0y0x1y1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(1, 0, 1, 0) ); + const __m128 x2y2x3y3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(1, 0, 1, 0) ); + t_bb[0] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(2, 0, 2, 0) ); + t_bb[1] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(3, 1, 3, 1) ); + + const __m128 z0X0z1X1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(3, 2, 3, 2) ); + const __m128 z2X2z3X3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(3, 2, 3, 2) ); + t_bb[2] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(2, 0, 2, 0) ); + t_bb[3] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(3, 1, 3, 1) ); + + const __m128 Y0Z0Y1Z1 = _mm_shuffle_ps( _mm_load_ps(bb0+4), _mm_load_ps(bb1+4), _MM_SHUFFLE(1, 0, 1, 0) ); + const __m128 Y2Z2Y3Z3 = _mm_shuffle_ps( _mm_load_ps(bb2+4), _mm_load_ps(bb3+4), _MM_SHUFFLE(1, 0, 1, 0) ); + t_bb[4] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(2, 0, 2, 0) ); + t_bb[5] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(3, 1, 3, 1) ); #if 0 for(int i=0; i<4; i++) { @@ -294,7 +294,7 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) Node *node = stack[--stack_pos]; assert(!is_leaf(node)); - if (bvh_node_hit_test(node,isec)) { + if (bvh_node_hit_test(node, isec)) { if (!is_leaf(node->child)) { bvh_node_push_childs(node, isec, stack, stack_pos); assert(stack_pos <= MAX_STACK_SIZE); @@ -361,10 +361,10 @@ static int bvh_node_raycast(Node *node, Isect *isec) } #endif -template<class Node,class HintObject> +template<class Node, class HintObject> void bvh_dfs_make_hint(Node *node, LCTSHint *hint, int reserve_space, HintObject *hintObject) { - assert( hint->size + reserve_space + 1 <= RE_RAY_LCTS_MAX_SIZE ); + assert(hint->size + reserve_space + 1 <= RE_RAY_LCTS_MAX_SIZE); if (is_leaf(node)) { hint->stack[hint->size++] = (RayObject*)node; @@ -396,7 +396,7 @@ template<class Tree, int DFS_STACK_SIZE> static inline RayObject *bvh_create_tree(int size) { Tree *obj= (Tree*)MEM_callocN(sizeof(Tree), "BVHTree" ); - assert( RE_rayobject_isAligned(obj) ); /* RayObject API assumes real data to be 4-byte aligned */ + assert(RE_rayobject_isAligned(obj)); /* RayObject API assumes real data to be 4-byte aligned */ obj->rayobj.api = bvh_get_api<Tree>(DFS_STACK_SIZE); obj->root = NULL; diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index a2773ba218d..ac29d9e78ee 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -127,7 +127,7 @@ MALWAYS_INLINE int vlr_check_intersect_solid(Isect *UNUSED(is), ObjectInstanceRe MALWAYS_INLINE int vlr_check_bake(Isect *is, ObjectInstanceRen* obi, VlakRen *UNUSED(vlr)) { - return (obi->obr->ob != is->userdata); + return (obi->obr->ob != is->userdata) && (obi->obr->ob->flag & SELECT); } /* Ray Triangle/Quad Intersection */ diff --git a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp index d0036fd8556..8f1b730bf10 100644 --- a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp @@ -136,8 +136,8 @@ static void RE_rayobject_blibvh_add(RayObject *o, RayObject *ob) INIT_MINMAX(min_max, min_max+3); RE_rayobject_merge_bb(ob, min_max, min_max+3); - DO_MIN(min_max , obj->bb[0]); - DO_MAX(min_max+3, obj->bb[1]); + DO_MIN(min_max, obj->bb[0]); + DO_MAX(min_max + 3, obj->bb[1]); BLI_bvhtree_insert(obj->bvh, obj->next_leaf - obj->leafs, min_max, 2); *(obj->next_leaf++) = ob; diff --git a/source/blender/render/intern/raytrace/rayobject_internal.h b/source/blender/render/intern/raytrace/rayobject_internal.h index 8c8e432b6bd..3f768e5adcb 100644 --- a/source/blender/render/intern/raytrace/rayobject_internal.h +++ b/source/blender/render/intern/raytrace/rayobject_internal.h @@ -1,10 +1,37 @@ -/** \file blender/render/intern/raytrace/rayobject_internal.h - * \ingroup render +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): André Pinto. + * + * ***** END GPL LICENSE BLOCK ***** */ #ifndef __RAYOBJECT_INTERNAL_H__ #define __RAYOBJECT_INTERNAL_H__ +/** \file blender/render/intern/raytrace/rayobject_internal.h + * \ingroup render + */ + #ifdef __cplusplus extern "C" { #endif diff --git a/source/blender/render/intern/raytrace/rayobject_octree.cpp b/source/blender/render/intern/raytrace/rayobject_octree.cpp index eef2fcc51c9..dc7b6dd6e8d 100644 --- a/source/blender/render/intern/raytrace/rayobject_octree.cpp +++ b/source/blender/render/intern/raytrace/rayobject_octree.cpp @@ -74,7 +74,7 @@ typedef struct Octree { struct Branch **adrbranch; struct Node **adrnode; float ocsize; /* ocsize: mult factor, max size octree */ - float ocfacx,ocfacy,ocfacz; + float ocfacx, ocfacy, ocfacz; float min[3], max[3]; int ocres; int branchcount, nodecount; @@ -216,7 +216,7 @@ static Node *addnode(Octree *oc) index= oc->nodecount>>12; if (oc->adrnode[index]==NULL) - oc->adrnode[index]= (Node*)MEM_callocN(4096*sizeof(Node),"addnode"); + oc->adrnode[index]= (Node*)MEM_callocN(4096*sizeof(Node), "addnode"); if (oc->nodecount> NODE_ARRAY*NODE_ARRAY) { printf("error; octree nodes full\n"); @@ -233,7 +233,7 @@ static int face_in_node(RayFace *face, short x, short y, short z, float rtf[][3] // init static vars if (face) { - normal_tri_v3( nor,rtf[0], rtf[1], rtf[2]); + normal_tri_v3(nor, rtf[0], rtf[1], rtf[2]); d= -nor[0]*rtf[0][0] - nor[1]*rtf[0][1] - nor[2]*rtf[0][2]; return 0; } @@ -297,11 +297,11 @@ static void ocwrite(Octree *oc, RayFace *face, int quad, short x, short y, short oc4= ((x & 8)+(y & 4)+(z & 2))>>1; oc5= ((x & 4)+(y & 2)+(z & 1)); - br= addbranch(oc, br,oc0); - br= addbranch(oc, br,oc1); - br= addbranch(oc, br,oc2); - br= addbranch(oc, br,oc3); - br= addbranch(oc, br,oc4); + br= addbranch(oc, br, oc0); + br= addbranch(oc, br, oc1); + br= addbranch(oc, br, oc2); + br= addbranch(oc, br, oc3); + br= addbranch(oc, br, oc4); no= (Node *)br->b[oc5]; if (no==NULL) br->b[oc5]= (Branch *)(no= addnode(oc)); @@ -326,10 +326,10 @@ static void ocwrite(Octree *oc, RayFace *face, int quad, short x, short y, short static void d2dda(Octree *oc, short b1, short b2, short c1, short c2, char *ocface, short rts[][3], float rtf[][3]) { - int ocx1,ocx2,ocy1,ocy2; - int x,y,dx=0,dy=0; - float ox1,ox2,oy1,oy2; - float labda,labdao,labdax,labday,ldx,ldy; + int ocx1, ocx2, ocy1, ocy2; + int x, y, dx=0, dy=0; + float ox1, ox2, oy1, oy2; + float labda, labdao, labdax, labday, ldx, ldy; ocx1= rts[b1][c1]; ocy1= rts[b1][c2]; @@ -405,7 +405,7 @@ static void d2dda(Octree *oc, short b1, short b2, short c1, short c2, char *ocfa y+=dy; } } - labda=MIN2(labdax,labday); + labda=MIN2(labdax, labday); if (labda==labdao) break; if (labda>=1.0f) break; } @@ -541,13 +541,13 @@ static void octree_fill_rayface(Octree *oc, RayFace *face) oc2= rts[1][c]; oc3= rts[2][c]; if (!RE_rayface_isQuad(face)) { - ocmin[c]= MIN3(oc1,oc2,oc3); - ocmax[c]= MAX3(oc1,oc2,oc3); + ocmin[c]= MIN3(oc1, oc2, oc3); + ocmax[c]= MAX3(oc1, oc2, oc3); } else { oc4= rts[3][c]; - ocmin[c]= MIN4(oc1,oc2,oc3,oc4); - ocmax[c]= MAX4(oc1,oc2,oc3,oc4); + ocmin[c]= MIN4(oc1, oc2, oc3, oc4); + ocmax[c]= MAX4(oc1, oc2, oc3, oc4); } if (ocmax[c]>oc->ocres-1) ocmax[c]=oc->ocres-1; if (ocmin[c]<0) ocmin[c]=0; @@ -558,32 +558,32 @@ static void octree_fill_rayface(Octree *oc, RayFace *face) } else { - d2dda(oc, 0,1,0,1,ocface+ocres2,rts,rtf); - d2dda(oc, 0,1,0,2,ocface,rts,rtf); - d2dda(oc, 0,1,1,2,ocface+2*ocres2,rts,rtf); - d2dda(oc, 1,2,0,1,ocface+ocres2,rts,rtf); - d2dda(oc, 1,2,0,2,ocface,rts,rtf); - d2dda(oc, 1,2,1,2,ocface+2*ocres2,rts,rtf); + d2dda(oc, 0, 1, 0, 1, ocface+ocres2, rts, rtf); + d2dda(oc, 0, 1, 0, 2, ocface, rts, rtf); + d2dda(oc, 0, 1, 1, 2, ocface+2*ocres2, rts, rtf); + d2dda(oc, 1, 2, 0, 1, ocface+ocres2, rts, rtf); + d2dda(oc, 1, 2, 0, 2, ocface, rts, rtf); + d2dda(oc, 1, 2, 1, 2, ocface+2*ocres2, rts, rtf); if (!RE_rayface_isQuad(face)) { - d2dda(oc, 2,0,0,1,ocface+ocres2,rts,rtf); - d2dda(oc, 2,0,0,2,ocface,rts,rtf); - d2dda(oc, 2,0,1,2,ocface+2*ocres2,rts,rtf); + d2dda(oc, 2, 0, 0, 1, ocface+ocres2, rts, rtf); + d2dda(oc, 2, 0, 0, 2, ocface, rts, rtf); + d2dda(oc, 2, 0, 1, 2, ocface+2*ocres2, rts, rtf); } else { - d2dda(oc, 2,3,0,1,ocface+ocres2,rts,rtf); - d2dda(oc, 2,3,0,2,ocface,rts,rtf); - d2dda(oc, 2,3,1,2,ocface+2*ocres2,rts,rtf); - d2dda(oc, 3,0,0,1,ocface+ocres2,rts,rtf); - d2dda(oc, 3,0,0,2,ocface,rts,rtf); - d2dda(oc, 3,0,1,2,ocface+2*ocres2,rts,rtf); + d2dda(oc, 2, 3, 0, 1, ocface+ocres2, rts, rtf); + d2dda(oc, 2, 3, 0, 2, ocface, rts, rtf); + d2dda(oc, 2, 3, 1, 2, ocface+2*ocres2, rts, rtf); + d2dda(oc, 3, 0, 0, 1, ocface+ocres2, rts, rtf); + d2dda(oc, 3, 0, 0, 2, ocface, rts, rtf); + d2dda(oc, 3, 0, 1, 2, ocface+2*ocres2, rts, rtf); } /* nothing todo with triangle..., just fills :) */ - filltriangle(oc, 0,1,ocface+ocres2,ocmin,ocmax); - filltriangle(oc, 0,2,ocface,ocmin,ocmax); - filltriangle(oc, 1,2,ocface+2*ocres2,ocmin,ocmax); + filltriangle(oc, 0, 1, ocface+ocres2, ocmin, ocmax); + filltriangle(oc, 0, 2, ocface, ocmin, ocmax); + filltriangle(oc, 1, 2, ocface+2*ocres2, ocmin, ocmax); /* init static vars here */ - face_in_node(face, 0,0,0, rtf); + face_in_node(face, 0, 0, 0, rtf); for (x=ocmin[0];x<=ocmax[0];x++) { a= oc->ocres*x; @@ -593,7 +593,7 @@ static void octree_fill_rayface(Octree *oc, RayFace *face) for (z=ocmin[2];z<=ocmax[2];z++) { if (ocface[b+z] && ocface[a+z]) { if (face_in_node(NULL, x, y, z, rtf)) - ocwrite(oc, face, RE_rayface_isQuad(face), x,y,z, rtf); + ocwrite(oc, face, RE_rayface_isQuad(face), x, y, z, rtf); } } } @@ -695,7 +695,7 @@ static int testnode(Octree *UNUSED(oc), Isect *is, Node *no, OcVal ocval) if (!face) break; if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) { - if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) + if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face), is) ) return 1; } } @@ -713,7 +713,7 @@ static int testnode(Octree *UNUSED(oc), Isect *is, Node *no, OcVal ocval) if (!face) break; if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) { - if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) { + if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face), is) ) { found = 1; } } @@ -849,12 +849,12 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) Node *no; OcVal ocval; float vec1[3], vec2[3], start[3], end[3]; - float u1,u2,ox1,ox2,oy1,oy2,oz1,oz2; - float labdao,labdax,ldx,labday,ldy,labdaz,ldz, ddalabda; + float u1, u2, ox1, ox2, oy1, oy2, oz1, oz2; + float labdao, labdax, ldx, labday, ldy, labdaz, ldz, ddalabda; float olabda = 0; - int dx,dy,dz; - int xo,yo,zo,c1=0; - int ocx1,ocx2,ocy1, ocy2,ocz1,ocz2; + int dx, dy, dz; + int xo, yo, zo, c1=0; + int ocx1, ocx2, ocy1, ocy2, ocz1, ocz2; /* clip with octree */ if (oc->branchcount==0) return 0; @@ -875,14 +875,14 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) u2= 1.0f; /* clip with octree cube */ - if (cliptest(-ldx, start[0]-oc->min[0], &u1,&u2)) { - if (cliptest(ldx, oc->max[0]-start[0], &u1,&u2)) { + if (cliptest(-ldx, start[0]-oc->min[0], &u1, &u2)) { + if (cliptest(ldx, oc->max[0]-start[0], &u1, &u2)) { ldy= is->dir[1]*is->dist; - if (cliptest(-ldy, start[1]-oc->min[1], &u1,&u2)) { - if (cliptest(ldy, oc->max[1]-start[1], &u1,&u2)) { + if (cliptest(-ldy, start[1]-oc->min[1], &u1, &u2)) { + if (cliptest(ldy, oc->max[1]-start[1], &u1, &u2)) { ldz = is->dir[2]*is->dist; - if (cliptest(-ldz, start[2]-oc->min[2], &u1,&u2)) { - if (cliptest(ldz, oc->max[2]-start[2], &u1,&u2)) { + if (cliptest(-ldz, start[2]-oc->min[2], &u1, &u2)) { + if (cliptest(ldz, oc->max[2]-start[2], &u1, &u2)) { c1=1; if (u2<1.0f) { end[0] = start[0]+u2*ldx; @@ -934,7 +934,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) } else { int found = 0; - //static int coh_ocx1,coh_ocx2,coh_ocy1, coh_ocy2,coh_ocz1,coh_ocz2; + //static int coh_ocx1, coh_ocx2, coh_ocy1, coh_ocy2, coh_ocz1, coh_ocz2; float dox, doy, doz; int eqval; @@ -992,7 +992,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) } xo=ocx1; yo=ocy1; zo=ocz1; - ddalabda= MIN3(labdax,labday,labdaz); + ddalabda= MIN3(labdax, labday, labdaz); vec2[0]= ox1; vec2[1]= oy1; @@ -1008,7 +1008,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) /* calculate ray intersection with octree node */ copy_v3_v3(vec1, vec2); - // dox,y,z is negative + // dox, y, z is negative vec2[0]= ox1-ddalabda*dox; vec2[1]= oy1-ddalabda*doy; vec2[2]= oz1-ddalabda*doz; @@ -1082,7 +1082,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) } - ddalabda=MIN3(labdax,labday,labdaz); + ddalabda=MIN3(labdax, labday, labdaz); if (ddalabda==labdao) break; /* to make sure the last node is always checked */ if (labdao>=1.0f) break; diff --git a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp index 2d0abba9a75..bfcfbee536f 100644 --- a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp @@ -78,7 +78,7 @@ void bvh_done<QBVHTree>(QBVHTree *obj) } if (root) { - pushup_simd<VBVHNode,4>(root); + pushup_simd<VBVHNode, 4>(root); obj->root = Reorganize_SVBVH<VBVHNode>(arena2).transform(root); } else @@ -100,9 +100,9 @@ int intersect(QBVHTree *obj, Isect* isec) //TODO renable hint support if (RE_rayobject_isAligned(obj->root)) { if (isec->mode == RE_RAY_SHADOW) - return svbvh_node_stack_raycast<StackSize,true>(obj->root, isec); + return svbvh_node_stack_raycast<StackSize, true>(obj->root, isec); else - return svbvh_node_stack_raycast<StackSize,false>(obj->root, isec); + return svbvh_node_stack_raycast<StackSize, false>(obj->root, isec); } else return RE_rayobject_intersect((RayObject*)obj->root, isec); @@ -123,13 +123,13 @@ RayObjectAPI make_api() { static RayObjectAPI api = { - (RE_rayobject_raycast_callback) ((int(*)(Tree*,Isect*)) &intersect<STACK_SIZE>), - (RE_rayobject_add_callback) ((void(*)(Tree*,RayObject*)) &bvh_add<Tree>), + (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>), + (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>), (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>), (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>), - (RE_rayobject_merge_bb_callback)((void(*)(Tree*,float*,float*)) &bvh_bb<Tree>), + (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>), (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>), - (RE_rayobject_hint_bb_callback) ((void(*)(Tree*,LCTSHint*,float*,float*)) &bvh_hint_bb<Tree>) + (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>) }; return api; @@ -138,7 +138,7 @@ RayObjectAPI make_api() template<class Tree> RayObjectAPI* bvh_get_api(int maxstacksize) { - static RayObjectAPI bvh_api256 = make_api<Tree,1024>(); + static RayObjectAPI bvh_api256 = make_api<Tree, 1024>(); if (maxstacksize <= 1024) return &bvh_api256; assert(maxstacksize <= 256); @@ -147,7 +147,7 @@ RayObjectAPI* bvh_get_api(int maxstacksize) RayObject *RE_rayobject_qbvh_create(int size) { - return bvh_create_tree<QBVHTree,DFS_STACK_SIZE>(size); + return bvh_create_tree<QBVHTree, DFS_STACK_SIZE>(size); } #else diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp index ad74159fd3b..eb3bdb37f9d 100644 --- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp +++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp @@ -66,7 +66,7 @@ static void rtbuild_init(RTBuilder *b) RTBuilder* rtbuild_create(int size) { RTBuilder *builder = (RTBuilder*) MEM_mallocN( sizeof(RTBuilder), "RTBuilder" ); - RTBuilder::Object *memblock= (RTBuilder::Object*)MEM_mallocN( sizeof(RTBuilder::Object)*size,"RTBuilder.objects"); + RTBuilder::Object *memblock= (RTBuilder::Object*)MEM_mallocN( sizeof(RTBuilder::Object)*size, "RTBuilder.objects"); rtbuild_init(builder); @@ -75,7 +75,7 @@ RTBuilder* rtbuild_create(int size) builder->primitives.maxsize = size; for (int i=0; i<3; i++) { - builder->sorted_begin[i] = (RTBuilder::Object**)MEM_mallocN( sizeof(RTBuilder::Object*)*size,"RTBuilder.sorted_objects"); + builder->sorted_begin[i] = (RTBuilder::Object**)MEM_mallocN( sizeof(RTBuilder::Object*)*size, "RTBuilder.sorted_objects"); builder->sorted_end[i] = builder->sorted_begin[i]; } @@ -136,7 +136,7 @@ int rtbuild_size(RTBuilder *b) } -template<class Obj,int Axis> +template<class Obj, int Axis> static bool obj_bb_compare(const Obj &a, const Obj &b) { if (a->bb[Axis] != b->bb[Axis]) @@ -147,9 +147,9 @@ static bool obj_bb_compare(const Obj &a, const Obj &b) template<class Item> static void object_sort(Item *begin, Item *end, int axis) { - if (axis == 0) return std::sort(begin, end, obj_bb_compare<Item,0> ); - if (axis == 1) return std::sort(begin, end, obj_bb_compare<Item,1> ); - if (axis == 2) return std::sort(begin, end, obj_bb_compare<Item,2> ); + if (axis == 0) return std::sort(begin, end, obj_bb_compare<Item, 0> ); + if (axis == 1) return std::sort(begin, end, obj_bb_compare<Item, 1> ); + if (axis == 2) return std::sort(begin, end, obj_bb_compare<Item, 2> ); assert(false); } @@ -188,7 +188,7 @@ void rtbuild_calc_bb(RTBuilder *b) { if (b->bb[0] == 1.0e30f) { for (RTBuilder::Object **index = b->sorted_begin[0]; index != b->sorted_end[0]; index++) - RE_rayobject_merge_bb( (*index)->obj , b->bb, b->bb+3); + RE_rayobject_merge_bb( (*index)->obj, b->bb, b->bb+3); } } @@ -306,7 +306,7 @@ int rtbuild_median_split_largest_axis(RTBuilder *b, int nchilds) rtbuild_calc_bb(b); - la = bb_largest_axis(b->bb,b->bb+3); + la = bb_largest_axis(b->bb, b->bb+3); for (i=1; i<nchilds; i++) separators[i-1] = (b->bb[la+3]-b->bb[la])*i / nchilds; @@ -449,9 +449,9 @@ static void split_leafs(RTBuilder *b, int *nth, int partitions, int split_axis) { assert(nth[i] < nth[i+1] && nth[i+1] < nth[partitions]); - if (split_axis == 0) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object,0>); - if (split_axis == 1) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object,1>); - if (split_axis == 2) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object,2>); + if (split_axis == 0) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 0>); + if (split_axis == 1) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 1>); + if (split_axis == 2) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 2>); } } #endif diff --git a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp index cbec02ab798..3cf2b4b5d5f 100644 --- a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp @@ -94,14 +94,14 @@ void bvh_done<SVBVHTree>(SVBVHTree *obj) pushup(root); pushdown(root); - pushup_simd<VBVHNode,4>(root); + pushup_simd<VBVHNode, 4>(root); obj->root = Reorganize_SVBVH<VBVHNode>(arena2).transform(root); } else { //Finds the optimal packing of this tree using a given cost model //TODO this uses quite a lot of memory, find ways to reduce memory usage during building - OVBVHNode *root = BuildBinaryVBVH<OVBVHNode>(arena1,&obj->rayobj.control).transform(obj->builder); + OVBVHNode *root = BuildBinaryVBVH<OVBVHNode>(arena1, &obj->rayobj.control).transform(obj->builder); if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); @@ -110,7 +110,7 @@ void bvh_done<SVBVHTree>(SVBVHTree *obj) } if (root) { - VBVH_optimalPackSIMD<OVBVHNode,PackCost>(PackCost()).transform(root); + VBVH_optimalPackSIMD<OVBVHNode, PackCost>(PackCost()).transform(root); obj->root = Reorganize_SVBVH<OVBVHNode>(arena2).transform(root); } else @@ -133,9 +133,9 @@ int intersect(SVBVHTree *obj, Isect* isec) //TODO renable hint support if (RE_rayobject_isAligned(obj->root)) { if (isec->mode == RE_RAY_SHADOW) - return svbvh_node_stack_raycast<StackSize,true>(obj->root, isec); + return svbvh_node_stack_raycast<StackSize, true>(obj->root, isec); else - return svbvh_node_stack_raycast<StackSize,false>(obj->root, isec); + return svbvh_node_stack_raycast<StackSize, false>(obj->root, isec); } else return RE_rayobject_intersect( (RayObject*) obj->root, isec ); @@ -156,13 +156,13 @@ RayObjectAPI make_api() { static RayObjectAPI api = { - (RE_rayobject_raycast_callback) ((int(*)(Tree*,Isect*)) &intersect<STACK_SIZE>), - (RE_rayobject_add_callback) ((void(*)(Tree*,RayObject*)) &bvh_add<Tree>), + (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>), + (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>), (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>), (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>), - (RE_rayobject_merge_bb_callback)((void(*)(Tree*,float*,float*)) &bvh_bb<Tree>), + (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>), (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>), - (RE_rayobject_hint_bb_callback) ((void(*)(Tree*,LCTSHint*,float*,float*)) &bvh_hint_bb<Tree>) + (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>) }; return api; @@ -171,7 +171,7 @@ RayObjectAPI make_api() template<class Tree> RayObjectAPI* bvh_get_api(int maxstacksize) { - static RayObjectAPI bvh_api256 = make_api<Tree,1024>(); + static RayObjectAPI bvh_api256 = make_api<Tree, 1024>(); if (maxstacksize <= 1024) return &bvh_api256; assert(maxstacksize <= 256); @@ -180,7 +180,7 @@ RayObjectAPI* bvh_get_api(int maxstacksize) RayObject *RE_rayobject_svbvh_create(int size) { - return bvh_create_tree<SVBVHTree,DFS_STACK_SIZE>(size); + return bvh_create_tree<SVBVHTree, DFS_STACK_SIZE>(size); } #else diff --git a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp index 26a99794362..47e78b8912e 100644 --- a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp @@ -88,7 +88,7 @@ void bvh_done<VBVHTree>(VBVHTree *obj) //Build and optimize the tree if (1) { - VBVHNode *root = BuildBinaryVBVH<VBVHNode>(arena1,&obj->rayobj.control).transform(obj->builder); + VBVHNode *root = BuildBinaryVBVH<VBVHNode>(arena1, &obj->rayobj.control).transform(obj->builder); if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); return; @@ -115,7 +115,7 @@ void bvh_done<VBVHTree>(VBVHTree *obj) //Finds the optimal packing of this tree using a given cost model //TODO this uses quite a lot of memory, find ways to reduce memory usage during building OVBVHNode *root = BuildBinaryVBVH<OVBVHNode>(arena2).transform(obj->builder); - VBVH_optimalPackSIMD<OVBVHNode,PackCost>(PackCost()).transform(root); + VBVH_optimalPackSIMD<OVBVHNode, PackCost>(PackCost()).transform(root); obj->root = Reorganize_VBVH<OVBVHNode>(arena1).transform(root); BLI_memarena_free(arena2); @@ -136,9 +136,9 @@ int intersect(VBVHTree *obj, Isect* isec) //TODO renable hint support if (RE_rayobject_isAligned(obj->root)) { if (isec->mode == RE_RAY_SHADOW) - return bvh_node_stack_raycast<VBVHNode,StackSize,false,true>( obj->root, isec); + return bvh_node_stack_raycast<VBVHNode, StackSize, false, true>( obj->root, isec); else - return bvh_node_stack_raycast<VBVHNode,StackSize,false,false>( obj->root, isec); + return bvh_node_stack_raycast<VBVHNode, StackSize, false, false>( obj->root, isec); } else return RE_rayobject_intersect( (RayObject*) obj->root, isec ); @@ -178,13 +178,13 @@ RayObjectAPI make_api() { static RayObjectAPI api = { - (RE_rayobject_raycast_callback) ((int(*)(Tree*,Isect*)) &intersect<STACK_SIZE>), - (RE_rayobject_add_callback) ((void(*)(Tree*,RayObject*)) &bvh_add<Tree>), + (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>), + (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>), (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>), (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>), - (RE_rayobject_merge_bb_callback)((void(*)(Tree*,float*,float*)) &bvh_bb<Tree>), + (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>), (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>), - (RE_rayobject_hint_bb_callback) ((void(*)(Tree*,LCTSHint*,float*,float*)) &bvh_hint_bb<Tree>) + (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>) }; return api; @@ -193,7 +193,7 @@ RayObjectAPI make_api() template<class Tree> RayObjectAPI* bvh_get_api(int maxstacksize) { - static RayObjectAPI bvh_api256 = make_api<Tree,1024>(); + static RayObjectAPI bvh_api256 = make_api<Tree, 1024>(); if (maxstacksize <= 1024) return &bvh_api256; assert(maxstacksize <= 256); @@ -202,5 +202,5 @@ RayObjectAPI* bvh_get_api(int maxstacksize) RayObject *RE_rayobject_vbvh_create(int size) { - return bvh_create_tree<VBVHTree,DFS_STACK_SIZE>(size); + return bvh_create_tree<VBVHTree, DFS_STACK_SIZE>(size); } diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h index 1930e5bb32b..a47bd27d11b 100644 --- a/source/blender/render/intern/raytrace/reorganize.h +++ b/source/blender/render/intern/raytrace/reorganize.h @@ -61,7 +61,7 @@ bool node_fits_inside(Node *a, Node *b) } template<class Node> -void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float,Node*> &cost) +void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float, Node*> &cost) { std::queue<Node*> q; q.push(tree); @@ -73,7 +73,7 @@ void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float,Node if (parent == node) continue; if (node_fits_inside(node, parent) && RE_rayobject_isAligned(parent->child) ) { float pcost = bb_area(parent->bb, parent->bb+3); - cost = std::min( cost, std::make_pair(pcost,parent) ); + cost = std::min( cost, std::make_pair(pcost, parent) ); for (Node *child = parent->child; child; child = child->sibling) q.push(child); } @@ -93,11 +93,11 @@ void reorganize(Node *root) if (RE_rayobject_isAligned(node->child)) { for (Node **prev = &node->child; *prev; ) { - assert( RE_rayobject_isAligned(*prev) ); + assert(RE_rayobject_isAligned(*prev)); q.push(*prev); - std::pair<float,Node*> best(FLT_MAX, root); - reorganize_find_fittest_parent( root, *prev, best ); + std::pair<float, Node*> best(FLT_MAX, root); + reorganize_find_fittest_parent(root, *prev, best); if (best.second == node) { //Already inside the fitnest BB @@ -215,7 +215,7 @@ void pushup_simd(Node *parent) } for (Node *child = parent->child; RE_rayobject_isAligned(child) && child; child = child->sibling) - pushup_simd<Node,SSize>(child); + pushup_simd<Node, SSize>(child); } @@ -349,7 +349,7 @@ struct OVBVHNode //Calc new childs { OVBVHNode **cut = &(this->child); - set_cut( best_cutsize, &cut ); + set_cut(best_cutsize, &cut); *cut = NULL; } diff --git a/source/blender/render/intern/raytrace/vbvh.h b/source/blender/render/intern/raytrace/vbvh.h index f916dd412f7..d8ff9000a3f 100644 --- a/source/blender/render/intern/raytrace/vbvh.h +++ b/source/blender/render/intern/raytrace/vbvh.h @@ -127,7 +127,7 @@ struct BuildBinaryVBVH Node *create_node() { Node *node = (Node*)BLI_memarena_alloc( arena, sizeof(Node) ); - assert( RE_rayobject_isAligned(node) ); + assert(RE_rayobject_isAligned(node)); node->sibling = NULL; node->child = NULL; diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 8013251fb3c..4a3493d1a00 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -470,11 +470,11 @@ static void calc_tangent_vector(ObjectRen *obr, VertexTangent **vtangents, MemAr } else if (v1->orco) { uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3]; - map_to_sphere( &uv[0][0], &uv[0][1],v1->orco[0], v1->orco[1], v1->orco[2]); - map_to_sphere( &uv[1][0], &uv[1][1],v2->orco[0], v2->orco[1], v2->orco[2]); - map_to_sphere( &uv[2][0], &uv[2][1],v3->orco[0], v3->orco[1], v3->orco[2]); + map_to_sphere(&uv[0][0], &uv[0][1], v1->orco[0], v1->orco[1], v1->orco[2]); + map_to_sphere(&uv[1][0], &uv[1][1], v2->orco[0], v2->orco[1], v2->orco[2]); + map_to_sphere(&uv[2][0], &uv[2][1], v3->orco[0], v3->orco[1], v3->orco[2]); if (v4) - map_to_sphere( &uv[3][0], &uv[3][1],v4->orco[0], v4->orco[1], v4->orco[2]); + map_to_sphere(&uv[3][0], &uv[3][1], v4->orco[0], v4->orco[1], v4->orco[2]); } else return; @@ -887,9 +887,9 @@ static void autosmooth(Render *UNUSED(re), ObjectRen *obr, float mat[][4], int d /* skip wire faces */ if (vlr->v2 != vlr->v3) { if (vlr->v4) - normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); else - normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); } } } @@ -1062,7 +1062,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par width= w; /*cross is the radius of the strand so we want it to be half of full width */ - mul_v3_fl(cross,0.5f/crosslen); + mul_v3_fl(cross, 0.5f/crosslen); } else width/=w; @@ -1112,7 +1112,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par vlr->v3->orco= sd->orco; vlr->v3->accum= vlr->v4->accum; - normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->ec= ME_V2V3; @@ -1125,7 +1125,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par if (sd->uvco) { for (i=0; i<sd->totuv; i++) { MTFace *mtf; - mtf=RE_vlakren_get_tface(obr,vlr,i,NULL,1); + mtf=RE_vlakren_get_tface(obr, vlr, i, NULL, 1); mtf->uv[0][0]=mtf->uv[1][0]= mtf->uv[2][0]=mtf->uv[3][0]=(sd->uvco+2*i)[0]; mtf->uv[0][1]=mtf->uv[1][1]= @@ -1133,7 +1133,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par } if (sd->override_uv>=0) { MTFace *mtf; - mtf=RE_vlakren_get_tface(obr,vlr,sd->override_uv,NULL,0); + mtf=RE_vlakren_get_tface(obr, vlr, sd->override_uv, NULL, 0); mtf->uv[0][0]=mtf->uv[3][0]=0.0f; mtf->uv[1][0]=mtf->uv[2][0]=1.0f; @@ -1145,7 +1145,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par if (sd->mcol) { for (i=0; i<sd->totcol; i++) { MCol *mc; - mc=RE_vlakren_get_mcol(obr,vlr,i,NULL,1); + mc=RE_vlakren_get_mcol(obr, vlr, i, NULL, 1); mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i]; mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i]; } @@ -1190,22 +1190,22 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par if (sd->adapt) { second=0; - copy_v3_v3(anor,nor); - copy_v3_v3(avec,vec); + copy_v3_v3(anor, nor); + copy_v3_v3(avec, vec); } } else if (sd->adapt) { - float dvec[3],pvec[3]; - sub_v3_v3v3(dvec,avec,vec); - project_v3_v3v3(pvec,dvec,vec); - sub_v3_v3v3(dvec,dvec,pvec); + float dvec[3], pvec[3]; + sub_v3_v3v3(dvec, avec, vec); + project_v3_v3v3(pvec, dvec, vec); + sub_v3_v3v3(dvec, dvec, pvec); w= vec[2]*re->winmat[2][3] + re->winmat[3][3]; dx= re->winx*dvec[0]*re->winmat[0][0]/w; dy= re->winy*dvec[1]*re->winmat[1][1]/w; w= sqrt(dx*dx + dy*dy); - if (dot_v3v3(anor,nor)<sd->adapt_angle && w>sd->adapt_pix) { + if (dot_v3v3(anor, nor)<sd->adapt_angle && w>sd->adapt_pix) { vlr= RE_findOrAddVlak(obr, obr->totvlak++); vlr->flag= flag; vlr->v1= v1; @@ -1216,8 +1216,8 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par v1= vlr->v4; // cycle v2= vlr->v3; // cycle - copy_v3_v3(anor,nor); - copy_v3_v3(avec,vec); + copy_v3_v3(anor, nor); + copy_v3_v3(avec, vec); } else { vlr= RE_findOrAddVlak(obr, obr->totvlak-1); @@ -1236,7 +1236,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par vlr->v3->orco= sd->orco; vlr->v3->accum= vlr->v4->accum; - normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->ec= ME_V2V3; @@ -1249,7 +1249,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par if (sd->uvco) { for (i=0; i<sd->totuv; i++) { MTFace *mtf; - mtf=RE_vlakren_get_tface(obr,vlr,i,NULL,1); + mtf=RE_vlakren_get_tface(obr, vlr, i, NULL, 1); mtf->uv[0][0]=mtf->uv[1][0]= mtf->uv[2][0]=mtf->uv[3][0]=(sd->uvco+2*i)[0]; mtf->uv[0][1]=mtf->uv[1][1]= @@ -1257,7 +1257,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par } if (sd->override_uv>=0) { MTFace *mtf; - mtf=RE_vlakren_get_tface(obr,vlr,sd->override_uv,NULL,0); + mtf=RE_vlakren_get_tface(obr, vlr, sd->override_uv, NULL, 0); mtf->uv[0][0]=mtf->uv[3][0]=0.0f; mtf->uv[1][0]=mtf->uv[2][0]=1.0f; @@ -1269,7 +1269,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par if (sd->mcol) { for (i=0; i<sd->totcol; i++) { MCol *mc; - mc=RE_vlakren_get_mcol(obr,vlr,i,NULL,1); + mc=RE_vlakren_get_mcol(obr, vlr, i, NULL, 1); mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i]; mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i]; } @@ -1373,11 +1373,11 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Particl sub_v3_v3(vlr->v4->co, yvec); mul_m4_v3(re->viewmat, vlr->v4->co); - normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); - copy_v3_v3(vlr->v1->n,vlr->n); - copy_v3_v3(vlr->v2->n,vlr->n); - copy_v3_v3(vlr->v3->n,vlr->n); - copy_v3_v3(vlr->v4->n,vlr->n); + normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + copy_v3_v3(vlr->v1->n, vlr->n); + copy_v3_v3(vlr->v2->n, vlr->n); + copy_v3_v3(vlr->v3->n, vlr->n); + copy_v3_v3(vlr->v4->n, vlr->n); vlr->mat= ma; vlr->ec= ME_V2V3; @@ -1396,8 +1396,8 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Particl time = (float)fmod((bb->tilt + 1.0f) / 2.0f, 1.0); } else { - float axis1[3] = {0.0f,0.0f,0.0f}; - float axis2[3] = {0.0f,0.0f,0.0f}; + float axis1[3] = {0.0f, 0.0f, 0.0f}; + float axis2[3] = {0.0f, 0.0f, 0.0f}; axis1[(bb->align + 1) % 3] = 1.0f; axis2[(bb->align + 2) % 3] = 1.0f; @@ -1519,7 +1519,7 @@ static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int int i; /* get uvco */ - if (sd->uvco && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) { + if (sd->uvco && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) { for (i=0; i<sd->totuv; i++) { if (num != DMCACHE_NOTFOUND) { MFace *mface = dm->getTessFaceData(dm, num, CD_MFACE); @@ -1536,7 +1536,7 @@ static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int } /* get mcol */ - if (sd->mcol && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) { + if (sd->mcol && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) { for (i=0; i<sd->totcol; i++) { if (num != DMCACHE_NOTFOUND) { MFace *mface = dm->getTessFaceData(dm, num, CD_MFACE); @@ -1558,7 +1558,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem ParticleSystemModifierData *psmd; ParticleSystem *tpsys=0; ParticleSettings *part, *tpart=0; - ParticleData *pars, *pa=0,*tpa=0; + ParticleData *pars, *pa=0, *tpa=0; ParticleKey *states=0; ParticleKey state; ParticleCacheKey *cache=0; @@ -1570,7 +1570,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem StrandBound *sbound= 0; StrandRen *strand=0; RNG *rng= 0; - float loc[3],loc1[3],loc0[3],mat[4][4],nmat[3][3],co[3],nor[3],duplimat[4][4]; + float loc[3], loc1[3], loc0[3], mat[4][4], nmat[3][3], co[3], nor[3], duplimat[4][4]; float strandlen=0.0f, curlen=0.0f; float hasize, pa_size, r_tilt, r_length; float pa_time, pa_birthtime, pa_dietime; @@ -1598,7 +1598,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* 2. start initializing things */ /* last possibility to bail out! */ - psmd = psys_get_modifier(ob,psys); + psmd = psys_get_modifier(ob, psys); if (!(psmd->modifier.mode & eModifierMode_Render)) return 0; @@ -1703,7 +1703,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* 2.6 setup strand rendering */ if (part->ren_as == PART_DRAW_PATH && psys->pathcache) { - path_nbr=(int)pow(2.0,(double) part->ren_step); + path_nbr=(int)pow(2.0, (double) part->ren_step); if (path_nbr) { if (!ELEM(ma->material_type, MA_TYPE_HALO, MA_TYPE_WIRE)) { @@ -1771,7 +1771,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem psys->lattice = psys_get_lattice(&sim); /* 3. start creating renderable things */ - for (a=0,pa=pars; a<totpart+totchild; a++, pa++, seed++) { + for (a=0, pa=pars; a<totpart+totchild; a++, pa++, seed++) { random = rng_getFloat(rng); /* setup per particle individual stuff */ if (a<totpart) { @@ -1787,10 +1787,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* get orco */ if (tpsys && part->phystype == PART_PHYS_NO) { tpa = tpsys->particles + pa->num; - psys_particle_on_emitter(psmd,tpart->from,tpa->num,pa->num_dmcache,tpa->fuv,tpa->foffset,co,nor,0,0,sd.orco,0); + psys_particle_on_emitter(psmd, tpart->from, tpa->num, pa->num_dmcache, tpa->fuv, tpa->foffset, co, nor, 0, 0, sd.orco, 0); } else - psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,sd.orco,0); + psys_particle_on_emitter(psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co, nor, 0, 0, sd.orco, 0); /* get uvco & mcol */ num= pa->num_dmcache; @@ -1836,14 +1836,14 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* get orco */ if (part->childtype == PART_CHILD_FACES) { psys_particle_on_emitter(psmd, - PART_FROM_FACE, cpa->num,DMCACHE_ISCHILD, - cpa->fuv,cpa->foffset,co,nor,0,0,sd.orco,0); + PART_FROM_FACE, cpa->num, DMCACHE_ISCHILD, + cpa->fuv, cpa->foffset, co, nor, 0, 0, sd.orco, 0); } else { ParticleData *par = psys->particles + cpa->parent; psys_particle_on_emitter(psmd, part->from, - par->num,DMCACHE_ISCHILD,par->fuv, - par->foffset,co,nor,0,0,sd.orco,0); + par->num, DMCACHE_ISCHILD, par->fuv, + par->foffset, co, nor, 0, 0, sd.orco, 0); } /* get uvco & mcol */ @@ -1944,8 +1944,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem float time; if (k<=max_k) { - copy_v3_v3(state.co,(cache+k)->co); - copy_v3_v3(state.vel,(cache+k)->vel); + copy_v3_v3(state.co, (cache+k)->co); + copy_v3_v3(state.vel, (cache+k)->vel); } else continue; @@ -1954,8 +1954,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem curlen += len_v3v3((cache+k-1)->co, (cache+k)->co); time= curlen/strandlen; - copy_v3_v3(loc,state.co); - mul_m4_v3(re->viewmat,loc); + copy_v3_v3(loc, state.co); + mul_m4_v3(re->viewmat, loc); if (strandbuf) { copy_v3_v3(svert->co, loc); @@ -1969,8 +1969,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem if (k==1) { sd.first = 1; sd.time = 0.0f; - sub_v3_v3v3(loc0,loc1,loc); - add_v3_v3v3(loc0,loc1,loc0); + sub_v3_v3v3(loc0, loc1, loc); + add_v3_v3v3(loc0, loc1, loc0); particle_curve(re, obr, psmd->dm, ma, &sd, loc1, loc0, seed, pa_co); } @@ -1981,7 +1981,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem if (k) particle_curve(re, obr, psmd->dm, ma, &sd, loc, loc1, seed, pa_co); - copy_v3_v3(loc1,loc); + copy_v3_v3(loc1, loc); } } @@ -2006,7 +2006,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem continue; state.time = (part->draw & PART_ABS_PATH_TIME) ? -ct : ct; - psys_get_particle_on_path(&sim,a,&state,1); + psys_get_particle_on_path(&sim, a, &state, 1); if (psys->parent) mul_m4_v3(psys->parent->obmat, state.co); @@ -2043,7 +2043,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem } else { state.time=cfra; - if (psys_get_particle_state(&sim,a,&state,0)==0) + if (psys_get_particle_state(&sim, a, &state, 0)==0) continue; if (psys->parent) @@ -2364,7 +2364,7 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float /* Displace the verts, flag is set when done */ if (!vlr->v1->flag) - displace_render_vert(re, obr, &shi, vlr->v1,0, scale, mat, imat); + displace_render_vert(re, obr, &shi, vlr->v1, 0, scale, mat, imat); if (!vlr->v2->flag) displace_render_vert(re, obr, &shi, vlr->v2, 1, scale, mat, imat); @@ -2384,10 +2384,10 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float /* Recalculate the face normal - if flipped before, flip now */ if (vlr->v4) { - normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); } else { - normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); } } @@ -2503,9 +2503,9 @@ static void init_render_mball(Render *re, ObjectRen *obr) vlr->v4= 0; if (negative_scale) - normal_tri_v3( vlr->n,vlr->v1->co, vlr->v2->co, vlr->v3->co); + normal_tri_v3(vlr->n, vlr->v1->co, vlr->v2->co, vlr->v3->co); else - normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->flag= ME_SMOOTH; @@ -2520,9 +2520,9 @@ static void init_render_mball(Render *re, ObjectRen *obr) vlr1->v2= vlr1->v3; vlr1->v3= RE_findOrAddVert(obr, index[3]); if (negative_scale) - normal_tri_v3( vlr1->n,vlr1->v1->co, vlr1->v2->co, vlr1->v3->co); + normal_tri_v3(vlr1->n, vlr1->v1->co, vlr1->v2->co, vlr1->v3->co); else - normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); + normal_tri_v3(vlr1->n, vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); } } @@ -2611,7 +2611,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, vlr= RE_findOrAddVlak(obr, obr->totvlak++); vlr->v1= v1; vlr->v2= v2; vlr->v3= v3; vlr->v4= v4; - normal_quad_v3( n1,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_quad_v3(n1, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); copy_v3_v3(vlr->n, n1); @@ -2672,12 +2672,12 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, */ if ((dl->flag & DL_CYCL_V) && (dl->flag & DL_CYCL_U)) { - vlr= RE_findOrAddVlak(obr, UVTOINDEX(sizeu - 1, sizev - 1)); /* (m,n) */ - vlr1= RE_findOrAddVlak(obr, UVTOINDEX(0,0)); /* (0,0) */ + vlr= RE_findOrAddVlak(obr, UVTOINDEX(sizeu - 1, sizev - 1)); /* (m, n) */ + vlr1= RE_findOrAddVlak(obr, UVTOINDEX(0, 0)); /* (0, 0) */ add_v3_v3v3(n1, vlr->n, vlr1->n); - vlr2= RE_findOrAddVlak(obr, UVTOINDEX(0, sizev-1)); /* (0,n) */ + vlr2= RE_findOrAddVlak(obr, UVTOINDEX(0, sizev-1)); /* (0, n) */ add_v3_v3(n1, vlr2->n); - vlr3= RE_findOrAddVlak(obr, UVTOINDEX(sizeu-1, 0)); /* (m,0) */ + vlr3= RE_findOrAddVlak(obr, UVTOINDEX(sizeu-1, 0)); /* (m, 0) */ add_v3_v3(n1, vlr3->n); copy_v3_v3(vlr->v3->n, n1); copy_v3_v3(vlr1->v1->n, n1); @@ -2755,9 +2755,9 @@ static void init_render_dm(DerivedMesh *dm, Render *re, ObjectRen *obr, /* render normals are inverted in render */ if (vlr->v4) - len= normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + len= normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); else - len= normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + len= normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); vlr->mat= ma; vlr->flag= flag; @@ -2982,7 +2982,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) orco+= 3*dl_surf_to_renderdata(obr, dl, matar, orco, mat); } else { - int p1,p2,p3,p4; + int p1, p2, p3, p4; fp= dl->verts; startvert= obr->totvert; @@ -3478,15 +3478,15 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) MVert *mv= me->mvert; if (vlr->v4) - len= normal_quad_v3( vlr->n, mv[mf->v4].co, mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); + len= normal_quad_v3(vlr->n, mv[mf->v4].co, mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); else - len= normal_tri_v3( vlr->n,mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); + len= normal_tri_v3(vlr->n, mv[mf->v3].co, mv[mf->v2].co, mv[mf->v1].co); } else { if (vlr->v4) - len= normal_quad_v3( vlr->n,vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); + len= normal_quad_v3(vlr->n, vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co); else - len= normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); + len= normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); } vlr->mat= ma; @@ -3628,7 +3628,7 @@ static void initshadowbuf(Render *re, LampRen *lar, float mat[][4]) /* if (la->spsi<16) return; */ /* memory alloc */ - shb= (struct ShadBuf *)MEM_callocN( sizeof(struct ShadBuf),"initshadbuf"); + shb= (struct ShadBuf *)MEM_callocN(sizeof(struct ShadBuf), "initshadbuf"); lar->shb= shb; if (shb==NULL) return; @@ -3727,7 +3727,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) BLI_addtail(&re->lights, go); go->ob= ob; /* lamprens are in own list, for freeing */ - lar= (LampRen *)MEM_callocN(sizeof(LampRen),"lampren"); + lar= (LampRen *)MEM_callocN(sizeof(LampRen), "lampren"); BLI_addtail(&re->lampren, lar); go->lampren= lar; @@ -3838,7 +3838,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) lar->sunsky = (struct SunSky*)MEM_callocN(sizeof(struct SunSky), "sunskyren"); lar->sunsky->effect_type = la->sun_effect_type; - copy_v3_v3(vec,ob->obmat[2]); + copy_v3_v3(vec, ob->obmat[2]); normalize_v3(vec); InitSunSky(lar->sunsky, la->atm_turbidity, vec, la->horizon_brightness, @@ -3888,7 +3888,7 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) if (la->haint>0.0f) { re->flag |= R_LAMPHALO; - /* camera position (0,0,0) rotate around lamp */ + /* camera position (0, 0, 0) rotate around lamp */ lar->sh_invcampos[0]= -lar->co[0]; lar->sh_invcampos[1]= -lar->co[1]; lar->sh_invcampos[2]= -lar->co[2]; @@ -4177,7 +4177,7 @@ static void set_fullsample_trace_flag(Render *re, ObjectRen *obr) } /* split quads for predictable baking - * dir 1 == (0,1,2) (0,2,3), 2 == (1,3,0) (1,2,3) + * dir 1 == (0, 1, 2) (0, 2, 3), 2 == (1, 3, 0) (1, 2, 3) */ static void split_quads(ObjectRen *obr, int dir) { @@ -4218,8 +4218,8 @@ static void split_quads(ObjectRen *obr, int dir) vlr->v4 = vlr1->v4 = NULL; /* new normals */ - normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); - normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); + normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3(vlr1->n, vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); } /* clear the flag when not divided */ else vlr->flag &= ~R_DIVIDE_24; @@ -4283,8 +4283,8 @@ static void check_non_flat_quads(ObjectRen *obr) /* 1---2 1---2 0 = orig face, 1 = new face */ /* render normals are inverted in render! we calculate normal of single tria here */ - flen= normal_tri_v3( nor,vlr->v4->co, vlr->v3->co, vlr->v1->co); - if (flen==0.0f) normal_tri_v3( nor,vlr->v4->co, vlr->v2->co, vlr->v1->co); + flen= normal_tri_v3(nor, vlr->v4->co, vlr->v3->co, vlr->v1->co); + if (flen==0.0f) normal_tri_v3(nor, vlr->v4->co, vlr->v2->co, vlr->v1->co); xn = dot_v3v3(nor, vlr->n); @@ -4296,10 +4296,10 @@ static void check_non_flat_quads(ObjectRen *obr) vlr1->flag |= R_FACE_SPLIT; /* split direction based on vnorms */ - normal_tri_v3( nor,vlr->v1->co, vlr->v2->co, vlr->v3->co); + normal_tri_v3(nor, vlr->v1->co, vlr->v2->co, vlr->v3->co); d1 = dot_v3v3(nor, vlr->v1->n); - normal_tri_v3( nor,vlr->v2->co, vlr->v3->co, vlr->v4->co); + normal_tri_v3(nor, vlr->v2->co, vlr->v3->co, vlr->v4->co); d2 = dot_v3v3(nor, vlr->v2->n); if ( fabs(d1) < fabs(d2) ) vlr->flag |= R_DIVIDE_24; @@ -4325,8 +4325,8 @@ static void check_non_flat_quads(ObjectRen *obr) vlr->v4 = vlr1->v4 = NULL; /* new normals */ - normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co); - normal_tri_v3( vlr1->n,vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); + normal_tri_v3(vlr->n, vlr->v3->co, vlr->v2->co, vlr->v1->co); + normal_tri_v3(vlr1->n, vlr1->v3->co, vlr1->v2->co, vlr1->v1->co); /* Freestyle edge marks */ if (vlr->flag & R_DIVIDE_24) { @@ -5321,7 +5321,7 @@ static void speedvector_project(Render *re, float zco[2], const float co[3], con /* use cylinder projection */ if (pano) { float vec[3], ang; - /* angle between (0,0,-1) and (co) */ + /* angle between (0, 0, -1) and (co) */ copy_v3_v3(vec, co); ang= saacos(-vec[2]/sqrtf(vec[0]*vec[0] + vec[2]*vec[2])); @@ -5459,7 +5459,7 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve co3= mesh->co[face[2]]; co4= (face[3])? mesh->co[face[3]]: NULL; - interp_weights_face_v3( w,co1, co2, co3, co4, strand->vert->co); + interp_weights_face_v3(w, co1, co2, co3, co4, strand->vert->co); zero_v4(speed); madd_v4_v4fl(speed, winspeed[face[0]], w[0]); @@ -5710,7 +5710,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned // NT check for fluidsim special treatment fluidmd = (FluidsimModifierData *)modifiers_findByType(obi->ob, eModifierType_Fluidsim); if (fluidmd && fluidmd->fss && (fluidmd->fss->type & OB_FLUIDSIM_DOMAIN)) { - // use preloaded per vertex simulation data , only does calculation for step=1 + // use preloaded per vertex simulation data, only does calculation for step=1 // NOTE/FIXME - velocities and meshes loaded unnecessarily often during the database_fromscene_vectors calls... load_fluidsimspeedvectors(re, obi, oldobi->vectors, step); } @@ -5752,14 +5752,14 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned /* setup for shaded view or bake, so only lamps and materials are initialized */ /* type: - RE_BAKE_LIGHT: for shaded view, only add lamps - RE_BAKE_ALL: for baking, all lamps and objects - RE_BAKE_NORMALS:for baking, no lamps and only selected objects - RE_BAKE_AO: for baking, no lamps, but all objects - RE_BAKE_TEXTURE:for baking, no lamps, only selected objects - RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects - RE_BAKE_SHADOW: for baking, only shadows, but all objects -*/ + * RE_BAKE_LIGHT: for shaded view, only add lamps + * RE_BAKE_ALL: for baking, all lamps and objects + * RE_BAKE_NORMALS:for baking, no lamps and only selected objects + * RE_BAKE_AO: for baking, no lamps, but all objects + * RE_BAKE_TEXTURE:for baking, no lamps, only selected objects + * RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects + * RE_BAKE_SHADOW: for baking, only shadows, but all objects + */ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, const int type, Object *actob) { Object *camera; diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index fa7b9cb7ea1..da7e4335f7d 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -28,7 +27,6 @@ * \ingroup render */ - #include <math.h> #include <string.h> @@ -239,10 +237,10 @@ static void envmap_transmatrix(float mat[][4], int part) } copy_m4_m4(tmat, mat); - eul_to_mat4( rotmat,eul); + eul_to_mat4(rotmat, eul); mul_serie_m4(mat, tmat, rotmat, - NULL, NULL, NULL, - NULL, NULL, NULL); + NULL, NULL, NULL, + NULL, NULL, NULL); } /* ------------------------------------------------------------------------- */ diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index d8888cb4acc..b3c7a565d55 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/source/gammaCorrectionTables.c b/source/blender/render/intern/source/gammaCorrectionTables.c index c0e69323745..2613d04165a 100644 --- a/source/blender/render/intern/source/gammaCorrectionTables.c +++ b/source/blender/render/intern/source/gammaCorrectionTables.c @@ -1,7 +1,4 @@ /* - * Jitter offset table - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 260a2de4858..d454ea60705 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -1,6 +1,4 @@ /* - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -29,9 +27,6 @@ * \ingroup render */ - - - #include <stdio.h> #include <string.h> #include <fcntl.h> @@ -1482,10 +1477,10 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], const /* pixel coordinates */ - minx= MIN3(dxt[0],dyt[0],dxt[0]+dyt[0] ); - maxx= MAX3(dxt[0],dyt[0],dxt[0]+dyt[0] ); - miny= MIN3(dxt[1],dyt[1],dxt[1]+dyt[1] ); - maxy= MAX3(dxt[1],dyt[1],dxt[1]+dyt[1] ); + minx = MIN3(dxt[0], dyt[0], dxt[0] + dyt[0]); + maxx = MAX3(dxt[0], dyt[0], dxt[0] + dyt[0]); + miny = MIN3(dxt[1], dyt[1], dxt[1] + dyt[1]); + maxy = MAX3(dxt[1], dyt[1], dxt[1] + dyt[1]); /* tex_sharper has been removed */ minx= (maxx-minx)/2.0f; diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index 3e82bec7e52..e712950f4f8 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -94,10 +94,10 @@ static void init_render_jit(Render *re) if (lastjit!=re->r.osa || last_mblur_jit != re->r.mblur_samples) { memset(jit, 0, sizeof(jit)); - BLI_initjit(jit[0], re->r.osa); + BLI_jitter_init(jit[0], re->r.osa); memset(mblur_jit, 0, sizeof(mblur_jit)); - BLI_initjit(mblur_jit[0], re->r.mblur_samples); + BLI_jitter_init(mblur_jit[0], re->r.mblur_samples); } lastjit= re->r.osa; @@ -463,7 +463,7 @@ static void re_camera_params_get(Render *re, CameraParams *params, Object *cam_o re->viewdy= params->viewdy; re->viewplane= params->viewplane; - object_camera_mode(&re->r, cam_ob); + BKE_camera_object_mode(&re->r, cam_ob); } void RE_SetEnvmapCamera(Render *re, Object *cam_ob, float viewscale, float clipsta, float clipend) @@ -471,8 +471,8 @@ void RE_SetEnvmapCamera(Render *re, Object *cam_ob, float viewscale, float clips CameraParams params; /* setup parameters */ - camera_params_init(¶ms); - camera_params_from_object(¶ms, cam_ob); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, cam_ob); params.lens= 16.0f*viewscale; params.sensor_x= 32.0f; @@ -482,8 +482,8 @@ void RE_SetEnvmapCamera(Render *re, Object *cam_ob, float viewscale, float clips params.clipend= clipend; /* compute matrix, viewplane, .. */ - camera_params_compute_viewplane(¶ms, re->winx, re->winy, 1.0f, 1.0f); - camera_params_compute_matrix(¶ms); + BKE_camera_params_compute_viewplane(¶ms, re->winx, re->winy, 1.0f, 1.0f); + BKE_camera_params_compute_matrix(¶ms); /* extract results */ re_camera_params_get(re, ¶ms, cam_ob); @@ -496,16 +496,16 @@ void RE_SetCamera(Render *re, Object *cam_ob) CameraParams params; /* setup parameters */ - camera_params_init(¶ms); - camera_params_from_object(¶ms, cam_ob); + BKE_camera_params_init(¶ms); + BKE_camera_params_from_object(¶ms, cam_ob); params.use_fields= (re->r.mode & R_FIELDS); params.field_second= (re->flag & R_SEC_FIELD); params.field_odd= (re->r.mode & R_ODDFIELD); /* compute matrix, viewplane, .. */ - camera_params_compute_viewplane(¶ms, re->winx, re->winy, re->r.xasp, re->r.yasp); - camera_params_compute_matrix(¶ms); + BKE_camera_params_compute_viewplane(¶ms, re->winx, re->winy, re->r.xasp, re->r.yasp); + BKE_camera_params_compute_matrix(¶ms); /* extract results */ re_camera_params_get(re, ¶ms, cam_ob); diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index 436eaefd155..a1cee6637f4 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,7 +29,6 @@ * \ingroup render */ - #include <math.h> #include <stdio.h> #include <stdlib.h> @@ -1627,11 +1625,11 @@ static void *exec_strandsurface_sample(void *data) co4= mesh->co[face[3]]; mid_v3_v3v3(co, co1, co3); - normal_quad_v3( n,co1, co2, co3, co4); + normal_quad_v3(n, co1, co2, co3, co4); } else { cent_tri_v3(co, co1, co2, co3); - normal_tri_v3( n,co1, co2, co3); + normal_tri_v3(n, co1, co2, co3); } negate_v3(n); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 416acae2f0d..30788f67238 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,7 +29,6 @@ * \ingroup render */ - #include <math.h> #include <limits.h> #include <string.h> @@ -176,7 +174,7 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs) fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp); } - BLI_exec_cb(G.main, NULL, BLI_CB_EVT_RENDER_STATS); + BLI_callback_exec(G.main, NULL, BLI_CB_EVT_RENDER_STATS); fputc('\n', stdout); fflush(stdout); @@ -544,7 +542,9 @@ void RE_SetWindow(Render *re, rctf *viewplane, float clipsta, float clipend) re->clipend= clipend; re->r.mode &= ~R_ORTHO; - perspective_m4( re->winmat,re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); + perspective_m4(re->winmat, + re->viewplane.xmin, re->viewplane.xmax, + re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); } @@ -557,7 +557,9 @@ void RE_SetOrtho(Render *re, rctf *viewplane, float clipsta, float clipend) re->clipend= clipend; re->r.mode |= R_ORTHO; - orthographic_m4( re->winmat,re->viewplane.xmin, re->viewplane.xmax, re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); + orthographic_m4(re->winmat, + re->viewplane.xmin, re->viewplane.xmax, + re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend); } void RE_SetView(Render *re, float mat[][4]) @@ -1951,7 +1953,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r } /* get panorama & ortho, only after camera is set */ - object_camera_mode(&scene->r, camera_override ? camera_override : scene->camera); + BKE_camera_object_mode(&scene->r, camera_override ? camera_override : scene->camera); /* forbidden combinations */ if (scene->r.mode & R_PANORAMA) { @@ -2100,7 +2102,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr if (render_initialize_from_main(re, bmain, scene, srl, camera_override, lay, 0, 0)) { MEM_reset_peak_memory(); - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); do_render_all_options(re); @@ -2118,10 +2120,10 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr } } - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ } - BLI_exec_cb(re->main, (ID *)scene, G.afbreek ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); + BLI_callback_exec(re->main, (ID *)scene, G.afbreek ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); /* UGLY WARNING */ G.rendering= 0; @@ -2208,7 +2210,7 @@ static int do_write_image_or_movie(Render *re, Main *bmain, Scene *scene, bMovie BLI_timestr(re->i.lastframetime, name); printf(" Time: %s", name); - BLI_exec_cb(G.main, NULL, BLI_CB_EVT_RENDER_STATS); + BLI_callback_exec(G.main, NULL, BLI_CB_EVT_RENDER_STATS); fputc('\n', stdout); fflush(stdout); /* needed for renderd !! (not anymore... (ton)) */ @@ -2243,7 +2245,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri if (nf >= 0 && nf >= scene->r.sfra && nf <= scene->r.efra) { scene->r.cfra = re->r.cfra = nf; - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); do_render_all_options(re); totrendered++; @@ -2254,7 +2256,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri } if (G.afbreek == 0) { - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ } } else { @@ -2308,7 +2310,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri re->r.cfra= scene->r.cfra; /* weak.... */ /* run callbacs before rendering, before the scene is updated */ - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); do_render_all_options(re); @@ -2334,7 +2336,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri } if (G.afbreek==0) { - BLI_exec_cb(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */ } } } @@ -2350,7 +2352,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri re->flag &= ~R_ANIMATION; - BLI_exec_cb(re->main, (ID *)scene, G.afbreek ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); + BLI_callback_exec(re->main, (ID *)scene, G.afbreek ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); /* UGLY WARNING */ G.rendering= 0; @@ -2465,7 +2467,7 @@ void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, const char ibuf_clip = IMB_allocImBuf(layer->rectx, layer->recty, 32, IB_rectfloat); if (ibuf_clip) { - IMB_rectcpy(ibuf_clip, ibuf, 0,0, x,y, layer->rectx, layer->recty); + IMB_rectcpy(ibuf_clip, ibuf, 0, 0, x, y, layer->rectx, layer->recty); memcpy(layer->rectf, ibuf_clip->rect_float, sizeof(float)*4*layer->rectx*layer->recty); IMB_freeImBuf(ibuf_clip); @@ -2494,7 +2496,7 @@ void RE_result_load_from_file(RenderResult *result, ReportList *reports, const c } } -const float default_envmap_layout[] = { 0,0, 1,0, 2,0, 0,1, 1,1, 2,1 }; +const float default_envmap_layout[] = { 0, 0, 1, 0, 2, 0, 0, 1, 1, 1, 2, 1 }; int RE_WriteEnvmapResult(struct ReportList *reports, Scene *scene, EnvMap *env, const char *relpath, const char imtype, float layout[12]) { @@ -2502,7 +2504,7 @@ int RE_WriteEnvmapResult(struct ReportList *reports, Scene *scene, EnvMap *env, ImBuf *ibuf=NULL; int ok; int dx; - int maxX=0,maxY=0,i=0; + int maxX=0, maxY=0, i=0; char filepath[FILE_MAX]; if (env->cube[1]==NULL) { @@ -2517,8 +2519,8 @@ int RE_WriteEnvmapResult(struct ReportList *reports, Scene *scene, EnvMap *env, if (env->type == ENV_CUBE) { for (i=0; i < 12; i+=2) { - maxX = MAX2(maxX,layout[i] + 1); - maxY = MAX2(maxY,layout[i+1] + 1); + maxX = MAX2(maxX, layout[i] + 1); + maxY = MAX2(maxY, layout[i+1] + 1); } ibuf = IMB_allocImBuf(maxX*dx, maxY*dx, 24, IB_rectfloat); diff --git a/source/blender/render/intern/source/pixelblending.c b/source/blender/render/intern/source/pixelblending.c index 48ce611fed7..522a41d9af7 100644 --- a/source/blender/render/intern/source/pixelblending.c +++ b/source/blender/render/intern/source/pixelblending.c @@ -1,10 +1,4 @@ /* - * pixelblending.c - * - * Functions to blend pixels with or without alpha, in various formats - * nzc - June 2000 - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -31,6 +25,9 @@ /** \file blender/render/intern/source/pixelblending.c * \ingroup render + * + * Functions to blend pixels with or without alpha, in various formats + * nzc - June 2000 */ diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c index 826a31e17a8..ac48a5f41f2 100644 --- a/source/blender/render/intern/source/pixelshading.c +++ b/source/blender/render/intern/source/pixelshading.c @@ -351,7 +351,7 @@ int shadeHaloFloat(HaloRen *har, float *col, int zz, rc= hashvectf + (ofs % 768); - fac= fabsf( rc[1]*(har->rad*fabsf(rc[0]) - radist) ); + fac = fabsf(rc[1] * (har->rad * fabsf(rc[0]) - radist)); if (fac< 1.0f) { ringf+= (1.0f-fac); @@ -360,7 +360,7 @@ int shadeHaloFloat(HaloRen *har, float *col, int zz, } if (har->type & HA_VECT) { - dist= fabsf( har->cos*(yn) - har->sin*(xn) )/har->rad; + dist= fabsf(har->cos * (yn) - har->sin * (xn)) / har->rad; if (dist>1.0f) dist= 1.0f; if (har->tex) { zn= har->sin*xn - har->cos*yn; diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index 54474891810..8bbb16739f7 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -121,7 +121,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa /* Just to create a valid rendering context for particles */ psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, 0); - dm = mesh_create_derived_render(re->scene, ob,CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); + dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); if ( !psys_check_enabled(ob, psys)) { psys_render_restore(ob, psys); diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index bb08911a1eb..c68fb578d4c 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -88,7 +88,7 @@ static int test_break(void *data) static void RE_rayobject_config_control(RayObject *r, Render *re) { if (RE_rayobject_isRayAPI(r)) { - r = RE_rayobject_align( r ); + r = RE_rayobject_align(r); r->control.data = re; r->control.test_break = test_break; } @@ -177,7 +177,7 @@ void freeraytree(Render *re) #ifdef RE_RAYCOUNTER { RayCounter sum; - memset( &sum, 0, sizeof(sum) ); + memset(&sum, 0, sizeof(sum)); int i; for (i=0; i<BLENDER_MAX_THREADS; i++) RE_RC_MERGE(&sum, re_rc_counter+i); @@ -252,17 +252,17 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); if (is_raytraceable_vlr(re, vlr)) { if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) { - RE_rayobject_add( raytree, RE_vlakprimitive_from_vlak( vlakprimitive, obi, vlr ) ); + RE_rayobject_add(raytree, RE_vlakprimitive_from_vlak(vlakprimitive, obi, vlr)); vlakprimitive++; } else { RE_rayface_from_vlak(face, obi, vlr); - RE_rayobject_add( raytree, RE_rayobject_unalignRayFace(face) ); + RE_rayobject_add(raytree, RE_rayobject_unalignRayFace(face)); face++; } } } - RE_rayobject_done( raytree ); + RE_rayobject_done(raytree); /* in case of cancel during build, raytree is not usable */ if (test_break(re)) @@ -355,7 +355,7 @@ static void makeraytree_single(Render *re) break; if (obj) - RE_rayobject_add( re->raytree, obj ); + RE_rayobject_add(re->raytree, obj); } else { int v; @@ -370,7 +370,7 @@ static void makeraytree_single(Render *re) if (is_raytraceable_vlr(re, vlr)) { if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) { RayObject *obj = RE_vlakprimitive_from_vlak( vlakprimitive, obi, vlr ); - RE_rayobject_add( raytree, obj ); + RE_rayobject_add(raytree, obj); vlakprimitive++; } else { @@ -383,7 +383,7 @@ static void makeraytree_single(Render *re) mul_m4_v3(obi->mat, face->v4); } - RE_rayobject_add( raytree, RE_rayobject_unalignRayFace(face) ); + RE_rayobject_add(raytree, RE_rayobject_unalignRayFace(face)); face++; } } @@ -395,7 +395,7 @@ static void makeraytree_single(Render *re) re->i.infostr= "Raytree.. building"; re->stats_draw(re->sdh, &re->i); - RE_rayobject_done( raytree ); + RE_rayobject_done(raytree); } } @@ -424,7 +424,7 @@ void makeraytree(Render *re) //Calculate raytree max_size //This is ONLY needed to kept a bogus behavior of SUN and HEMI lights INIT_MINMAX(min, max); - RE_rayobject_merge_bb( re->raytree, min, max ); + RE_rayobject_merge_bb(re->raytree, min, max); for (i=0; i<3; i++) { min[i] += 0.01f; max[i] += 0.01f; @@ -439,7 +439,7 @@ void makeraytree(Render *re) } #ifdef RE_RAYCOUNTER - memset( re_rc_counter, 0, sizeof(re_rc_counter) ); + memset(re_rc_counter, 0, sizeof(re_rc_counter)); #endif } @@ -692,7 +692,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, con float dist_mir = origshi->mat->dist_mir; copy_v3_v3(isec.start, start); - copy_v3_v3(isec.dir, dir ); + copy_v3_v3(isec.dir, dir); isec.dist = dist_mir > 0 ? dist_mir : RE_RAYTRACE_MAXDIST; isec.mode= RE_RAY_MIRROR; isec.check = RE_CHECK_VLR_RENDER; @@ -1239,7 +1239,7 @@ static int adaptive_sample_contrast_val(int samples, float prev, float val, floa /* if the last sample's contribution to the total value was below a small threshold * (i.e. the samples taken are very similar), then taking more samples that are probably * going to be the same is wasting effort */ - if (fabsf( prev/(float)(samples-1) - val/(float)samples ) < thresh) { + if (fabsf(prev / (float)(samples - 1) - val / (float)samples ) < thresh) { return 1; } else @@ -1314,7 +1314,7 @@ static void trace_refract(float col[4], ShadeInput *shi, ShadeResult *shr) /* get a quasi-random vector from a phong-weighted disc */ QMC_samplePhong(samp3d, qsa, shi->thread, samples, blur); - ortho_basis_v3v3_v3( orthx, orthy,v_refract); + ortho_basis_v3v3_v3(orthx, orthy, v_refract); mul_v3_fl(orthx, samp3d[0]); mul_v3_fl(orthy, samp3d[1]); @@ -1410,7 +1410,7 @@ static void trace_reflect(float col[3], ShadeInput *shi, ShadeResult *shr, float mul_v3_fl(orthy, samp3d[1]*aniso); } else { - ortho_basis_v3v3_v3( orthx, orthy,shi->vn); + ortho_basis_v3v3_v3(orthx, orthy, shi->vn); mul_v3_fl(orthx, samp3d[0]); mul_v3_fl(orthy, samp3d[1]); } @@ -1679,7 +1679,7 @@ static int UNUSED_FUNCTION(ray_trace_shadow_rad)(ShadeInput *ship, ShadeResult * vec[2]-= vec[2]; } - copy_v3_v3(isec.dir, vec ); + copy_v3_v3(isec.dir, vec); isec.dist = RE_RAYTRACE_MAXDIST; if (RE_rayobject_raycast(R.raytree, &isec)) { @@ -1889,7 +1889,7 @@ static void ray_ao_qmc(ShadeInput *shi, float ao[3], float env[3]) isec.lay= -1; copy_v3_v3(isec.start, shi->co); - RE_rayobject_hint_bb( R.raytree, &point_hint, isec.start, isec.start ); + RE_rayobject_hint_bb(R.raytree, &point_hint, isec.start, isec.start); isec.hint = &point_hint; zero_v3(ao); @@ -1913,7 +1913,7 @@ static void ray_ao_qmc(ShadeInput *shi, float ao[3], float env[3]) copy_v3_v3(nrm, shi->facenor); } - ortho_basis_v3v3_v3( up, side,nrm); + ortho_basis_v3v3_v3(up, side, nrm); /* sampling init */ if (R.wrld.ao_samp_method==WO_AOSAMP_HALTON) { @@ -2029,7 +2029,7 @@ static void ray_ao_spheresamp(ShadeInput *shi, float ao[3], float env[3]) isec.lay= -1; copy_v3_v3(isec.start, shi->co); - RE_rayobject_hint_bb( R.raytree, &point_hint, isec.start, isec.start ); + RE_rayobject_hint_bb(R.raytree, &point_hint, isec.start, isec.start); isec.hint = &point_hint; zero_v3(ao); @@ -2237,7 +2237,7 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, const float lampco[3], for (i=0; i<totjitco; i++) { DO_MINMAX(jitco[i], min, max); } - RE_rayobject_hint_bb( R.raytree, &bb_hint, min, max); + RE_rayobject_hint_bb(R.raytree, &bb_hint, min, max); isec->hint = &bb_hint; isec->check = RE_CHECK_VLR_RENDER; @@ -2262,10 +2262,10 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, const float lampco[3], /* calc tangent plane vectors */ sub_v3_v3v3(v, co, lampco); normalize_v3(v); - ortho_basis_v3v3_v3( ru, rv,v); + ortho_basis_v3v3_v3(ru, rv, v); /* sampling, returns quasi-random vector in area_size disc */ - QMC_sampleDisc(samp3d, qsa, shi->thread, samples,lar->area_size); + QMC_sampleDisc(samp3d, qsa, shi->thread, samples, lar->area_size); /* distribute disc samples across the tangent plane */ s[0] = samp3d[0]*ru[0] + samp3d[1]*rv[0]; @@ -2386,7 +2386,7 @@ static void ray_shadow_jitter(ShadeInput *shi, LampRen *lar, const float lampco[ copy_v3_v3(isec->start, shi->co); isec->orig.ob = shi->obi; isec->orig.face = shi->vlr; - RE_rayobject_hint_bb( R.raytree, &point_hint, isec->start, isec->start ); + RE_rayobject_hint_bb(R.raytree, &point_hint, isec->start, isec->start); isec->hint = &point_hint; while (a--) { diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index 0740597fce5..a5966288220 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -1,5 +1,4 @@ -/* - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c index 4c49d2cc7fe..521b295fb0b 100644 --- a/source/blender/render/intern/source/render_texture.c +++ b/source/blender/render/intern/source/render_texture.c @@ -227,7 +227,7 @@ static int blend(Tex *tex, float *texvec, TexResult *texres) texres->tin= (2.0f+x+y)/4.0f; } else if (tex->stype==TEX_RAD) { /* radial */ - texres->tin= (atan2(y,x) / (2*M_PI) + 0.5); + texres->tin= (atan2(y, x) / (2*M_PI) + 0.5); } else { /* sphere TEX_SPHERE */ texres->tin= 1.0-sqrt(x*x+ y*y+texvec[2]*texvec[2]); @@ -870,7 +870,7 @@ static int cubemap(MTex *mtex, VlakRen *vlr, float *n, float x, float y, float z /* test for v1, vlr can be faked for baking */ if (vlr->v1 && vlr->v1->orco) { float nor[3]; - normal_tri_v3( nor,vlr->v1->orco, vlr->v2->orco, vlr->v3->orco); + normal_tri_v3(nor, vlr->v1->orco, vlr->v2->orco, vlr->v3->orco); if ( fabs(nor[0])<fabs(nor[2]) && fabs(nor[1])<fabs(nor[2]) ) vlr->puno |= ME_PROJXY; else if ( fabs(nor[0])<fabs(nor[1]) && fabs(nor[2])<fabs(nor[1]) ) vlr->puno |= ME_PROJXZ; @@ -969,8 +969,8 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d fx = (t[0] + 1.0f) / 2.0f; fy = (t[1] + 1.0f) / 2.0f; } - else if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy,t[0], t[1], t[2]); - else if (wrap==MTEX_SPHERE) map_to_sphere( &fx, &fy,t[0], t[1], t[2]); + else if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy, t[0], t[1], t[2]); + else if (wrap==MTEX_SPHERE) map_to_sphere(&fx, &fy, t[0], t[1], t[2]); else { if (texco==TEXCO_OBJECT) cubemap_ob(ob, n, t[0], t[1], t[2], &fx, &fy); else if (texco==TEXCO_GLOB) cubemap_glob(n, t[0], t[1], t[2], &fx, &fy); @@ -1041,20 +1041,20 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d } if (ok) { if (wrap==MTEX_TUBE) { - map_to_tube( area, area+1,t[0], t[1], t[2]); - map_to_tube( area+2, area+3,t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2]); - map_to_tube( area+4, area+5,t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2]); + map_to_tube(area, area+1, t[0], t[1], t[2]); + map_to_tube(area + 2, area + 3, t[0] + dxt[0], t[1] + dxt[1], t[2] + dxt[2]); + map_to_tube(area + 4, area + 5, t[0] + dyt[0], t[1] + dyt[1], t[2] + dyt[2]); } else { - map_to_sphere(area,area+1,t[0], t[1], t[2]); - map_to_sphere( area+2, area+3,t[0]+dxt[0], t[1]+dxt[1], t[2]+dxt[2]); - map_to_sphere( area+4, area+5,t[0]+dyt[0], t[1]+dyt[1], t[2]+dyt[2]); + map_to_sphere(area, area+1, t[0], t[1], t[2]); + map_to_sphere(area + 2, area + 3, t[0] + dxt[0], t[1] + dxt[1], t[2] + dxt[2]); + map_to_sphere(area + 4, area + 5, t[0] + dyt[0], t[1] + dyt[1], t[2] + dyt[2]); } areaflag= 1; } else { - if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy,t[0], t[1], t[2]); - else map_to_sphere( &fx, &fy,t[0], t[1], t[2]); + if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy, t[0], t[1], t[2]); + else map_to_sphere(&fx, &fy, t[0], t[1], t[2]); dxt[0]/= 2.0f; dxt[1]/= 2.0f; dyt[0]/= 2.0f; @@ -2102,9 +2102,9 @@ static int ntap_bump_compute(NTapBump *ntap_bump, ShadeInput *shi, MTex *mtex, T // generate the surface derivatives in object space mul_m3_v3(view2obj, dPdx); - mul_m3_v3( view2obj, dPdy ); + mul_m3_v3(view2obj, dPdy); // generate the unit normal in object space - mul_transposed_m3_v3( obj2view, vN ); + mul_transposed_m3_v3(obj2view, vN); normalize_v3(vN); } @@ -2126,9 +2126,9 @@ static int ntap_bump_compute(NTapBump *ntap_bump, ShadeInput *shi, MTex *mtex, T fMagnitude = abs_fDet; if ( mtex->texflag & MTEX_BUMP_OBJECTSPACE ) { // pre do transform of texres->nor by the inverse transposed of obj2view - mul_transposed_m3_v3( view2obj, vN ); - mul_transposed_m3_v3( view2obj, ntap_bump->vR1 ); - mul_transposed_m3_v3( view2obj, ntap_bump->vR2 ); + mul_transposed_m3_v3(view2obj, vN); + mul_transposed_m3_v3(view2obj, ntap_bump->vR1); + mul_transposed_m3_v3(view2obj, ntap_bump->vR2); fMagnitude *= len_v3(vN); } @@ -3077,8 +3077,8 @@ void do_sky_tex(const float rco[3], float lo[3], const float dxyview[2], float h case TEXCO_H_SPHEREMAP: case TEXCO_H_TUBEMAP: if (skyflag & WO_ZENUP) { - if (mtex->texco==TEXCO_H_TUBEMAP) map_to_tube( tempvec, tempvec+1,lo[0], lo[2], lo[1]); - else map_to_sphere( tempvec, tempvec+1,lo[0], lo[2], lo[1]); + if (mtex->texco==TEXCO_H_TUBEMAP) map_to_tube( tempvec, tempvec+1, lo[0], lo[2], lo[1]); + else map_to_sphere(tempvec, tempvec+1, lo[0], lo[2], lo[1]); /* tube/spheremap maps for outside view, not inside */ tempvec[0]= 1.0f-tempvec[0]; /* only top half */ @@ -3683,7 +3683,7 @@ void RE_sample_material_color(Material *mat, float color[3], float *alpha, const if (!mvert || !mface || !mat) return; v1=mface[face_index].v1, v2=mface[face_index].v2, v3=mface[face_index].v3; if (hit_quad) {v2=mface[face_index].v3; v3=mface[face_index].v4;} - normal_tri_v3( normal, mvert[v1].co, mvert[v2].co, mvert[v3].co); + normal_tri_v3(normal, mvert[v1].co, mvert[v2].co, mvert[v3].co); /* generate shadeinput with data required */ shi.mat = mat; @@ -3737,7 +3737,7 @@ void RE_sample_material_color(Material *mat, float color[3], float *alpha, const } } /* active uv map */ - shi.actuv = CustomData_get_active_layer_index(&orcoDm->faceData,CD_MTFACE) - layer_index; + shi.actuv = CustomData_get_active_layer_index(&orcoDm->faceData, CD_MTFACE) - layer_index; shi.totuv = layers; } diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index c0267a3b44d..04e1bee4376 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -889,10 +889,10 @@ static PixStrMain *addpsmain(ListBase *lb) { PixStrMain *psm; - psm= (PixStrMain *)MEM_mallocN(sizeof(PixStrMain),"pixstrMain"); + psm= (PixStrMain *)MEM_mallocN(sizeof(PixStrMain), "pixstrMain"); BLI_addtail(lb, psm); - psm->ps= (PixStr *)MEM_mallocN(4096*sizeof(PixStr),"pixstr"); + psm->ps= (PixStr *)MEM_mallocN(4096*sizeof(PixStr), "pixstr"); psm->counter= 0; return psm; diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c index f3b6bfb80ea..4a9e4be7f86 100644 --- a/source/blender/render/intern/source/renderdatabase.c +++ b/source/blender/render/intern/source/renderdatabase.c @@ -254,7 +254,7 @@ VertRen *RE_findOrAddVert(ObjectRen *obr, int nr) int a; if (nr<0) { - printf("error in findOrAddVert: %d\n",nr); + printf("error in findOrAddVert: %d\n", nr); return NULL; } a= nr>>8; @@ -262,7 +262,7 @@ VertRen *RE_findOrAddVert(ObjectRen *obr, int nr) if (a>=obr->vertnodeslen-1) { /* Need to allocate more columns..., and keep last element NULL for free loop */ temp= obr->vertnodes; - obr->vertnodes= MEM_mallocN(sizeof(VertTableNode)*(obr->vertnodeslen+TABLEINITSIZE) , "vertnodes"); + obr->vertnodes= MEM_mallocN(sizeof(VertTableNode)*(obr->vertnodeslen+TABLEINITSIZE), "vertnodes"); if (temp) memcpy(obr->vertnodes, temp, obr->vertnodeslen*sizeof(VertTableNode)); memset(obr->vertnodes+obr->vertnodeslen, 0, TABLEINITSIZE*sizeof(VertTableNode)); @@ -274,7 +274,7 @@ VertRen *RE_findOrAddVert(ObjectRen *obr, int nr) if (v==NULL) { int i; - v= (VertRen *)MEM_callocN(256*sizeof(VertRen),"findOrAddVert"); + v= (VertRen *)MEM_callocN(256*sizeof(VertRen), "findOrAddVert"); obr->vertnodes[a].vert= v; for (i= (nr & 0xFFFFFF00), a=0; a<256; a++, i++) { @@ -497,7 +497,7 @@ VlakRen *RE_findOrAddVlak(ObjectRen *obr, int nr) int a; if (nr<0) { - printf("error in findOrAddVlak: %d\n",nr); + printf("error in findOrAddVlak: %d\n", nr); return obr->vlaknodes[0].vlak; } a= nr>>8; @@ -505,7 +505,7 @@ VlakRen *RE_findOrAddVlak(ObjectRen *obr, int nr) if (a>=obr->vlaknodeslen-1) { /* Need to allocate more columns..., and keep last element NULL for free loop */ temp= obr->vlaknodes; - obr->vlaknodes= MEM_mallocN(sizeof(VlakTableNode)*(obr->vlaknodeslen+TABLEINITSIZE) , "vlaknodes"); + obr->vlaknodes= MEM_mallocN(sizeof(VlakTableNode)*(obr->vlaknodeslen+TABLEINITSIZE), "vlaknodes"); if (temp) memcpy(obr->vlaknodes, temp, obr->vlaknodeslen*sizeof(VlakTableNode)); memset(obr->vlaknodes+obr->vlaknodeslen, 0, TABLEINITSIZE*sizeof(VlakTableNode)); @@ -518,7 +518,7 @@ VlakRen *RE_findOrAddVlak(ObjectRen *obr, int nr) if (v==NULL) { int i; - v= (VlakRen *)MEM_callocN(256*sizeof(VlakRen),"findOrAddVlak"); + v= (VlakRen *)MEM_callocN(256*sizeof(VlakRen), "findOrAddVlak"); obr->vlaknodes[a].vlak= v; for (i= (nr & 0xFFFFFF00), a=0; a<256; a++, i++) @@ -668,7 +668,7 @@ StrandRen *RE_findOrAddStrand(ObjectRen *obr, int nr) int a; if (nr<0) { - printf("error in findOrAddStrand: %d\n",nr); + printf("error in findOrAddStrand: %d\n", nr); return obr->strandnodes[0].strand; } a= nr>>8; @@ -676,7 +676,7 @@ StrandRen *RE_findOrAddStrand(ObjectRen *obr, int nr) if (a>=obr->strandnodeslen-1) { /* Need to allocate more columns..., and keep last element NULL for free loop */ temp= obr->strandnodes; - obr->strandnodes= MEM_mallocN(sizeof(StrandTableNode)*(obr->strandnodeslen+TABLEINITSIZE) , "strandnodes"); + obr->strandnodes= MEM_mallocN(sizeof(StrandTableNode)*(obr->strandnodeslen+TABLEINITSIZE), "strandnodes"); if (temp) memcpy(obr->strandnodes, temp, obr->strandnodeslen*sizeof(StrandTableNode)); memset(obr->strandnodes+obr->strandnodeslen, 0, TABLEINITSIZE*sizeof(StrandTableNode)); @@ -689,7 +689,7 @@ StrandRen *RE_findOrAddStrand(ObjectRen *obr, int nr) if (v==NULL) { int i; - v= (StrandRen *)MEM_callocN(256*sizeof(StrandRen),"findOrAddStrand"); + v= (StrandRen *)MEM_callocN(256*sizeof(StrandRen), "findOrAddStrand"); obr->strandnodes[a].strand= v; for (i= (nr & 0xFFFFFF00), a=0; a<256; a++, i++) @@ -903,7 +903,7 @@ HaloRen *RE_findOrAddHalo(ObjectRen *obr, int nr) int a; if (nr<0) { - printf("error in findOrAddHalo: %d\n",nr); + printf("error in findOrAddHalo: %d\n", nr); return NULL; } a= nr>>8; @@ -913,7 +913,7 @@ HaloRen *RE_findOrAddHalo(ObjectRen *obr, int nr) // TABLEINITSIZE, obr->blohalen+TABLEINITSIZE ); temp=obr->bloha; - obr->bloha=(HaloRen**)MEM_callocN(sizeof(void*)*(obr->blohalen+TABLEINITSIZE) , "Bloha"); + obr->bloha=(HaloRen**)MEM_callocN(sizeof(void*)*(obr->blohalen+TABLEINITSIZE), "Bloha"); if (temp) memcpy(obr->bloha, temp, obr->blohalen*sizeof(void*)); memset(&(obr->bloha[obr->blohalen]), 0, TABLEINITSIZE*sizeof(void*)); obr->blohalen+=TABLEINITSIZE; /*Does this really need to be power of 2?*/ @@ -922,7 +922,7 @@ HaloRen *RE_findOrAddHalo(ObjectRen *obr, int nr) h= obr->bloha[a]; if (h==NULL) { - h= (HaloRen *)MEM_callocN(256*sizeof(HaloRen),"findOrAdHalo"); + h= (HaloRen *)MEM_callocN(256*sizeof(HaloRen), "findOrAdHalo"); obr->bloha[a]= h; } h+= (nr & 255); @@ -1050,7 +1050,7 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater HaloRen *har; MTex *mtex; float tin, tr, tg, tb, ta; - float xn, yn, zn, texvec[3], hoco[4], hoco1[4], in[3],tex[3],out[3]; + float xn, yn, zn, texvec[3], hoco[4], hoco1[4], in[3], tex[3], out[3]; int i, hasrgb; if (hasize==0.0f) return NULL; @@ -1124,24 +1124,24 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater } else if (mtex->texco & TEXCO_OBJECT) { if (mtex->object) - mul_m4_v3(mtex->object->imat_ren,texvec); + mul_m4_v3(mtex->object->imat_ren, texvec); } else if (mtex->texco & TEXCO_GLOB) { - copy_v3_v3(texvec,vec); + copy_v3_v3(texvec, vec); } else if (mtex->texco & TEXCO_UV && uvco) { - int uv_index=CustomData_get_named_layer_index(&dm->faceData,CD_MTFACE,mtex->uvname); + int uv_index=CustomData_get_named_layer_index(&dm->faceData, CD_MTFACE, mtex->uvname); if (uv_index<0) - uv_index=CustomData_get_active_layer_index(&dm->faceData,CD_MTFACE); + uv_index=CustomData_get_active_layer_index(&dm->faceData, CD_MTFACE); - uv_index-=CustomData_get_layer_index(&dm->faceData,CD_MTFACE); + uv_index-=CustomData_get_layer_index(&dm->faceData, CD_MTFACE); texvec[0]=2.0f*uvco[2*uv_index]-1.0f; texvec[1]=2.0f*uvco[2*uv_index+1]-1.0f; texvec[2]=0.0f; } else if (mtex->texco & TEXCO_PARTICLE) { - /* particle coordinates in range [0,1] */ + /* particle coordinates in range [0, 1] */ texvec[0] = 2.f * pa_co[0] - 1.f; texvec[1] = 2.f * pa_co[1] - 1.f; texvec[2] = pa_co[2]; @@ -1162,7 +1162,7 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater out[1]=har->g; out[2]=har->b; - texture_rgb_blend(in,tex,out,tin,mtex->colfac,mtex->blendtype); + texture_rgb_blend(in, tex, out, tin, mtex->colfac, mtex->blendtype); // zn= 1.0-yn; //har->r= (yn*tr+ zn*ma->r); //har->g= (yn*tg+ zn*ma->g); @@ -1177,13 +1177,13 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater tin = ta; if (mtex->mapto & MAP_ALPHA) - har->alfa = texture_value_blend(mtex->def_var,har->alfa,tin,mtex->alphafac,mtex->blendtype); + har->alfa = texture_value_blend(mtex->def_var, har->alfa, tin, mtex->alphafac, mtex->blendtype); if (mtex->mapto & MAP_HAR) - har->hard = 1.0f+126.0f*texture_value_blend(mtex->def_var,((float)har->hard)/127.0f,tin,mtex->hardfac,mtex->blendtype); + har->hard = 1.0f+126.0f*texture_value_blend(mtex->def_var, ((float)har->hard)/127.0f, tin, mtex->hardfac, mtex->blendtype); if (mtex->mapto & MAP_RAYMIRR) - har->hasize = 100.0f*texture_value_blend(mtex->def_var,har->hasize/100.0f,tin,mtex->raymirrfac,mtex->blendtype); + har->hasize = 100.0f*texture_value_blend(mtex->def_var, har->hasize/100.0f, tin, mtex->raymirrfac, mtex->blendtype); if (mtex->mapto & MAP_TRANSLU) { - float add = texture_value_blend(mtex->def_var,(float)har->add/255.0f,tin,mtex->translfac,mtex->blendtype); + float add = texture_value_blend(mtex->def_var, (float)har->add/255.0f, tin, mtex->translfac, mtex->blendtype); CLAMP(add, 0.f, 1.f); har->add = 255.0f*add; } diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c index 7b17c782590..b3167e15df5 100644 --- a/source/blender/render/intern/source/shadbuf.c +++ b/source/blender/render/intern/source/shadbuf.c @@ -108,7 +108,7 @@ static void copy_to_ztile(int *rectz, int size, int x1, int y1, int tile, char * #if 0 static int sizeoflampbuf(ShadBuf *shb) { - int num,count=0; + int num, count=0; char *cp; cp= shb->cbuf; @@ -139,7 +139,7 @@ static float *give_jitter_tab(int samp) if (ctab[samp]==0) { ctab[samp]= 1; - BLI_initjit(jit[offset], samp*samp); + BLI_jitter_init(jit[offset], samp*samp); } return jit[offset]; @@ -193,7 +193,7 @@ static int compress_deepsamples(DeepSample *dsample, int tot, float epsilon) #if 0 if (print) { for (a=0, ds=dsample; a<tot; a++, ds++) - printf("%lf,%f ", ds->z/(double)0x7FFFFFFF, ds->v); + printf("%lf, %f ", ds->z/(double)0x7FFFFFFF, ds->v); printf("\n"); } #endif @@ -278,7 +278,7 @@ static int compress_deepsamples(DeepSample *dsample, int tot, float epsilon) #if 0 if (print) { for (a=0, ds=dsample; a<newtot; a++, ds++) - printf("%lf,%f ", ds->z/(double)0x7FFFFFFF, ds->v); + printf("%lf, %f ", ds->z/(double)0x7FFFFFFF, ds->v); printf("\n"); } #endif @@ -319,7 +319,7 @@ static void compress_deepshadowbuf(Render *re, ShadBuf *shb, APixstr *apixbuf, A int a, b, c, tot, minz, found, prevtot, newtot; int sampletot[RE_MAX_OSA], totsample = 0, totsamplec = 0; - shsample= MEM_callocN( sizeof(ShadSampleBuf), "shad sample buf"); + shsample= MEM_callocN(sizeof(ShadSampleBuf), "shad sample buf"); BLI_addtail(&shb->buffers, shsample); shsample->totbuf= MEM_callocN(sizeof(int)*size*size, "deeptotbuf"); @@ -511,11 +511,11 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square) int a, x, y, minx, miny, byt1, byt2; char *rc, *rcline, *ctile, *zt; - shsample= MEM_callocN( sizeof(ShadSampleBuf), "shad sample buf"); + shsample= MEM_callocN(sizeof(ShadSampleBuf), "shad sample buf"); BLI_addtail(&shb->buffers, shsample); - shsample->zbuf= MEM_mallocN( sizeof(uintptr_t)*(size*size)/256, "initshadbuf2"); - shsample->cbuf= MEM_callocN( (size*size)/256, "initshadbuf3"); + shsample->zbuf= MEM_mallocN(sizeof(uintptr_t)*(size*size)/256, "initshadbuf2"); + shsample->cbuf= MEM_callocN((size*size)/256, "initshadbuf3"); ztile= (uintptr_t *)shsample->zbuf; ctile= shsample->cbuf; @@ -546,7 +546,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square) verg= (*rz1 & 0xFFFFFF00); - for (a=0;a<256;a++,rz1++) { + for (a=0;a<256;a++, rz1++) { if ( (*rz1 & 0xFFFFFF00) !=verg) break; } } @@ -564,7 +564,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square) verg1= rc[BCOMP]; rc+= 4; byt1= 1; byt2= 1; - for (a=1;a<256;a++,rc+=4) { + for (a=1;a<256;a++, rc+=4) { byt1 &= (verg==rc[ACOMP]); byt2 &= (verg1==rc[BCOMP]); @@ -582,7 +582,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square) } else if (byt1) { /* only store short */ *ctile= 2; - *ztile= (uintptr_t)MEM_mallocN(2*256+4,"Tile2"); + *ztile= (uintptr_t)MEM_mallocN(2*256+4, "Tile2"); rz= (int *)*ztile; *rz= *rz1; @@ -595,7 +595,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square) } else { /* store triple */ *ctile= 3; - *ztile= (uintptr_t)MEM_mallocN(3*256,"Tile3"); + *ztile= (uintptr_t)MEM_mallocN(3*256, "Tile3"); zt= (char *)*ztile; rc= rcline; @@ -779,7 +779,7 @@ void makeshadowbuf(Render *re, LampRen *lar) shb->pixsize= (shb->d)/temp; wsize= shb->pixsize*(shb->size/2.0f); - perspective_m4( shb->winmat,-wsize, wsize, -wsize, wsize, shb->d, shb->clipend); + perspective_m4(shb->winmat, -wsize, wsize, -wsize, wsize, shb->d, shb->clipend); mult_m4_m4m4(shb->persmat, shb->winmat, shb->viewmat); if (ELEM3(lar->buftype, LA_SHADBUF_REGULAR, LA_SHADBUF_HALFWAY, LA_SHADBUF_DEEP)) { @@ -1192,7 +1192,7 @@ float testshadowbuf(Render *re, ShadBuf *shb, const float co[3], const float dxc if (firstreadshadbuf(shb, shsample, &rz, (int)(xs1+xres), (int)ys1, 1)) { if (firstreadshadbuf(shb, shsample, &rz, (int)xs1, (int)(ys1+yres), 1)) { if (firstreadshadbuf(shb, shsample, &rz, (int)(xs1+xres), (int)(ys1+yres), 1)) { - return readshadowbuf(shb, shsample, bias,(int)xs1, (int)ys1, zs); + return readshadowbuf(shb, shsample, bias, (int)xs1, (int)ys1, zs); } } } @@ -2074,7 +2074,7 @@ static int viewpixel_to_lampbuf(ShadBuf *shb, ObjectInstanceRen *obi, VlakRen *v dface = dot_v3v3(v1, nor); hoco[3]= 1.0f; - /* ortho viewplane cannot intersect using view vector originating in (0,0,0) */ + /* ortho viewplane cannot intersect using view vector originating in (0, 0, 0) */ if (R.r.mode & R_ORTHO) { /* x and y 3d coordinate can be derived from pixel coord and winmat */ float fx= 2.0f/(R.winx*R.winmat[0][0]); @@ -2160,8 +2160,8 @@ static int isb_add_samples(RenderPart *pa, ISBBranch *root, MemArena *memarena, int sample, bsp_err= 0; /* bsp split doesn't like to handle regular sequences */ - xcos= MEM_mallocN( pa->rectx*sizeof(int), "xcos"); - ycos= MEM_mallocN( pa->recty*sizeof(int), "ycos"); + xcos= MEM_mallocN(pa->rectx*sizeof(int), "xcos"); + ycos= MEM_mallocN(pa->recty*sizeof(int), "ycos"); for (xi=0; xi<pa->rectx; xi++) xcos[xi]= xi; for (yi=0; yi<pa->recty; yi++) @@ -2364,8 +2364,8 @@ static int isb_add_samples_transp(RenderPart *pa, ISBBranch *root, MemArena *mem int sample, bsp_err= 0; /* bsp split doesn't like to handle regular sequences */ - xcos= MEM_mallocN( pa->rectx*sizeof(int), "xcos"); - ycos= MEM_mallocN( pa->recty*sizeof(int), "ycos"); + xcos= MEM_mallocN(pa->rectx*sizeof(int), "xcos"); + ycos= MEM_mallocN(pa->recty*sizeof(int), "ycos"); for (xi=0; xi<pa->rectx; xi++) xcos[xi]= xi; for (yi=0; yi<pa->recty; yi++) diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 5ae637ab6a4..1f3dd7578e9 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -550,7 +550,7 @@ static float spec(float inp, int hard) return inp; } -static float Phong_Spec( float *n, float *l, float *v, int hard, int tangent ) +static float Phong_Spec(float *n, float *l, float *v, int hard, int tangent ) { float h[3]; float rslt; @@ -638,7 +638,7 @@ static float Blinn_Spec(float *n, float *l, float *v, float refrac, float spec_p else if ( b < a && b < c ) g = b; else if ( c < a && c < b ) g = c; - p = sqrt( (double)((refrac * refrac)+(vh*vh)-1.0f) ); + p = sqrt((double)((refrac * refrac)+(vh * vh) - 1.0f)); f = (((p-vh)*(p-vh))/((p+vh)*(p+vh)))*(1+((((vh*(p+vh))-1.0f)*((vh*(p+vh))-1.0f))/(((vh*(p-vh))+1.0f)*((vh*(p-vh))+1.0f)))); ang = saacos(nh); @@ -649,7 +649,7 @@ static float Blinn_Spec(float *n, float *l, float *v, float refrac, float spec_p } /* cartoon render spec */ -static float Toon_Spec( float *n, float *l, float *v, float size, float smooth, int tangent) +static float Toon_Spec(float *n, float *l, float *v, float size, float smooth, int tangent) { float h[3]; float ang; @@ -673,7 +673,7 @@ static float Toon_Spec( float *n, float *l, float *v, float size, float smooth, } /* Ward isotropic gaussian spec */ -static float WardIso_Spec( float *n, float *l, float *v, float rms, int tangent) +static float WardIso_Spec(float *n, float *l, float *v, float rms, int tangent) { float i, nh, nv, nl, h[3], angle, alpha; @@ -705,7 +705,7 @@ static float WardIso_Spec( float *n, float *l, float *v, float rms, int tangent) } /* cartoon render diffuse */ -static float Toon_Diff( float *n, float *l, float *UNUSED(v), float size, float smooth ) +static float Toon_Diff(float *n, float *l, float *UNUSED(v), float size, float smooth) { float rslt, ang; @@ -754,12 +754,12 @@ static float OrenNayar_Diff(float nl, float *n, float *l, float *v, float rough Lit_B[0] = l[0] - (realnl * n[0]); Lit_B[1] = l[1] - (realnl * n[1]); Lit_B[2] = l[2] - (realnl * n[2]); - normalize_v3( Lit_B ); + normalize_v3(Lit_B); View_B[0] = v[0] - (nv * n[0]); View_B[1] = v[1] - (nv * n[1]); View_B[2] = v[2] - (nv * n[2]); - normalize_v3( View_B ); + normalize_v3(View_B); t = Lit_B[0]*View_B[0] + Lit_B[1]*View_B[1] + Lit_B[2]*View_B[2]; if ( t < 0 ) t = 0; diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c index b6eccc3e10f..cbcc63148e9 100644 --- a/source/blender/render/intern/source/sss.c +++ b/source/blender/render/intern/source/sss.c @@ -1,5 +1,4 @@ /* - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -30,7 +29,6 @@ * \ingroup render */ - /* Possible Improvements: * - add fresnel terms * - adapt Rd table to scale, now with small scale there are a lot of misses? @@ -176,7 +174,7 @@ static float compute_reduced_albedo(ScatterSettings *ss) { const float tolerance= 1e-8; const int max_iteration_count= 20; - float d, fsub, xn_1= 0.0f , xn= 1.0f, fxn, fxn_1; + float d, fsub, xn_1= 0.0f, xn= 1.0f, fxn, fxn_1; int i; /* use secant method to compute reduced albedo using Rd function inverse diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index ea6b099996d..f986be5eaeb 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -323,13 +323,18 @@ struct StrandShadeCache { MemArena *memarena; }; +typedef struct StrandCacheEntry { + GHashPair pair; + ShadeResult shr; +} StrandCacheEntry; + StrandShadeCache *strand_shade_cache_create(void) { StrandShadeCache *cache; cache= MEM_callocN(sizeof(StrandShadeCache), "StrandShadeCache"); - cache->resulthash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "strand_shade_cache_create1 gh"); - cache->refcounthash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "strand_shade_cache_create2 gh"); + cache->resulthash= BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "strand_shade_cache_create1 gh"); + cache->refcounthash= BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "strand_shade_cache_create2 gh"); cache->memarena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "strand shade cache arena"); return cache; @@ -338,39 +343,47 @@ StrandShadeCache *strand_shade_cache_create(void) void strand_shade_cache_free(StrandShadeCache *cache) { BLI_ghash_free(cache->refcounthash, NULL, NULL); - BLI_ghash_free(cache->resulthash, NULL, (GHashValFreeFP)MEM_freeN); + BLI_ghash_free(cache->resulthash, (GHashKeyFreeFP)MEM_freeN, NULL); BLI_memarena_free(cache->memarena); MEM_freeN(cache); } +static GHashPair strand_shade_hash_pair(ObjectInstanceRen *obi, StrandVert *svert) +{ + GHashPair pair = {obi, svert}; + return pair; +} + static void strand_shade_get(Render *re, StrandShadeCache *cache, ShadeSample *ssamp, StrandSegment *sseg, StrandVert *svert) { - ShadeResult *hashshr; + StrandCacheEntry *entry; StrandPoint p; int *refcount; + GHashPair pair = strand_shade_hash_pair(sseg->obi, svert); - hashshr= BLI_ghash_lookup(cache->resulthash, svert); - refcount= BLI_ghash_lookup(cache->refcounthash, svert); + entry= BLI_ghash_lookup(cache->resulthash, &pair); + refcount= BLI_ghash_lookup(cache->refcounthash, &pair); - if (!hashshr) { + if (!entry) { /* not shaded yet, shade and insert into hash */ p.t= (sseg->v[1] == svert)? 0.0f: 1.0f; strand_eval_point(sseg, &p); strand_shade_point(re, ssamp, sseg, svert, &p); - hashshr= MEM_callocN(sizeof(ShadeResult), "HashShadeResult"); - *hashshr= ssamp->shr[0]; - BLI_ghash_insert(cache->resulthash, svert, hashshr); + entry= MEM_callocN(sizeof(StrandCacheEntry), "StrandCacheEntry"); + entry->pair = pair; + entry->shr = ssamp->shr[0]; + BLI_ghash_insert(cache->resulthash, entry, entry); } else /* already shaded, just copy previous result from hash */ - ssamp->shr[0]= *hashshr; + ssamp->shr[0]= entry->shr; /* lower reference count and remove if not needed anymore by any samples */ (*refcount)--; if (*refcount == 0) { - BLI_ghash_remove(cache->resulthash, svert, NULL, (GHashValFreeFP)MEM_freeN); - BLI_ghash_remove(cache->refcounthash, svert, NULL, NULL); + BLI_ghash_remove(cache->resulthash, &pair, (GHashKeyFreeFP)MEM_freeN, NULL); + BLI_ghash_remove(cache->refcounthash, &pair, NULL, NULL); } } @@ -388,34 +401,39 @@ void strand_shade_segment(Render *re, StrandShadeCache *cache, StrandSegment *ss /* apply alpha along width */ if (sseg->buffer->widthfade != 0.0f) { - s = 1.0f - pow(fabs(s), sseg->buffer->widthfade); + s = 1.0f - powf(fabsf(s), sseg->buffer->widthfade); strand_apply_shaderesult_alpha(ssamp->shr, s); } } -void strand_shade_unref(StrandShadeCache *cache, StrandVert *svert) +void strand_shade_unref(StrandShadeCache *cache, ObjectInstanceRen *obi, StrandVert *svert) { + GHashPair pair = strand_shade_hash_pair(obi, svert); int *refcount; /* lower reference count and remove if not needed anymore by any samples */ - refcount= BLI_ghash_lookup(cache->refcounthash, svert); + refcount= BLI_ghash_lookup(cache->refcounthash, &pair); (*refcount)--; if (*refcount == 0) { - BLI_ghash_remove(cache->resulthash, svert, NULL, (GHashValFreeFP)MEM_freeN); - BLI_ghash_remove(cache->refcounthash, svert, NULL, NULL); + BLI_ghash_remove(cache->resulthash, &pair, (GHashKeyFreeFP)MEM_freeN, NULL); + BLI_ghash_remove(cache->refcounthash, &pair, NULL, NULL); } } -static void strand_shade_refcount(StrandShadeCache *cache, StrandVert *svert) +static void strand_shade_refcount(StrandShadeCache *cache, StrandSegment *sseg, StrandVert *svert) { - int *refcount= BLI_ghash_lookup(cache->refcounthash, svert); + GHashPair pair = strand_shade_hash_pair(sseg->obi, svert); + GHashPair *key; + int *refcount= BLI_ghash_lookup(cache->refcounthash, &pair); if (!refcount) { + key= BLI_memarena_alloc(cache->memarena, sizeof(GHashPair)); + *key = pair; refcount= BLI_memarena_alloc(cache->memarena, sizeof(int)); *refcount= 1; - BLI_ghash_insert(cache->refcounthash, svert, refcount); + BLI_ghash_insert(cache->refcounthash, key, refcount); } else (*refcount)++; @@ -485,7 +503,7 @@ static APixstrand *addpsmainAstrand(ListBase *lb) psm= MEM_mallocN(sizeof(APixstrMain), "addpsmainA"); BLI_addtail(lb, psm); - psm->ps= MEM_callocN(4096*sizeof(APixstrand),"pixstr"); + psm->ps = MEM_callocN(4096 * sizeof(APixstrand), "pixstr"); return psm->ps; } @@ -580,8 +598,8 @@ static void do_strand_fillac(void *handle, int x, int y, float u, float v, float } if (cache) { - strand_shade_refcount(cache, sseg->v[1]); - strand_shade_refcount(cache, sseg->v[2]); + strand_shade_refcount(cache, sseg, sseg->v[1]); + strand_shade_refcount(cache, sseg, sseg->v[2]); } spart->totapixbuf[offset]++; } diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c index 8aabfbfed09..111ec75dd27 100644 --- a/source/blender/render/intern/source/sunsky.c +++ b/source/blender/render/intern/source/sunsky.c @@ -71,7 +71,7 @@ /** * ClipColor: - * clip a color to range [0,1]; + * clip a color to range [0, 1]; * */ void ClipColor(float c[3]) { @@ -146,7 +146,7 @@ static float PerezFunction(struct SunSky *sunsky, const float *lam, float theta, * back_scatter, controls back scatter light * */ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness, - float spread,float sun_brightness, float sun_size, float back_scatter, + float spread, float sun_brightness, float sun_size, float back_scatter, float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace) { float theta2; @@ -251,7 +251,7 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b void GetSkyXYZRadiance(struct SunSky* sunsky, float theta, float phi, float color_out[3]) { float gamma; - float x,y,Y,X,Z; + float x, y, Y, X, Z; float hfade=1, nfade=1; @@ -336,11 +336,11 @@ static void ComputeAttenuatedSunlight(float theta, int turbidity, float fTau[3]) fAlpha = 1.3f; fBeta = 0.04608365822050f * turbidity - 0.04586025928522f; - m = 1.0f/(cosf(theta) + 0.15f*powf(93.885f-theta/(float)M_PI*180.0f,-1.253f)); + m = 1.0f/(cosf(theta) + 0.15f*powf(93.885f-theta/(float)M_PI*180.0f, -1.253f)); for (i = 0; i < 3; i++) { // Rayleigh Scattering - fTauR = expf( -m * 0.008735f * powf(fLambda[i], (float)(-4.08f))); + fTauR = expf(-m * 0.008735f * powf(fLambda[i], (float)(-4.08f))); // Aerosal (water + dust) attenuation fTauA = exp(-m * fBeta * powf(fLambda[i], -fAlpha)); @@ -374,7 +374,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r float K[3] = {0.685f, 0.679f, 0.670f}; float vBetaMieTemp[3]; - float fLambda[3],fLambda2[3], fLambda4[3]; + float fLambda[3], fLambda2[3], fLambda4[3]; float vLambda2[3]; float vLambda4[3]; @@ -411,7 +411,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r VEC3OPF(sunSky->atm_BetaRay, vLambda4, *, fBeta); fBetaDash = fTemp/2; - VEC3OPF(sunSky->atm_BetaDashRay, vLambda4,*, fBetaDash); + VEC3OPF(sunSky->atm_BetaDashRay, vLambda4, *, fBetaDash); // Mie scattering constants. @@ -421,7 +421,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r fTemp3 = 0.434f*c*pi*(2*pi)*(2*pi); VEC3OPV(vBetaMieTemp, K, *, fLambda); - VEC3OPF(sunSky->atm_BetaMie, vBetaMieTemp,*, fTemp3); + VEC3OPF(sunSky->atm_BetaMie, vBetaMieTemp, *, fTemp3); } @@ -434,7 +434,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r * s, is distance * rgb, contains rendered color value for a pixle * */ -void AtmospherePixleShader( struct SunSky* sunSky, float view[3], float s, float rgb[3]) +void AtmospherePixleShader(struct SunSky* sunSky, float view[3], float s, float rgb[3]) { float costheta; float Phase_1; @@ -484,7 +484,7 @@ void AtmospherePixleShader( struct SunSky* sunSky, float view[3], float s, float FOPVEC3(vTemp2, 1.0f, -, E1); VEC3OPV(vTemp1, vTemp1, *, vTemp2); - FOPVEC3(vTemp2, 1.0f, / , sunSky->atm_BetaRM); + FOPVEC3(vTemp2, 1.0f, /, sunSky->atm_BetaRM); VEC3OPV(I, vTemp1, *, vTemp2); diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index 1f5ada9b113..ff715eeca07 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -95,7 +95,7 @@ static int intersect_outside_volume(RayObject *tree, Isect *isect, float *offset static int point_inside_obi(RayObject *tree, ObjectInstanceRen *UNUSED(obi), float *co) { Isect isect= {{0}}; - float dir[3] = {0.0f,0.0f,1.0f}; + float dir[3] = {0.0f, 0.0f, 1.0f}; int final_depth=0, depth=0, limit=20; /* set up the isect */ @@ -177,7 +177,7 @@ static float get_avg_surrounds(float *cache, int *res, int xx, int yy, int zz) for (x=-1; x <= 1; x++) { x_ = xx+x; if (x_ >= 0 && x_ <= res[0]-1) { - const int i= V_I(x_, y_, z_, res); + const int i = BLI_VOXEL_INDEX(x_, y_, z_, res); if (cache[i] > 0.0f) { tot += cache[i]; @@ -208,7 +208,7 @@ static void lightcache_filter(VolumePrecache *vp) for (y=0; y < vp->res[1]; y++) { for (x=0; x < vp->res[0]; x++) { /* trigger for outside mesh */ - const int i= V_I(x, y, z, vp->res); + const int i = BLI_VOXEL_INDEX(x, y, z, vp->res); if (vp->data_r[i] < -0.f) vp->data_r[i] = get_avg_surrounds(vp->data_r, vp->res, x, y, z); @@ -240,7 +240,7 @@ static void lightcache_filter2(VolumePrecache *vp) for (y=0; y < vp->res[1]; y++) { for (x=0; x < vp->res[0]; x++) { /* trigger for outside mesh */ - const int i= V_I(x, y, z, vp->res); + const int i = BLI_VOXEL_INDEX(x, y, z, vp->res); if (vp->data_r[i] < -0.f) new_r[i] = get_avg_surrounds(vp->data_r, vp->res, x, y, z); if (vp->data_g[i] < -0.f) @@ -291,7 +291,7 @@ static float total_ss_energy(Render *re, int do_test_break, VolumePrecache *vp) for (z=0; z < res[2]; z++) { for (y=0; y < res[1]; y++) { for (x=0; x < res[0]; x++) { - const int i=V_I(x, y, z, res); + const int i = BLI_VOXEL_INDEX(x, y, z, res); if (vp->data_r[i] > 0.f) energy += vp->data_r[i]; if (vp->data_g[i] > 0.f) energy += vp->data_g[i]; @@ -313,7 +313,7 @@ static float total_ms_energy(Render *re, int do_test_break, float *sr, float *sg for (z=1;z<=res[2];z++) { for (y=1;y<=res[1];y++) { for (x=1;x<=res[0];x++) { - const int i = ms_I(x,y,z,res); + const int i = ms_I(x, y, z, res); if (sr[i] > 0.f) energy += sr[i]; if (sg[i] > 0.f) energy += sg[i]; @@ -338,8 +338,8 @@ static void ms_diffuse(Render *re, int do_test_break, float *x0, float *x, float for (k=1; k<=n[2]; k++) { for (j=1; j<=n[1]; j++) { for (i=1; i<=n[0]; i++) { - x[v_I_pad(i,j,k,n)] = (x0[v_I_pad(i,j,k,n)]) + a*( x0[v_I_pad(i-1,j,k,n)]+ x0[v_I_pad(i+1,j,k,n)]+ x0[v_I_pad(i,j-1,k,n)]+ - x0[v_I_pad(i,j+1,k,n)]+ x0[v_I_pad(i,j,k-1,n)]+x0[v_I_pad(i,j,k+1,n)] + x[v_I_pad(i, j, k, n)] = (x0[v_I_pad(i, j, k, n)]) + a*( x0[v_I_pad(i-1, j, k, n)]+ x0[v_I_pad(i+1, j, k, n)]+ x0[v_I_pad(i, j-1, k, n)]+ + x0[v_I_pad(i, j+1, k, n)]+ x0[v_I_pad(i, j, k-1, n)]+x0[v_I_pad(i, j, k+1, n)] ) / (1+6*a); } } @@ -385,7 +385,7 @@ static void multiple_scattering_diffusion(Render *re, VolumePrecache *vp, Materi for (z=1; z<=n[2]; z++) { for (y=1; y<=n[1]; y++) { for (x=1; x<=n[0]; x++) { - const int i = lc_to_ms_I(x, y ,z, n); //lc index + const int i = lc_to_ms_I(x, y, z, n); //lc index const int j = ms_I(x, y, z, n); //ms index time= PIL_check_seconds_timer(); @@ -414,9 +414,9 @@ static void multiple_scattering_diffusion(Render *re, VolumePrecache *vp, Materi if (re->test_break(re->tbh)) break; - SWAP(float *,sr,sr0); - SWAP(float *,sg,sg0); - SWAP(float *,sb,sb0); + SWAP(float *, sr, sr0); + SWAP(float *, sg, sg0); + SWAP(float *, sb, sb0); /* main diffusion simulation */ ms_diffuse(re, do_test_break, sr0, sr, diff, n); @@ -443,7 +443,7 @@ static void multiple_scattering_diffusion(Render *re, VolumePrecache *vp, Materi for (z=1;z<=n[2];z++) { for (y=1;y<=n[1];y++) { for (x=1;x<=n[0];x++) { - const int i = lc_to_ms_I(x, y ,z, n); //lc index + const int i = lc_to_ms_I(x, y, z, n); //lc index const int j = ms_I(x, y, z, n); //ms index vp->data_r[i] = origf * vp->data_r[i] + fac * sr[j]; @@ -527,7 +527,7 @@ static void *vol_precache_part(void *data) /* convert from world->camera space for shading */ mul_v3_m4v3(cco, pa->viewmat, co); - i= V_I(x, y, z, res); + i = BLI_VOXEL_INDEX(x, y, z, res); // don't bother if the point is not inside the volume mesh if (!point_inside_obi(tree, obi, cco)) { diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c index 0f72a4bd40f..b599da48803 100644 --- a/source/blender/render/intern/source/volumetric.c +++ b/source/blender/render/intern/source/volumetric.c @@ -97,7 +97,7 @@ static float vol_get_shadow(ShadeInput *shi, LampRen *lar, const float co[3]) } else { sub_v3_v3v3(is.dir, lar->co, is.start); - is.dist = normalize_v3( is.dir ); + is.dist = normalize_v3(is.dir ); } is.mode = RE_RAY_MIRROR; @@ -113,7 +113,7 @@ static float vol_get_shadow(ShadeInput *shi, LampRen *lar, const float co[3]) is.orig.face = NULL; is.last_hit = lar->last_hit[shi->thread]; - if (RE_rayobject_raycast(R.raytree,&is)) { + if (RE_rayobject_raycast(R.raytree, &is)) { visibility = 0.f; } @@ -234,9 +234,9 @@ static void vol_get_precached_scattering(Render *re, ShadeInput *shi, float scat sample_co[1] = (world_co[1] - bbmin[1]) / dim[1]; sample_co[2] = (world_co[2] - bbmin[2]) / dim[2]; - scatter_col[0] = voxel_sample_triquadratic(vp->data_r, vp->res, sample_co); - scatter_col[1] = voxel_sample_triquadratic(vp->data_g, vp->res, sample_co); - scatter_col[2] = voxel_sample_triquadratic(vp->data_b, vp->res, sample_co); + scatter_col[0] = BLI_voxel_sample_triquadratic(vp->data_r, vp->res, sample_co); + scatter_col[1] = BLI_voxel_sample_triquadratic(vp->data_g, vp->res, sample_co); + scatter_col[2] = BLI_voxel_sample_triquadratic(vp->data_b, vp->res, sample_co); } /* Meta object density, brute force for now @@ -258,7 +258,7 @@ static float metadensity(Object* ob, const float co[3]) /* element rotation transform */ float tp[3] = {ml->x - tco[0], ml->y - tco[1], ml->z - tco[2]}; - quat_to_mat3( bmat,ml->quat); + quat_to_mat3(bmat, ml->quat); transpose_m3(bmat); // rot.only, so inverse == transpose mul_m3_v3(bmat, tp); @@ -471,7 +471,7 @@ static void vol_get_transmittance(ShadeInput *shi, float tr[3], const float co[3 static void vol_shade_one_lamp(struct ShadeInput *shi, const float co[3], const float view[3], LampRen *lar, float lacol[3]) { float visifac, lv[3], lampdist; - float tr[3]={1.0,1.0,1.0}; + float tr[3]={1.0, 1.0, 1.0}; float hitco[3], *atten_co; float p, ref_col[3]; @@ -653,7 +653,7 @@ static void volumeintegrate(struct ShadeInput *shi, float col[4], const float co /* the main entry point for volume shading */ static void volume_trace(struct ShadeInput *shi, struct ShadeResult *shr, int inside_volume) { - float hitco[3], col[4] = {0.f,0.f,0.f,0.f}; + float hitco[3], col[4] = {0.f, 0.f, 0.f, 0.f}; float *startco, *endco; int trace_behind = 1; const int ztransp= ((shi->depth==0) && (shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_ZTRANSP)); @@ -748,7 +748,7 @@ static void volume_trace(struct ShadeInput *shi, struct ShadeResult *shr, int in void shade_volume_shadow(struct ShadeInput *shi, struct ShadeResult *shr, struct Isect *last_is) { float hitco[3]; - float tr[3] = {1.0,1.0,1.0}; + float tr[3] = {1.0, 1.0, 1.0}; Isect is= {{0}}; float *startco, *endco; diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c index 817e51f2020..90e6594d888 100644 --- a/source/blender/render/intern/source/voxeldata.c +++ b/source/blender/render/intern/source/voxeldata.c @@ -117,7 +117,7 @@ static int load_frame_raw8(VoxelData *vd, FILE *fp, int frame) return 0; } - if (fseek(fp,(frame-1)*size*sizeof(char),0) == -1) { + if (fseek(fp, (frame-1)*size*sizeof(char), 0) == -1) { MEM_freeN(data_c); MEM_freeN(vd->dataset); vd->dataset= NULL; @@ -184,7 +184,7 @@ static void load_frame_image_sequence(VoxelData *vd, Tex *tex) for (y=0; y < ibuf->y; y++) { for (x=0; x < ibuf->x; x++) { /* currently averaged to monchrome */ - vd->dataset[ V_I(x, y, z, vd->resol) ] = (rf[0] + rf[1] + rf[2])*0.333f; + vd->dataset[ BLI_VOXEL_INDEX(x, y, z, vd->resol) ] = (rf[0] + rf[1] + rf[2]) * 0.333f; rf +=4; } } @@ -201,7 +201,7 @@ static int read_voxeldata_header(FILE *fp, struct VoxelData *vd) VoxelDataHeader *h=(VoxelDataHeader *)MEM_mallocN(sizeof(VoxelDataHeader), "voxel data header"); rewind(fp); - if (fread(h,sizeof(VoxelDataHeader),1,fp) != 1) { + if (fread(h, sizeof(VoxelDataHeader), 1, fp) != 1) { MEM_freeN(h); return 0; } @@ -338,7 +338,7 @@ void cache_voxeldata(Tex *tex, int scene_frame) case TEX_VD_BLENDERVOXEL: BLI_path_abs(path, G.main->name); if (!BLI_exists(path)) return; - fp = BLI_fopen(path,"rb"); + fp = BLI_fopen(path, "rb"); if (!fp) return; if (read_voxeldata_header(fp, vd)) @@ -349,7 +349,7 @@ void cache_voxeldata(Tex *tex, int scene_frame) case TEX_VD_RAW_8BIT: BLI_path_abs(path, G.main->name); if (!BLI_exists(path)) return; - fp = BLI_fopen(path,"rb"); + fp = BLI_fopen(path, "rb"); if (!fp) return; load_frame_raw8(vd, fp, curframe); @@ -423,17 +423,17 @@ int voxeldatatex(struct Tex *tex, const float texvec[3], struct TexResult *texre switch (vd->interp_type) { case TEX_VD_NEARESTNEIGHBOR: - texres->tin = voxel_sample_nearest(vd->dataset, vd->resol, co); + texres->tin = BLI_voxel_sample_nearest(vd->dataset, vd->resol, co); break; case TEX_VD_LINEAR: - texres->tin = voxel_sample_trilinear(vd->dataset, vd->resol, co); + texres->tin = BLI_voxel_sample_trilinear(vd->dataset, vd->resol, co); break; case TEX_VD_QUADRATIC: - texres->tin = voxel_sample_triquadratic(vd->dataset, vd->resol, co); + texres->tin = BLI_voxel_sample_triquadratic(vd->dataset, vd->resol, co); break; case TEX_VD_TRICUBIC_CATROM: case TEX_VD_TRICUBIC_BSPLINE: - texres->tin = voxel_sample_tricubic(vd->dataset, vd->resol, co, (vd->interp_type == TEX_VD_TRICUBIC_BSPLINE)); + texres->tin = BLI_voxel_sample_tricubic(vd->dataset, vd->resol, co, (vd->interp_type == TEX_VD_TRICUBIC_BSPLINE)); break; } diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 06fc323e8d7..4c3c9889d53 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -149,7 +149,7 @@ static void zbuf_add_to_span(ZSpan *zspan, float *v1, float *v2) } else { dx0= 0.0f; - xs0= MIN2(minv[0],maxv[0]); + xs0= MIN2(minv[0], maxv[0]); } /* empty span */ @@ -270,7 +270,7 @@ static APixstr *addpsmainA(ListBase *lb) psm= MEM_mallocN(sizeof(APixstrMain), "addpsmainA"); BLI_addtail(lb, psm); - psm->ps= MEM_callocN(4096*sizeof(APixstr),"pixstr"); + psm->ps= MEM_callocN(4096*sizeof(APixstr), "pixstr"); return psm->ps; } @@ -305,8 +305,8 @@ static void zbuffillAc4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, { APixstr *ap, *apofs, *apn; double zxd, zyd, zy0, zverg; - float x0,y0,z0; - float x1,y1,z1,x2,y2,z2,xx1; + float x0, y0, z0; + float x1, y1, z1, x2, y2, z2, xx1; float *span1, *span2; int *rz, *rm, x, y; int sn1, sn2, rectx, *rectzofs, *rectmaskofs, my0, my2, mask; @@ -844,7 +844,7 @@ static void zbufline_onlyZ(ZSpan *zspan, int UNUSED(obi), int UNUSED(zvlnr), flo static int clipline(float v1[4], float v2[4]) /* return 0: do not draw */ { - float dz,dw, u1=0.0, u2=1.0; + float dz, dw, u1=0.0, u2=1.0; float dx, dy, v13; dz= v2[2]-v1[2]; @@ -854,20 +854,20 @@ static int clipline(float v1[4], float v2[4]) /* return 0: do not draw */ * filled in with zbufwire correctly when rendering in parts. otherwise * you see line endings at edges... */ - if (cliptestf(-dz, -dw, v1[3], v1[2], &u1,&u2)) { - if (cliptestf(dz, -dw, v1[3], -v1[2], &u1,&u2)) { + if (cliptestf(-dz, -dw, v1[3], v1[2], &u1, &u2)) { + if (cliptestf(dz, -dw, v1[3], -v1[2], &u1, &u2)) { dx= v2[0]-v1[0]; dz= 1.01f*(v2[3]-v1[3]); v13= 1.01f*v1[3]; - if (cliptestf(-dx, -dz, v1[0], v13, &u1,&u2)) { - if (cliptestf(dx, -dz, v13, -v1[0], &u1,&u2)) { + if (cliptestf(-dx, -dz, v1[0], v13, &u1, &u2)) { + if (cliptestf(dx, -dz, v13, -v1[0], &u1, &u2)) { dy= v2[1]-v1[1]; - if (cliptestf(-dy, -dz, v1[1], v13, &u1,&u2)) { - if (cliptestf(dy, -dz, v13, -v1[1], &u1,&u2)) { + if (cliptestf(-dy, -dz, v1[1], v13, &u1, &u2)) { + if (cliptestf(dy, -dz, v13, -v1[1], &u1, &u2)) { if (u2<1.0f) { v2[0]= v1[0]+u2*dx; @@ -1042,8 +1042,8 @@ void zbufsinglewire(ZSpan *zspan, int obi, int zvlnr, const float ho1[4], const static void zbuffillGLinv4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, float *v3, float *v4) { double zxd, zyd, zy0, zverg; - float x0,y0,z0; - float x1,y1,z1,x2,y2,z2,xx1; + float x0, y0, z0; + float x1, y1, z1, x2, y2, z2, xx1; float *span1, *span2; int *rectoofs, *ro; int *rectpofs, *rp; @@ -1164,8 +1164,8 @@ static void zbuffillGLinv4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v static void zbuffillGL4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, float *v3, float *v4) { double zxd, zyd, zy0, zverg; - float x0,y0,z0; - float x1,y1,z1,x2,y2,z2,xx1; + float x0, y0, z0; + float x1, y1, z1, x2, y2, z2, xx1; float *span1, *span2; int *rectoofs, *ro; int *rectpofs, *rp; @@ -1294,8 +1294,8 @@ static void zbuffillGL4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, static void zbuffillGL_onlyZ(ZSpan *zspan, int UNUSED(obi), int UNUSED(zvlnr), float *v1, float *v2, float *v3, float *v4) { double zxd, zyd, zy0, zverg; - float x0,y0,z0; - float x1,y1,z1,x2,y2,z2,xx1; + float x0, y0, z0; + float x1, y1, z1, x2, y2, z2, xx1; float *span1, *span2; int *rz, *rz1, x, y; int sn1, sn2, rectx, *rectzofs, *rectzofs1= NULL, my0, my2; @@ -1399,7 +1399,7 @@ static void zbuffillGL_onlyZ(ZSpan *zspan, int UNUSED(obi), int UNUSED(zvlnr), f } } -/* 2d scanconvert for tria, calls func for each x,y coordinate and gives UV barycentrics */ +/* 2d scanconvert for tria, calls func for each x, y coordinate and gives UV barycentrics */ void zspan_scanconvert_strand(ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(void *, int, int, float, float, float) ) { float x0, y0, x1, y1, x2, y2, z0, z1, z2, z; @@ -1498,7 +1498,7 @@ void zspan_scanconvert_strand(ZSpan *zspan, void *handle, float *v1, float *v2, } } -/* scanconvert for strand triangles, calls func for each x,y coordinate and gives UV barycentrics and z */ +/* scanconvert for strand triangles, calls func for each x, y coordinate and gives UV barycentrics and z */ void zspan_scanconvert(ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(void *, int, int, float, float) ) { @@ -1603,7 +1603,7 @@ void zspan_scanconvert(ZSpan *zspan, void *handle, float *v1, float *v2, float * static void clippyra(float *labda, float *v1, float *v2, int *b2, int *b3, int a, float clipcrop) { - float da,dw,u1=0.0,u2=1.0; + float da, dw, u1=0.0, u2=1.0; float v13; labda[0]= -1.0; @@ -1627,8 +1627,8 @@ static void clippyra(float *labda, float *v1, float *v2, int *b2, int *b3, int a * who would have thought that of L&B! */ - if (cliptestf(-da, -dw, v13, v1[a], &u1,&u2)) { - if (cliptestf(da, -dw, v13, -v1[a], &u1,&u2)) { + if (cliptestf(-da, -dw, v13, v1[a], &u1, &u2)) { + if (cliptestf(da, -dw, v13, -v1[a], &u1, &u2)) { *b3=1; if (u2<1.0f) { labda[1]= u2; @@ -1701,7 +1701,7 @@ static void makevertpyra(float *vez, float *labda, float **trias, float *v1, flo void projectverto(const float v1[3], float winmat[][4], float adr[4]) { /* calcs homogenic coord of vertex v1 */ - float x,y,z; + float x, y, z; x= v1[0]; y= v1[1]; @@ -1719,7 +1719,7 @@ void projectverto(const float v1[3], float winmat[][4], float adr[4]) void projectvert(const float v1[3], float winmat[][4], float adr[4]) { /* calcs homogenic coord of vertex v1 */ - float x,y,z; + float x, y, z; x= v1[0]; y= v1[1]; @@ -1877,9 +1877,9 @@ void zbufclip(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, else if (b==1) arg= 0; else arg= 1; - clippyra(labda[0], vlzp[v][0],vlzp[v][1], &b2,&b3, arg, zspan->clipcrop); - clippyra(labda[1], vlzp[v][1],vlzp[v][2], &b2,&b3, arg, zspan->clipcrop); - clippyra(labda[2], vlzp[v][2],vlzp[v][0], &b2,&b3, arg, zspan->clipcrop); + clippyra(labda[0], vlzp[v][0], vlzp[v][1], &b2, &b3, arg, zspan->clipcrop); + clippyra(labda[1], vlzp[v][1], vlzp[v][2], &b2, &b3, arg, zspan->clipcrop); + clippyra(labda[2], vlzp[v][2], vlzp[v][0], &b2, &b3, arg, zspan->clipcrop); if (b2==0 && b3==1) { /* completely 'in', but we copy because of last for () loop in this section */; @@ -1895,9 +1895,9 @@ void zbufclip(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, } else { b1=0; - makevertpyra(vez, labda[0], trias, vlzp[v][0],vlzp[v][1], &b1,&clve); - makevertpyra(vez, labda[1], trias, vlzp[v][1],vlzp[v][2], &b1,&clve); - makevertpyra(vez, labda[2], trias, vlzp[v][2],vlzp[v][0], &b1,&clve); + makevertpyra(vez, labda[0], trias, vlzp[v][0], vlzp[v][1], &b1, &clve); + makevertpyra(vez, labda[1], trias, vlzp[v][1], vlzp[v][2], &b1, &clve); + makevertpyra(vez, labda[2], trias, vlzp[v][2], vlzp[v][0], &b1, &clve); /* after front clip done: now set clip flags */ if (b==0) { @@ -1927,7 +1927,7 @@ void zbufclip(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, } /* warning, this should never happen! */ - if (clve>38 || clvl>31) printf("clip overflow: clve clvl %d %d\n",clve,clvl); + if (clve>38 || clvl>31) printf("clip overflow: clve clvl %d %d\n", clve, clvl); /* perspective division */ f1=vez; @@ -1937,7 +1937,7 @@ void zbufclip(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, } for (b=1;b<clvl;b++) { if (vlzp[b][0]) { - zspan->zbuffunc(zspan, obi, zvlnr, vlzp[b][0],vlzp[b][1],vlzp[b][2], NULL); + zspan->zbuffunc(zspan, obi, zvlnr, vlzp[b][0], vlzp[b][1], vlzp[b][2], NULL); } } return; @@ -1948,7 +1948,7 @@ void zbufclip(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, hoco_to_zco(zspan, vez, f1); hoco_to_zco(zspan, vez+4, f2); hoco_to_zco(zspan, vez+8, f3); - zspan->zbuffunc(zspan, obi, zvlnr, vez,vez+4,vez+8, NULL); + zspan->zbuffunc(zspan, obi, zvlnr, vez, vez+4, vez+8, NULL); } void zbufclip4(ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, float *f4, int c1, int c2, int c3, int c4) @@ -2648,8 +2648,8 @@ static void zbuf_fill_in_rgba(ZSpan *zspan, DrawBufPixel *col, float *v1, float { DrawBufPixel *rectpofs, *rp; double zxd, zyd, zy0, zverg; - float x0,y0,z0; - float x1,y1,z1,x2,y2,z2,xx1; + float x0, y0, z0; + float x1, y1, z1, x2, y2, z2, xx1; float *span1, *span2; float *rectzofs, *rz; int x, y; @@ -2839,7 +2839,7 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove) } /* in: two vectors, first vector points from origin back in time, 2nd vector points to future */ -/* we make this into 3 points, center point is (0,0) */ +/* we make this into 3 points, center point is (0, 0) */ /* and offset the center point just enough to make curve go through midpoint */ static void quad_bezier_2d(float *result, float *v1, float *v2, float *ipodata) @@ -3047,7 +3047,7 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float * /* has to become static, the init-jit calls a random-seed, screwing up texture noise node */ if (firsttime) { firsttime= 0; - BLI_initjit(jit[0], 256); + BLI_jitter_init(jit[0], 256); } memset(newrect, 0, sizeof(float)*xsize*ysize*4); @@ -3748,8 +3748,8 @@ static void unref_strand_samples(StrandShadeCache *cache, ZTranspRow *row, int t strand= RE_findOrAddStrand(obr, row[totface].p-1); svert= strand->vert + row[totface].segment; - strand_shade_unref(cache, svert); - strand_shade_unref(cache, svert+1); + strand_shade_unref(cache, obi, svert); + strand_shade_unref(cache, obi, svert+1); } } } @@ -3772,7 +3772,7 @@ static void shade_tra_samples_fill(ShadeSample *ssamp, int x, int y, int z, int for (samp=0; samp<R.osa; samp++) { if (curmask & (1<<samp)) { - xs= (float)x + R.jit[samp][0] + 0.5f; /* zbuffer has this inverse corrected, ensures xs,ys are inside pixel */ + xs= (float)x + R.jit[samp][0] + 0.5f; /* zbuffer has this inverse corrected, ensures (xs, ys) are inside pixel */ ys= (float)y + R.jit[samp][1] + 0.5f; if (shi_inc) { diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index 66cadf1e76a..2b83a55d7bb 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -475,7 +475,7 @@ static int wm_triple_gen_textures(wmWindow *win, wmDrawTriple *triple) glTexImage2D(triple->target, 0, GL_RGB8, triple->x[x], triple->y[y], 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); glTexParameteri(triple->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(triple->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - // glColor still used with this enabled? + // The current color is ignored if the GL_REPLACE texture environment is used. // glTexEnvi(triple->target, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBindTexture(triple->target, 0); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 78ad364b8e8..56a7ff30ad8 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -691,7 +691,8 @@ static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, P if (properties) { otmacro = ot->macro.first; - RNA_STRUCT_BEGIN (properties, prop) { + RNA_STRUCT_BEGIN (properties, prop) + { if (otmacro == NULL) break; @@ -746,7 +747,7 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event) } } -#if 0 /* disabling for 2.63 release, since we keep getting reports some menu items are leaving props undefined */ +#if 1 /* disabling for 2.63 release, since we keep getting reports some menu items are leaving props undefined */ int WM_operator_last_properties_init(wmOperator *op) { int change = FALSE; @@ -760,7 +761,8 @@ int WM_operator_last_properties_init(wmOperator *op) iterprop = RNA_struct_iterator_property(op->type->srna); - RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) + { PropertyRNA *prop = itemptr.data; if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) { if (!RNA_property_is_set(op->ptr, prop)) { /* don't override a setting already set */ diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 874611150cb..6ed6e13f3d0 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -363,7 +363,7 @@ void WM_read_file(bContext *C, const char *filepath, ReportList *reports) WM_cursor_wait(1); - BLI_exec_cb(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE); + BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE); /* first try to append data from exotic file formats... */ /* it throws error box when file doesn't exist and returns -1 */ @@ -424,7 +424,7 @@ void WM_read_file(bContext *C, const char *filepath, ReportList *reports) FRS_read_file(C); /* important to do before NULL'ing the context */ - BLI_exec_cb(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST); + BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST); if (!G.background) { /* in background mode this makes it hard to load @@ -794,7 +794,7 @@ int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *re ibuf_thumb = blend_file_thumb(CTX_data_scene(C), CTX_wm_screen(C), &thumb); } - BLI_exec_cb(G.main, NULL, BLI_CB_EVT_SAVE_PRE); + BLI_callback_exec(G.main, NULL, BLI_CB_EVT_SAVE_PRE); /* operator now handles overwrite checks */ @@ -829,7 +829,7 @@ int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *re write_history(); } - BLI_exec_cb(G.main, NULL, BLI_CB_EVT_SAVE_POST); + BLI_callback_exec(G.main, NULL, BLI_CB_EVT_SAVE_POST); /* run this function after because the file cant be written before the blend is */ if (ibuf_thumb) { diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index bfa3645bf57..7f40d2980a6 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -236,7 +236,7 @@ static void draw_filled_lasso(wmGesture *gt) short *lasso = (short *)gt->customdata; int i; - BLI_begin_edgefill(&sf_ctx); + BLI_scanfill_begin(&sf_ctx); for (i = 0; i < gt->points; i++, lasso += 2) { float co[3]; @@ -244,9 +244,9 @@ static void draw_filled_lasso(wmGesture *gt) co[1] = (float)lasso[1]; co[2] = 0.0f; - v = BLI_addfillvert(&sf_ctx, co); + v = BLI_scanfill_vert_add(&sf_ctx, co); if (lastv) - /* e = */ /* UNUSED */ BLI_addfilledge(&sf_ctx, lastv, v); + /* e = */ /* UNUSED */ BLI_scanfill_edge_add(&sf_ctx, lastv, v); lastv = v; if (firstv == NULL) firstv = v; } @@ -254,8 +254,8 @@ static void draw_filled_lasso(wmGesture *gt) /* highly unlikely this will fail, but could crash if (gt->points == 0) */ if (firstv) { float zvec[3] = {0.0f, 0.0f, 1.0f}; - BLI_addfilledge(&sf_ctx, firstv, v); - BLI_edgefill_ex(&sf_ctx, FALSE, zvec); + BLI_scanfill_edge_add(&sf_ctx, firstv, v); + BLI_scanfill_calc_ex(&sf_ctx, FALSE, zvec); glEnable(GL_BLEND); glColor4f(1.0, 1.0, 1.0, 0.05); @@ -268,7 +268,7 @@ static void draw_filled_lasso(wmGesture *gt) glEnd(); glDisable(GL_BLEND); - BLI_end_edgefill(&sf_ctx); + BLI_scanfill_end(&sf_ctx); } } diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index cd7a8a93975..22d1cbe5e11 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -815,8 +815,8 @@ char *WM_keymap_item_to_string(wmKeyMapItem *kmi, char *str, int len) } static wmKeyMapItem *wm_keymap_item_find_handlers( - const bContext *C, ListBase *handlers, const char *opname, int UNUSED(opcontext), - IDProperty *properties, int compare_props, int hotkey, wmKeyMap **keymap_r) + const bContext *C, ListBase *handlers, const char *opname, int UNUSED(opcontext), + IDProperty *properties, int compare_props, int hotkey, wmKeyMap **keymap_r) { wmWindowManager *wm = CTX_wm_manager(C); wmEventHandler *handler; @@ -856,8 +856,8 @@ static wmKeyMapItem *wm_keymap_item_find_handlers( } static wmKeyMapItem *wm_keymap_item_find_props( - const bContext *C, const char *opname, int opcontext, - IDProperty *properties, int compare_props, int hotkey, wmKeyMap **keymap_r) + const bContext *C, const char *opname, int opcontext, + IDProperty *properties, int compare_props, int hotkey, wmKeyMap **keymap_r) { wmWindow *win = CTX_wm_window(C); ScrArea *sa = CTX_wm_area(C); @@ -906,8 +906,8 @@ static wmKeyMapItem *wm_keymap_item_find_props( } static wmKeyMapItem *wm_keymap_item_find( - const bContext *C, const char *opname, int opcontext, - IDProperty *properties, const short hotkey, const short sloppy, wmKeyMap **keymap_r) + const bContext *C, const char *opname, int opcontext, + IDProperty *properties, const short hotkey, const short sloppy, wmKeyMap **keymap_r) { wmKeyMapItem *found = wm_keymap_item_find_props(C, opname, opcontext, properties, 1, hotkey, keymap_r); @@ -918,8 +918,8 @@ static wmKeyMapItem *wm_keymap_item_find( } char *WM_key_event_operator_string( - const bContext *C, const char *opname, int opcontext, - IDProperty *properties, const short sloppy, char *str, int len) + const bContext *C, const char *opname, int opcontext, + IDProperty *properties, const short sloppy, char *str, int len) { wmKeyMapItem *kmi = wm_keymap_item_find(C, opname, opcontext, properties, 0, sloppy, NULL); @@ -932,8 +932,8 @@ char *WM_key_event_operator_string( } int WM_key_event_operator_id( - const bContext *C, const char *opname, int opcontext, - IDProperty *properties, int hotkey, wmKeyMap **keymap_r) + const bContext *C, const char *opname, int opcontext, + IDProperty *properties, int hotkey, wmKeyMap **keymap_r) { wmKeyMapItem *kmi = wm_keymap_item_find(C, opname, opcontext, properties, hotkey, TRUE, keymap_r); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 7fbdce097a9..db0429d33ab 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -84,6 +84,7 @@ #include "ED_screen.h" #include "ED_util.h" +#include "ED_object.h" #include "RNA_access.h" #include "RNA_define.h" @@ -589,7 +590,8 @@ void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, con void WM_operator_properties_sanitize(PointerRNA *ptr, const short no_context) { - RNA_STRUCT_BEGIN (ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) + { switch (RNA_property_type(prop)) { case PROP_ENUM: if (no_context) @@ -622,7 +624,8 @@ void WM_operator_properties_reset(wmOperator *op) PropertyRNA *iterprop; iterprop = RNA_struct_iterator_property(op->type->srna); - RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) + { PropertyRNA *prop = itemptr.data; if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) { @@ -1796,7 +1799,8 @@ static int wm_link_append_exec(bContext *C, wmOperator *op) BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag); } else { - RNA_BEGIN (op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") + { RNA_string_get(&itemptr, "name", name); BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag); } @@ -2129,7 +2133,12 @@ static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED { if (!RNA_struct_property_is_set(op->ptr, "filepath")) { char filepath[FILE_MAX]; - BLI_strncpy(filepath, G.main->name, sizeof(filepath)); + + if (G.main->name[0] == 0) + BLI_strncpy(filepath, "untitled", sizeof(filepath)); + else + BLI_strncpy(filepath, G.main->name, sizeof(filepath)); + BLI_replace_extension(filepath, sizeof(filepath), ".dae"); RNA_string_set(op->ptr, "filepath", filepath); } @@ -2153,6 +2162,10 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filepath", filename); selected = RNA_boolean_get(op->ptr, "selected"); second_life = RNA_boolean_get(op->ptr, "second_life"); + + /* get editmode results */ + ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */ + if (collada_export(CTX_data_scene(C), filename, selected, second_life)) { return OPERATOR_FINISHED; } @@ -2326,10 +2339,10 @@ static int border_apply_rect(wmOperator *op) /* operator arguments and storage. */ - RNA_int_set(op->ptr, "xmin", MIN2(rect->xmin, rect->xmax) ); - RNA_int_set(op->ptr, "ymin", MIN2(rect->ymin, rect->ymax) ); - RNA_int_set(op->ptr, "xmax", MAX2(rect->xmin, rect->xmax) ); - RNA_int_set(op->ptr, "ymax", MAX2(rect->ymin, rect->ymax) ); + RNA_int_set(op->ptr, "xmin", MIN2(rect->xmin, rect->xmax)); + RNA_int_set(op->ptr, "ymin", MIN2(rect->ymin, rect->ymax)); + RNA_int_set(op->ptr, "xmax", MAX2(rect->xmin, rect->xmax)); + RNA_int_set(op->ptr, "ymax", MAX2(rect->ymin, rect->ymax)); return 1; } @@ -2774,7 +2787,8 @@ int WM_gesture_lines_cancel(bContext *C, wmOperator *op) static int gesture_lasso_exec(bContext *C, wmOperator *op) { - RNA_BEGIN (op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") + { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); @@ -2973,7 +2987,7 @@ static void radial_control_set_tex(RadialControl *rc) switch (RNA_type_to_ID_code(rc->image_id_ptr.type)) { case ID_BR: - if ((ibuf = brush_gen_radial_control_imbuf(rc->image_id_ptr.data))) { + if ((ibuf = BKE_brush_gen_radial_control_imbuf(rc->image_id_ptr.data))) { glGenTextures(1, &rc->gltex); glBindTexture(GL_TEXTURE_2D, rc->gltex); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, ibuf->x, ibuf->y, 0, diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c index 6ffb28ba013..563eef8304c 100644 --- a/source/blender/windowmanager/intern/wm_subwindow.c +++ b/source/blender/windowmanager/intern/wm_subwindow.c @@ -237,7 +237,7 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct) } } -/* ---------------- WM versions of OpenGL calls, using glBlah() syntax ------------------------ */ +/* ---------------- WM versions of OpenGL style API calls ------------------------ */ /* ----------------- exported in WM_api.h ------------------------------------------------------ */ /* internal state, no threaded opengl! XXX */ diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 4d81706abdc..5ced611f665 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -125,11 +125,11 @@ void EDBM_mesh_normals_update(struct BMEditMesh *em) {} void *g_system; struct Heap* BLI_heap_new (void){return NULL;} -void BLI_heap_free (struct Heap *heap, void *ptrfreefp) {} +void BLI_heap_free(struct Heap *heap, void *ptrfreefp) {} struct HeapNode* BLI_heap_insert (struct Heap *heap, float value, void *ptr){return NULL;} -void BLI_heap_remove (struct Heap *heap, struct HeapNode *node) {} -int BLI_heap_empty (struct Heap *heap) {return 0;} -int BLI_heap_size (struct Heap *heap){return 0;} +void BLI_heap_remove(struct Heap *heap, struct HeapNode *node) {} +int BLI_heap_empty(struct Heap *heap) {return 0;} +int BLI_heap_size(struct Heap *heap){return 0;} struct HeapNode* BLI_heap_top (struct Heap *heap){return NULL;} void* BLI_heap_popmin (struct Heap *heap){return NULL;} @@ -194,7 +194,7 @@ float *give_cursor(struct Scene *scene, struct View3D *v3d){return (float *) NUL void WM_menutype_free(void){} void WM_menutype_freelink(struct MenuType* mt){} int WM_menutype_add(struct MenuType *mt) {return 0;} -int WM_operator_props_dialog_popup (struct bContext *C, struct wmOperator *op, int width, int height){return 0;} +int WM_operator_props_dialog_popup(struct bContext *C, struct wmOperator *op, int width, int height){return 0;} int WM_operator_confirm(struct bContext *C, struct wmOperator *op, struct wmEvent *event){return 0;} struct MenuType *WM_menutype_find(const char *idname, int quiet){return (struct MenuType *) NULL;} void WM_operator_stack_clear(struct bContext *C) {} @@ -214,7 +214,7 @@ struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, struct wmO struct wmTimer *WM_event_add_timer(struct wmWindowManager *wm, struct wmWindow *win, int event_type, double timestep){return (struct wmTimer *)NULL;} void WM_event_remove_timer(struct wmWindowManager *wm, struct wmWindow *win, struct wmTimer *timer){} void ED_armature_edit_bone_remove(struct bArmature *arm, struct EditBone *exBone){} -void object_test_constraints (struct Object *owner){} +void object_test_constraints(struct Object *owner){} void ED_object_parent(struct Object *ob, struct Object *par, int type, const char *substr){} void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con){} void ED_node_composit_default(struct Scene *sce){} @@ -274,11 +274,11 @@ struct KeyingSetInfo *ANIM_keyingset_info_find_named (const char name[]){return struct KeyingSet *ANIM_scene_get_active_keyingset (struct Scene *scene){return (struct KeyingSet *) NULL;} int ANIM_scene_get_keyingset_index(struct Scene *scene, struct KeyingSet *ks){return 0;} struct ListBase builtin_keyingsets; -void ANIM_keyingset_info_register (struct KeyingSetInfo *ksi){} -void ANIM_keyingset_info_unregister (const struct bContext *C, struct KeyingSetInfo *ksi){} -short ANIM_validate_keyingset (struct bContext *C, struct ListBase *dsources, struct KeyingSet *ks){return 0;} +void ANIM_keyingset_info_register(struct KeyingSetInfo *ksi){} +void ANIM_keyingset_info_unregister(const struct bContext *C, struct KeyingSetInfo *ksi){} +short ANIM_validate_keyingset(struct bContext *C, struct ListBase *dsources, struct KeyingSet *ks){return 0;} short ANIM_add_driver(struct ID *id, const char rna_path[], int array_index, short flag, int type){return 0;} -short ANIM_remove_driver (struct ID *id, const char rna_path[], int array_index, short flag){return 0;} +short ANIM_remove_driver(struct ID *id, const char rna_path[], int array_index, short flag){return 0;} void ED_space_image_release_buffer(struct SpaceImage *sima, void *lock){} struct ImBuf *ED_space_image_acquire_buffer(struct SpaceImage *sima, void **lock_r){return (struct ImBuf *) NULL;} void ED_space_image_zoom(struct SpaceImage *sima, struct ARegion *ar, float *zoomx, float *zoomy) {} @@ -288,7 +288,7 @@ void ED_area_tag_refresh(struct ScrArea *sa){} void ED_area_newspace(struct bContext *C, struct ScrArea *sa, int type){} void ED_region_tag_redraw(struct ARegion *ar){} void WM_event_add_fileselect(struct bContext *C, struct wmOperator *op){} -void WM_cursor_wait (int val) {} +void WM_cursor_wait(int val) {} void ED_node_texture_default(struct Tex *tx){} void ED_node_changed_update(struct bContext *C, struct bNode *node){} void ED_node_generic_update(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node){} @@ -361,8 +361,8 @@ void ED_nurb_set_spline_type(struct Nurb *nu, int type){} void make_editLatt(struct Object *obedit){} void load_editLatt(struct Object *obedit){} -void load_editNurb (struct Object *obedit){} -void make_editNurb (struct Object *obedit){} +void load_editNurb(struct Object *obedit){} +void make_editNurb(struct Object *obedit){} void uiItemR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, int flag, char *name, int icon){} @@ -472,7 +472,7 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(struct wmOperatorType*, voi void WM_operator_bl_idname(char *to, const char *from){} void WM_operator_py_idname(char *to, const char *from){} void WM_operator_ui_popup(struct bContext *C, struct wmOperator *op, int width, int height){} -short insert_keyframe (struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;} +short insert_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;} short delete_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;}; char *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args){return (char *)NULL;} struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value){return (struct wmKeyMapItem *)NULL;} @@ -502,6 +502,8 @@ float BPY_driver_exec(struct ChannelDriver *driver, const float evaltime) {retur void BPY_DECREF(void *pyob_ptr) {} void BPY_pyconstraint_exec(struct bPythonConstraint *con, struct bConstraintOb *cob, struct ListBase *targets) {} void macro_wrapper(struct wmOperatorType *ot, void *userdata) {} +int pyrna_id_FromPyObject(struct PyObject *obj, struct ID **id){ return 0; } +struct PyObject *pyrna_id_CreatePyObject(struct ID *id) {return NULL; } /* Freestyle */ void FRS_add_freestyle_config(struct SceneRenderLayer* srl) {} diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 9618725dfad..e8117095d6a 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -439,7 +439,28 @@ if(UNIX AND NOT APPLE) # # doesnt work, todo # install(CODE "execute_process(COMMAND find ${TARGETDIR}/${BLENDER_VERSION}/python/lib/ -name '*.so' -exec strip -s {} '\;')") + + if(WITH_PYTHON_INSTALL_NUMPY) + install( + DIRECTORY ${PYTHON_NUMPY_PATH}/numpy + DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/site-packages + PATTERN ".svn" EXCLUDE + PATTERN "__pycache__" EXCLUDE # * any cache * + PATTERN "*.pyc" EXCLUDE # * any cache * + PATTERN "*.pyo" EXCLUDE # * any cache * + PATTERN "distutils" EXCLUDE # ./distutils + PATTERN "oldnumeric" EXCLUDE # ./oldnumeric + PATTERN "doc" EXCLUDE # ./doc + PATTERN "tests" EXCLUDE # ./tests + PATTERN "f2py" EXCLUDE # ./f2py - fortran/python interface code, not fun for blender devs. + PATTERN "include" EXCLUDE # include dirs all over, we wont use NumPy/CAPI + PATTERN "*.h" EXCLUDE # some includes are not in include dirs + PATTERN "*.a" EXCLUDE # ./core/lib/libnpymath.a - for linking, we dont need. + ) + endif() + unset(_target_LIB) + endif() endif() elseif(WIN32) @@ -546,6 +567,11 @@ elseif(WIN32) FILES ${LIBDIR}/pthreads/lib/pthreadGC2.dll DESTINATION ${TARGETDIR} ) + elseif(WITH_MINGW64) + install( + FILES ${LIBDIR}/binaries/pthreadGC2-w64.dll + DESTINATION ${TARGETDIR} + ) endif() endif() diff --git a/source/creator/creator.c b/source/creator/creator.c index 16cdd50bd37..0c50bb9e83f 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -1103,7 +1103,7 @@ static void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle) #ifdef WITH_FFMPEG BLI_argsAdd(ba, 1, NULL, "--debug-ffmpeg", "\n\tEnable debug messages from FFmpeg library", debug_mode_generic, (void *)G_DEBUG_FFMPEG); #endif - BLI_argsAdd(ba, 1, NULL, "--debug-python", "\n\tEnable debug messages for python", debug_mode_generic, (void *)G_DEBUG_FFMPEG); + BLI_argsAdd(ba, 1, NULL, "--debug-python", "\n\tEnable debug messages for python", debug_mode_generic, (void *)G_DEBUG_PYTHON); BLI_argsAdd(ba, 1, NULL, "--debug-events", "\n\tEnable debug messages for the event system", debug_mode_generic, (void *)G_DEBUG_EVENTS); BLI_argsAdd(ba, 1, NULL, "--debug-wm", "\n\tEnable debug messages for the window manager", debug_mode_generic, (void *)G_DEBUG_WM); BLI_argsAdd(ba, 1, NULL, "--debug-all", "\n\tEnable all debug messages (excludes libmv)", debug_mode_generic, (void *)G_DEBUG_ALL); @@ -1250,7 +1250,7 @@ int main(int argc, const char **argv) IMB_init(); - BLI_cb_init(); + BLI_callback_global_init(); #ifdef WITH_GAMEENGINE syshandle = SYS_GetSystem(); @@ -1328,8 +1328,7 @@ int main(int argc, const char **argv) BLI_argsFree(ba); #ifdef WIN32 - while (argci) - { + while (argci) { free(argv[--argci]); } MEM_freeN(argv); diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 382165065af..ad232818c33 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1000,9 +1000,9 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, KX_Scene* scene, float fno[3]; if (mface->v4) - normal_quad_v3( fno,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); + normal_quad_v3(fno,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co, mvert[mface->v4].co); else - normal_tri_v3( fno,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); + normal_tri_v3(fno,mvert[mface->v1].co, mvert[mface->v2].co, mvert[mface->v3].co); no0 = no1 = no2 = no3 = MT_Vector3(fno); } diff --git a/source/gameengine/Converter/KX_ConvertProperties.h b/source/gameengine/Converter/KX_ConvertProperties.h index 5bfe202a539..345af3bfa74 100644 --- a/source/gameengine/Converter/KX_ConvertProperties.h +++ b/source/gameengine/Converter/KX_ConvertProperties.h @@ -33,10 +33,10 @@ #define __KX_CONVERTPROPERTIES_H__ void BL_ConvertProperties(struct Object* object, - class KX_GameObject* gameobj, - class SCA_TimeEventManager* timemgr, - class SCA_IScene* scene, - bool isInActiveLayer); + class KX_GameObject* gameobj, + class SCA_TimeEventManager* timemgr, + class SCA_IScene* scene, + bool isInActiveLayer); #endif //__KX_CONVERTPROPERTIES_H__ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h index e40c2492b8a..894dc2162cf 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h @@ -1,7 +1,4 @@ /* - * Actuator sensor - * - * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -28,13 +25,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef __SCA_ACTUATORSENSOR_H__ +#define __SCA_ACTUATORSENSOR_H__ + /** \file SCA_ActuatorSensor.h * \ingroup gamelogic */ -#ifndef __SCA_ACTUATORSENSOR_H__ -#define __SCA_ACTUATORSENSOR_H__ - #include "SCA_ISensor.h" #include "SCA_IActuator.h" @@ -71,4 +68,3 @@ public: }; #endif - diff --git a/source/gameengine/GamePlayer/common/GPC_Canvas.cpp b/source/gameengine/GamePlayer/common/GPC_Canvas.cpp index eccfefedd4d..f4224b9e255 100644 --- a/source/gameengine/GamePlayer/common/GPC_Canvas.cpp +++ b/source/gameengine/GamePlayer/common/GPC_Canvas.cpp @@ -88,6 +88,12 @@ void GPC_Canvas::Resize(int width, int height) { m_width = width; m_height = height; + + // initialize area so that it's available for game logic on frame 1 (ImageViewport) + m_displayarea.m_x1 = 0; + m_displayarea.m_y1 = 0; + m_displayarea.m_x2 = width; + m_displayarea.m_y2 = height; } void GPC_Canvas::EndFrame() diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h index 3015dd204c8..47221365816 100644 --- a/source/gameengine/Ketsji/BL_Shader.h +++ b/source/gameengine/Ketsji/BL_Shader.h @@ -231,30 +231,30 @@ public: virtual PyObject* py_repr(void) { return PyUnicode_FromFormat("BL_Shader\n\tvertex shader:%s\n\n\tfragment shader%s\n\n", vertProg, fragProg); } // ----------------------------------- - KX_PYMETHOD_DOC( BL_Shader, setSource ); - KX_PYMETHOD_DOC( BL_Shader, delSource ); - KX_PYMETHOD_DOC( BL_Shader, getVertexProg ); - KX_PYMETHOD_DOC( BL_Shader, getFragmentProg ); - KX_PYMETHOD_DOC( BL_Shader, setNumberOfPasses ); - KX_PYMETHOD_DOC( BL_Shader, isValid); - KX_PYMETHOD_DOC( BL_Shader, validate); + KX_PYMETHOD_DOC(BL_Shader, setSource); + KX_PYMETHOD_DOC(BL_Shader, delSource); + KX_PYMETHOD_DOC(BL_Shader, getVertexProg); + KX_PYMETHOD_DOC(BL_Shader, getFragmentProg); + KX_PYMETHOD_DOC(BL_Shader, setNumberOfPasses); + KX_PYMETHOD_DOC(BL_Shader, isValid); + KX_PYMETHOD_DOC(BL_Shader, validate); // ----------------------------------- - KX_PYMETHOD_DOC( BL_Shader, setUniform4f ); - KX_PYMETHOD_DOC( BL_Shader, setUniform3f ); - KX_PYMETHOD_DOC( BL_Shader, setUniform2f ); - KX_PYMETHOD_DOC( BL_Shader, setUniform1f ); - KX_PYMETHOD_DOC( BL_Shader, setUniform4i ); - KX_PYMETHOD_DOC( BL_Shader, setUniform3i ); - KX_PYMETHOD_DOC( BL_Shader, setUniform2i ); - KX_PYMETHOD_DOC( BL_Shader, setUniform1i ); - KX_PYMETHOD_DOC( BL_Shader, setUniformfv ); - KX_PYMETHOD_DOC( BL_Shader, setUniformiv ); - KX_PYMETHOD_DOC( BL_Shader, setUniformMatrix4 ); - KX_PYMETHOD_DOC( BL_Shader, setUniformMatrix3 ); - KX_PYMETHOD_DOC( BL_Shader, setUniformDef ); - KX_PYMETHOD_DOC( BL_Shader, setAttrib ); - KX_PYMETHOD_DOC( BL_Shader, setSampler); + KX_PYMETHOD_DOC(BL_Shader, setUniform4f); + KX_PYMETHOD_DOC(BL_Shader, setUniform3f); + KX_PYMETHOD_DOC(BL_Shader, setUniform2f); + KX_PYMETHOD_DOC(BL_Shader, setUniform1f); + KX_PYMETHOD_DOC(BL_Shader, setUniform4i); + KX_PYMETHOD_DOC(BL_Shader, setUniform3i); + KX_PYMETHOD_DOC(BL_Shader, setUniform2i); + KX_PYMETHOD_DOC(BL_Shader, setUniform1i); + KX_PYMETHOD_DOC(BL_Shader, setUniformfv); + KX_PYMETHOD_DOC(BL_Shader, setUniformiv); + KX_PYMETHOD_DOC(BL_Shader, setUniformMatrix4); + KX_PYMETHOD_DOC(BL_Shader, setUniformMatrix3); + KX_PYMETHOD_DOC(BL_Shader, setUniformDef); + KX_PYMETHOD_DOC(BL_Shader, setAttrib); + KX_PYMETHOD_DOC(BL_Shader, setSampler); #endif }; diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index af6771933eb..3a6dda06320 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -113,12 +113,12 @@ public: static PyObject* pyattr_get_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); - KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader ); - KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex ); - KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture ); - KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture ); + KX_PYMETHOD_DOC(KX_BlenderMaterial, getShader); + KX_PYMETHOD_DOC(KX_BlenderMaterial, getMaterialIndex); + KX_PYMETHOD_DOC(KX_BlenderMaterial, getTexture); + KX_PYMETHOD_DOC(KX_BlenderMaterial, setTexture); - KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending ); + KX_PYMETHOD_DOC(KX_BlenderMaterial, setBlending); #endif // WITH_PYTHON // -------------------------------- diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp index 9940b400527..f5926818e7d 100644 --- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp +++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp @@ -121,8 +121,8 @@ void KX_BulletPhysicsController::RelativeTranslate(const MT_Vector3& dloc,bool l void KX_BulletPhysicsController::RelativeRotate(const MT_Matrix3x3& drot,bool local) { - float rotval[12]; - drot.getValue(rotval); + float rotval[9]; + drot.getValue3x3(rotval); CcdPhysicsController::RelativeRotate(rotval,local); } diff --git a/source/gameengine/Ketsji/KX_FontObject.h b/source/gameengine/Ketsji/KX_FontObject.h index affa882427f..30fe89162c0 100644 --- a/source/gameengine/Ketsji/KX_FontObject.h +++ b/source/gameengine/Ketsji/KX_FontObject.h @@ -39,10 +39,10 @@ class KX_FontObject : public KX_GameObject { public: Py_Header - KX_FontObject( void* sgReplicationInfo, - SG_Callbacks callbacks, - RAS_IRenderTools* rendertools, - Object *ob); + KX_FontObject(void* sgReplicationInfo, + SG_Callbacks callbacks, + RAS_IRenderTools* rendertools, + Object *ob); virtual ~KX_FontObject(); diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp index 7e9d95b37a2..5922e97aaf4 100644 --- a/source/gameengine/Ketsji/KX_Light.cpp +++ b/source/gameengine/Ketsji/KX_Light.cpp @@ -45,6 +45,7 @@ #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_lamp_types.h" #include "GPU_material.h" KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks, @@ -267,6 +268,22 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras) GPU_lamp_shadow_buffer_unbind(lamp); } +struct Image *KX_LightObject::GetTextureImage(short texslot) +{ + Lamp *la = (Lamp*)GetBlenderObject()->data; + + if (texslot >= MAX_MTEX || texslot < 0) + { + printf("KX_LightObject::GetTextureImage(): texslot exceeds slot bounds (0-%d)\n", MAX_MTEX-1); + return NULL; + } + + if (la->mtex[texslot]) + return la->mtex[texslot]->tex->ima; + + return NULL; +} + #ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h index c2815e7afaa..9fe13f471ba 100644 --- a/source/gameengine/Ketsji/KX_Light.h +++ b/source/gameengine/Ketsji/KX_Light.h @@ -66,6 +66,7 @@ public: int GetShadowLayer(); void BindShadowBuffer(class RAS_IRasterizer *ras, class KX_Camera *cam, class MT_Transform& camtrans); void UnbindShadowBuffer(class RAS_IRasterizer *ras); + struct Image *GetTextureImage(short texslot); void Update(); void UpdateScene(class KX_Scene *kxscene) {m_lightobj.m_scene = (void*)kxscene;} diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h index 392a6633067..b0000405893 100644 --- a/source/gameengine/Ketsji/KX_PyMath.h +++ b/source/gameengine/Ketsji/KX_PyMath.h @@ -108,7 +108,7 @@ bool PyMatTo(PyObject* pymat, T& mat) noerror = false; else { - for( unsigned int col = 0; col < cols; col++) + for(unsigned int col = 0; col < cols; col++) { PyObject *item = PySequence_GetItem(pyrow, col); /* new ref */ mat[row][col] = PyFloat_AsDouble(item); diff --git a/source/gameengine/Ketsji/KX_PythonSeq.h b/source/gameengine/Ketsji/KX_PythonSeq.h index 1c2d2869be0..47a01737cdb 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.h +++ b/source/gameengine/Ketsji/KX_PythonSeq.h @@ -52,7 +52,7 @@ enum KX_PYGENSEQ_TYPE { extern PyTypeObject KX_PythonSeq_Type; #define BPy_KX_PythonSeq_Check(obj) \ - (Py_TYPE(obj) == &KX_PythonSeq_Type) + (Py_TYPE(obj) == &KX_PythonSeq_Type) typedef struct { PyObject_VAR_HEAD diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp index 1739f26ab6f..d489c015273 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.cpp +++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp @@ -500,7 +500,7 @@ PyObject* KX_VertexProxy::PyGetRGBA() PyObject* KX_VertexProxy::PySetRGBA(PyObject* value) { - if PyLong_Check(value) { + if (PyLong_Check(value)) { int rgba = PyLong_AsSsize_t(value); m_vertex->SetRGBA(rgba); m_mesh->SetMeshModified(true); diff --git a/source/gameengine/Rasterizer/RAS_ICanvas.h b/source/gameengine/Rasterizer/RAS_ICanvas.h index 337ea247ce3..dae70c5c343 100644 --- a/source/gameengine/Rasterizer/RAS_ICanvas.h +++ b/source/gameengine/Rasterizer/RAS_ICanvas.h @@ -133,25 +133,25 @@ public: virtual int - GetMouseX( int x + GetMouseX(int x )=0; virtual int - GetMouseY( int y + GetMouseY(int y )= 0; virtual float - GetMouseNormalizedX( int x + GetMouseNormalizedX(int x )=0; virtual float - GetMouseNormalizedY( int y + GetMouseNormalizedY(int y )= 0; - virtual + virtual const RAS_Rect & GetDisplayArea( ) const = 0; diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h index 592ddbe07d3..d6c9ddd9603 100644 --- a/source/gameengine/Rasterizer/RAS_IRasterizer.h +++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h @@ -386,7 +386,7 @@ public: */ virtual void SetPolygonOffset(float mult, float add) = 0; - virtual void DrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,const MT_Vector3& color)=0; + virtual void DrawDebugLine(const MT_Vector3& from, const MT_Vector3& to, const MT_Vector3& color)=0; virtual void DrawDebugCircle(const MT_Vector3& center, const MT_Scalar radius, const MT_Vector3& color, const MT_Vector3& normal, int nsector)=0; virtual void FlushDebugShapes()=0; diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp index 9f7d42dcf56..98a3dc8f96a 100644 --- a/source/gameengine/VideoTexture/ImageRender.cpp +++ b/source/gameengine/VideoTexture/ImageRender.cpp @@ -608,10 +608,10 @@ ImageRender::ImageRender (KX_Scene * scene, KX_GameObject * observer, KX_GameObj { v4 = polygon->GetVertex(3); mirrorVerts.push_back(v4); - area = normal_quad_v3( normal,(float*)v1->getXYZ(), (float*)v2->getXYZ(), (float*)v3->getXYZ(), (float*)v4->getXYZ()); + area = normal_quad_v3(normal,(float*)v1->getXYZ(), (float*)v2->getXYZ(), (float*)v3->getXYZ(), (float*)v4->getXYZ()); } else { - area = normal_tri_v3( normal,(float*)v1->getXYZ(), (float*)v2->getXYZ(), (float*)v3->getXYZ()); + area = normal_tri_v3(normal,(float*)v1->getXYZ(), (float*)v2->getXYZ(), (float*)v3->getXYZ()); } area = fabs(area); mirrorArea += area; diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp index 40e9f899ef0..382d3d0bc32 100644 --- a/source/gameengine/VideoTexture/Texture.cpp +++ b/source/gameengine/VideoTexture/Texture.cpp @@ -30,6 +30,7 @@ http://www.gnu.org/copyleft/lesser.txt. #include <structmember.h> #include <KX_GameObject.h> +#include <KX_Light.h> #include <RAS_MeshObject.h> #include <DNA_mesh_types.h> #include <DNA_meshdata_types.h> @@ -59,6 +60,7 @@ http://www.gnu.org/copyleft/lesser.txt. // Blender GameObject type BlendType<KX_GameObject> gameObjectType ("KX_GameObject"); +BlendType<KX_LightObject> lightObjectType ("KX_LightObject"); // load texture @@ -105,6 +107,16 @@ RAS_IPolyMaterial * getMaterial (PyObject *obj, short matID) return NULL; } +// get pointer to a lamp +KX_LightObject * getLamp(PyObject *obj) +{ + // if object is available + if (obj == NULL) return NULL; + + // returns NULL if obj is not a KX_LightObject + return lightObjectType.checkType(obj); +} + // get material ID short getMaterialID(PyObject * obj, const char *name) @@ -206,6 +218,7 @@ int Texture_init (Texture *self, PyObject *args, PyObject *kwds) { // get pointer to texture image RAS_IPolyMaterial * mat = getMaterial(obj, matID); + KX_LightObject * lamp = getLamp(obj); if (mat != NULL) { // is it blender material or polygon material @@ -227,6 +240,12 @@ int Texture_init (Texture *self, PyObject *args, PyObject *kwds) self->m_useMatTexture = false; } } + else if (lamp != NULL) + { + self->m_imgTexture = lamp->GetTextureImage(texID); + self->m_useMatTexture = false; + } + // check if texture is available, if not, initialization failed if (self->m_imgTexture == NULL && self->m_matTexture == NULL) // throw exception if initialization failed |